11.7. Resolución de Problemas

Una vez que hizo la simple prueba con lptest(1), puede ser que haya obtenido uno de los siguientes resultados, en vez de la correcta impresión:

Trabajo, después de un tiempo; o no expulso completamente la hoja.

La impresora llevo a cabo la impresión, pero espero bastante o bien finalmente no hizo nada. De hecho, es posible que haya sido necesario presionar en su impresora el botón para poner a la impresora EN LINEA o bien de ALIMENTACION DE PAGINA.

Si este es el caso, su impresora esperaba a ver si exisitian más datos para imprimir, antes de comenzar con la impresión. Para arreglar este problema puede hacer que su filtro de texto envie al final un caracter de ALIMENTACION DE PAGINA o cualquiera que sea necesario para la impresora. Esto normalmente es suficiente para que la impresora imprima todos los datos restantes en su buffer interno. También es recomendable verificar que cada trabajo enviado se haya impreso en una página completa, de tal forma que el siguiente trabajo no comience en la mitad de la última página del trabajo previo.

El siguiente ShellScript se puede utilizar como reemplazo de /usr/local/libexec/if-simple, para imprimir un caracter de alimentación de página:

#!/bin/sh
#
# if-simple - Filtro de texto simple para lpd
# Instalado en /usr/local/libexec/if-simple
#
# Simplemente manda la entrada a la salida estandar. 
# Ignora los argumentos del filtro.
# Escribe un caracter de alimentacion de pagina (\f) despues de imprimir.

/bin/cat && printf "\f" && exit 0
exit 2
Se produce un “efecto de escalera.”

Usted obtiene la siguiente impresión:

!"#$%&'()*+,-./01234
                "#$%&'()*+,-./012345
                                 #$%&'()*+,-./0123456

Usted es otra víctima del efecto de escalera, causada por el conflicto de interpretación, sobre cual caracter indica la nueva línea. Los sistemas operativos estilo-Unix, usan un caracter sencillo: código ASCII 10, alimentación de línea (LF). MS-DOS, OS/2 y otros utilizan un par de caracteres, código ASCII 10 y código ASCII 13 (retorno de carrete o CR). Muchas impresoras usan la forma de MS-DOS, para representar los saltos de líneas.

Cuando usted imprime con FreeBSD, su texto hace uso del caracter de nueva línea. La impresora, una vez que detecta el caracter de nueva línea, avanza el papel una línea, pero manteniendo la misma posición horizontal, para la impresión del siguiente caracter. Para eso es el caracter de retorno de carrete: para mover la posición horizontal al borde izquierdo del papel.

Aqui tenemos lo que FreeBSD desea que haga su impresora:

Impresora recibe CR Impresora imprime CR
Impresora recibe LF Impresora imprime CR + LF

Aqui tenemos algunas formas de llevar esto a cabo:

  • Usar los botones de configuración de la impresora o el panel de control, para modificar su interpretación de estos caracteres. Verifique el manual de su impresora para ver como hacer esto.

    Nota: Si cuenta con otro sistema operativo en su maquina, ademas de FreeBSD, quizás sea necesario reconfigurar la impresora, para usar la interpretación de los caracteres de CR y LF del otro sistema operativo. Puede escoger una de las otras soluciones que se comentan más adelante.

  • Puede hacer que el controlador serial de FreeBSD, automáticamente convierta LF en CR+LF. Claro esta, que esta alternativa funciona solo en impresoras seriales. Para habilitar esta habilidad, establezca el bit CRMOD, en la característica fs del fichero /etc/printcap para la impresora.

  • Envie un código de escape a la impresora para que temporalmente de un tratamiento diferente a los caracteres LF. Consulte el manual de su impresora para ver los códigos de escape soportados por su impresora. Una vez que localice el código correcto, modifique su filtro de texto, para que se envie este código primero y después el trabajo a imprimir.

    Aqui tenemos un ejemplo de un filtro de texto, para impresoras compatibles con PCL de Hewlett-Packard. Este filtro hace que la impresora trate a LF como LF + CR; posteriormente envia el trabajo de impresión; y por último envia un caracter de alimentación de página, para expulsar la última página del trabajo. Este filtro debiese funcionar con casi todas las impresoras Hewlett Packard.

    #!/bin/sh
    #
    # hpif - Filtro de texto simple para lpd e impresoras compatibles con HP-PCL
    # Instalado en /usr/local/libexec/hpif
    #
    # Pasa la entrada estandar a la salida estandar. 
    # Ignora todos los argumentos del filtro.
    # Le indica a la impresora que debe tratar a LF como si fuera CR+LF.
    # Expulsa la ultima pagina cuando ha terminado.
    
    printf "\033&k2G" && cat && printf "\033&l0H" && exit 0
    exit 2
    

    Aqui tenemos un ejemplo de /etc/printcap para un host llamado orchid. Solo cuenta con una impresora conectada al puerto paralelo, una Hewlett Packard LaserJet 3Si, llamada teak. Se esta usando el script anterior como filtro de texto:

    #
    #  Fichero /etc/printcap del host orchid
    #
    teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
            :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
            :if=/usr/local/libexec/hpif:
    
Cada línea se sobreescribe.

La impresora no avanza ninguna línea. Todas las líneas son impresas una sobre otra en un solo renglón.

Este problema es lo “opuesto” al efecto de escalera, descrito anteriormente, y es poco común. En algun lugar, los caracteres de LF, que usa FreeBSD para indicar un salto de línea, la impresora los identifica como CR, de tal forma que regresa el punto de impresión al borde del papel, pero sin saltar al siguiente renglón.

Utilice los botones de la impresora o el panel de control, para forzar a que la impresora interprete de la siguiente manera los caracteres LF y CR:

Impresora recibe Impresora imprime
CR CR
LF CR + LF
Al imprimir se pierden caracteres.

Mientras imprime, algunos caracteres no son impresos en cada línea. El problema puede agravarse conforme se usa la impresora, perdiendo más y más caracteres.

El problema es que la impresora no puede mantener el ritmo al cual la computadora envia los datos por medio de la línea serial (este problema no se debiese presentarse en impresoras conectadas al puerto paralelo). Existen dos formas de solucionar este problema:

  • Si la impresora cuenta con soporte para el control de flujo XON/XOFF, haga que FreeBSD lo utilice, al especificar el bit TANDEM en la característica fs.

  • Si la impresora cuenta con soporte para el control de flujo externo (carrier), especifique el bit MDMBUF en la característica fs. Asegurese de que el cable utilizado para conectar la impresora a la computadora cuenta con soporte para este tipo de control de flujo.

  • Si la impresora no cuenta con soporte para el control de flujo, use una combinación de los bits NLDELAY, TBDELAY, CRDELAY, VTDELAY y BSDELAY en la característica fs, para añadir el retraso apropiado en la cadena de información enviada a la impresora.

Solo imprime basura.

La impresora imprime lo que parece ser basura al azar, pero no el texto deseado.

Esto normalmente es otro síntoma de una configuración incorrecta en los parámetros de comunicación de una impresora serial. Verifique el rango de bps en la característica br y la paridad de bits en fs y fc; asegurese de que la impresora use los mismos datos especificados en el fichero /etc/printcap.

No sucede nada.

Si no sucede nada, probablemente el problema es con FreeBSD y no con su hardware. Incluya un fichero de registros (log), con la característica lf, en la entrada de su impresora en el fichero /etc/printcap. Por ejemplo, aqui esta la entrada de rattan, con la característica lf :

rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:\
        :lf=/var/log/rattan.log

Posteriormente, intente imprimir de nuevo. Verifique el fichero de registros (en nuestro ejemplo, /var/log/rattan.log) para buscar cualquier mensaje de error que aparezca. Basado en ese mensaje trate de resolver el problema.

Si no especifica la característica lf, entonces LPD utilizará /dev/console como la salida por default.

Éste y otros documentos pueden obtenerse en ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para preguntas acerca de FreeBSD, leer la documentación antes de contactar con la lista <questions@FreeBSD.org>.
Para preguntas acerca de esta documentación, e-mail a <doc@FreeBSD.org>.