Crear scripts de interfaz de impresora

Si tiene una impresora que no está soportada añadiendo una entrada a la base de datos terminfo , o si sus necesidades de impresión no están soportadas por el standard u otros scripts de interfaz proporcionados en el archivo /etc/lp/model , puede crear su propio script de interfaz de impresora.

Para crear un script de interfaz personalizado, haga lo siguiente:

  1. Modifique el script de interfaz standard (o uno de los otros scripts en /etc/lp/model). Por ejemplo:
    	
    	cd /etc/lp/model
    	
    	cp standard okidatanew
    	
  2. Asegúrese de que el script de interfaz personalizado establece las modalidades stty adecuadas (características de terminal como la velocidad en baudios o las opciones de salida). Busque la sección que comienza con esta línea:
      ## Initialize the printer port
  3. Modifique el código en el script de interfaz standard . Establece las modalidades predeterminadas y las modalidades ajustadas dadas por el servicio de impresión o el usuario con una línea similar a la siguiente:
    stty mode options 0<&1

    Esta línea de mandatos toma la entrada estándar para el mandato stty del puerto de impresora. Por ejemplo, el siguiente ejemplo de mandato stty establece la velocidad en baudios en 1200bps y establece algunas de las modalidades de opción:

    stty -parenb -parodd 1200 cs8 cread clocal ixon 0<&1
  4. Establezca la característica de puerto de impresora de control de flujo de hardware. El script de interfaz standard no establece el control de flujo de hardware; se establece de acuerdo con el hardware del sistema. El código para el script de interfaz standard sugiere dónde establecer esta y otras características de puerto de impresora. Busque la sección que comienza con esta línea:
      # Here you may want to add other port initialization code.
  5. Puesto que las diferentes impresoras tienen diferentes números de columnas, asegúrese de que la cabecera y el remolque del script de interfaz corresponden a la impresora. El script de interfaz standard imprime un banner que se ajusta a una página de 80 columnas (excepto el título del usuario, que puede ser más largo). Busque la sección en el código del script de interfaz standard que empieza por esta línea:
      ## Print the banner page
  6. Algunas aplicaciones, cuando se ejecutan con determinadas impresoras, pueden requerir que se apague la página. Si debe desactivar la interrupción de página, puede modificar el programa de interfaz estándar (/usr/lib/lp/model/standard) en esta línea:
      if [ -n "${FF}" -a "no" = "${nofilebreak}" ]

    Cambie el no a para desactivar la ruptura de página.

  7. Especifique que el script de interfaz personalizado imprima todos los mensajes de error relacionados con el usuario a la salida estándar o a la salida de error estándar. El servicio de impresión imprime errores de salida estándar en la página y envía mensajes de error estándar al usuario.
  8. Especifique que cuando se haya completado la impresión, el script de interfaz sale con un código que asesora el estado del trabajo de impresión. La tabla de códigos de salida, Imprimir códigos de salida de servicio, describe cómo interpreta el servicio de impresión los códigos de salida.
Una forma de avisar al administrador de un error de impresora es salir con un código de 129. Desafortunadamente, si el script de interfaz sale, el servicio de impresión reimprime el trabajo de impresión desde el principio después de que se haya borrado el error. Para obtener una alerta para el administrador sin volver a imprimir todo el trabajo, especifique que el script de interfaz envíe un mensaje de error al servicio de impresión, pero espere a que se borre el error. Cuando el error se borra, el script de interfaz reanuda la impresión del trabajo. Cuando el trabajo finaliza la impresión, el script de interfaz puede salir con cero como si nunca se hubiera producido el error. Una ventaja añadida es que el script de interfaz puede detectar cuándo se borra automáticamente el error para que el administrador no tenga que volver a habilitar la impresora.

Para especificar que los mensajes de error se envíen al servicio de impresión, utilice el mandato lp.tell . El código de interfaz de impresora de standard llama al mandato lp.tell con la variable de shell LPTELL . El programa lp.tell envía su entrada estándar al servicio de impresión. El servicio de impresión reenvía el mensaje como una alerta al administrador. Si su entrada estándar está vacía, lp.tell no inicia una alerta. Examine el código inmediatamente después de estos comentarios en el script de interfaz standard para ver un ejemplo de cómo utilizar el programa lp.tell (LPTELL):

# Here's where we set up the $LPTELL program to capture
        # fault messages.
        #
        # Here's where we print the file.

Con el código de salida especial 129 o lp.tell, no es necesario que el script de interfaz inhabilite la propia impresora. El script de interfaz puede inhabilitar la impresora directamente, pero al hacerlo altera temporalmente el mecanismo de alerta de errores. Las alertas sólo se envían si el servicio de impresión detecta que la impresora ha fallado y el código de salida especial y el programa lp.tell son sus principales herramientas de detección.

Si el servicio de impresión debe interrumpir la impresión de un archivo en cualquier momento, interrumpe el script de interfaz con una señal 15 (consulte el mandato signal y el mandato kill para obtener más información).

Si el script de interfaz se detiene desde la recepción de cualquier otra señal, el servicio de impresión asume que los trabajos de impresión futuros no se ven afectados y continúa utilizando la impresora. El servicio de impresión notifica a la persona que ha enviado el trabajo de impresión que el trabajo no ha finalizado correctamente.

Las señales SIGHUP, SIGINT, SIGQUIy SIGPIP (números de condición de excepción 1, 2, 3 y 13) se ignoran cuando se invoca la interfaz. El script de interfaz standard cambia esto para atrapar estas señales en el momento adecuado, interpreta estas señales para indicar que la impresora tiene un problema y emite un error.