10 oct 2010

Impresión

Introducción a la impresión

Las distintas implementaciones de UNIX soportan la impresión de forma distinta.

Históricamente, para imprimir un documento teníamos que saber si estábamos en un sistema tipo BSD, SystemV, o AIX.

El mundo era de las impresoras de línea de puerto serie y todos los trabajos de impresión eran trabajos que se enviaban a una cola, del que un daemon los sacaba.

Con el tiempo, algunos sistemas han pasado a soportar ambas familias de comandos de impresión. En especial AIX ha incorporado un sistema completo de impresión System V.

En Linux ha surgido un sistema moderno de impresión llamado CUPS que acepta la realidad de que ahora mismo la mayoría de impresoras son dispositivos complejos con su propia dirección de red, por las que comunicarse por un protocolo Cliente/Servidor.

Comandos BSD

El sistema BSD se basa en que hay un daemon llamado lpd, al que los usuarios llaman con el comando lpr.
  • Imprimir: Para imprimir un fichero en un sistema tipo BSD hay que usar el comando lpr.
lpr [argumentos] fichero
lpr [argumentos]

Si imprimimos a la impresora por defecto $lpr fichero.txt
Si imprimimos a otra impresora $lpr -Pprinter fichero.txt
Si no queremos que se imprima el banner $lpr -Pprinter -h fichero.txt

  • Para ver los trabajos de impresión: lpq -Pprinter
  • Para cancelar un trabajo: lprm -Pprinter 11042
  • Para ver las opciones e impresoras configuradas está el fichero /etc/printcap.
    Las impresoras se pueden definir como de texto o de postscript. Entonces si vamos a imprimir texto hay que elegir una impresora de texto
Yo tuve que configurar /etc/printcap en el difunto Digital UNIX y soportar una impresora local de línea para una máquina AlphaServer. Una impresora tenía una pinta como esta:

printer|PLJ-H1998:\       :lp=/dev/null:\       :sd=/var/spool/lpd/PLJ-H1998:\       :lf=/var/spool/lpd/PLJ-H1998/errores:\       :if=/var/spool/lpd/PLJ-H1998/filtro_entrada:\       :mx#0:\       :sh:\       :sf:

¿Qué significan los campos en /etc/printcap?

sd ------------ Spool directory sd=/var/spool/lpd/howler-lw
lf ------------ Error log file lf=/var/log/lpr
lp ------------ Device name lp=/dev/lp0
af ------------ Accounting file af=/usr/adm/lpr.acct
rm ------------ Remote machine name rm=beast.xor.com
rp ------------ Remote printer name rp=howler-lw
of ------------ Output filter of=/usr/libexec/lpr/lpf
if ------------ Input filter if=/usr/sbin/stylascii
mx ------------ Maximum file size mx#0
sh ------------ Suppress headers s

Comandos System V
  • Imprimir: Para imprimir en un sistema tipo System V (Solaris) hay que utilizar lp
lp [argumentos] fichero
lp [argumentos]

Si imprimimos a la impresora por defecto $lp fichero.txt
Si imprimimos a otra impresora $lp -dprinter fichero.txt.
Si no especificamos ninguna impresora con -d se mira la variable $LPDEST
Si no queremos que se imprima el banner $lp -dprinter -h fichero.txt

  • Ver las colas de impresión Para ver las cola de impresión, lpstat -a.
  • Cancelar un trabajo: cancel
  • Configurar la impresora. El comando a usar es lpadmin. Este comando modifica los ficheros en /var/spool/lp (que no hay que tocar directamente). En Solaris hay un fichero único tipo printcap, que está en /etc/printers.conf.
Un resumen de comandos System V
lp Encola los trabajos

accept Acepta los trabajos
cancel Cancela los trabajos
disable Deshabilita la cola
enable Habilita la cola

lpadmin Configura el sistema de impresión
lpshut Para el servicio de impresión
lpstat Informa sobre el estado de las colas

lpmove Cambia trabajos de cola
lpsched Planifica impresiones

Solaris
lpget Reads configuration settings
lpset Modifies configuration settings
lpfilter Controls print filters

¿De qué forma se define una impresora en Solaris?
En teoría habría que encontrar las opciones "correctas" de lpadmin, pero en la práctica, el administrador tiene más fácil recurrir a admintool o herramientas similares de ayuda.

El caso de AIX
AIX implementó un sistema de colas propietario que además de trabajos de impresión podía encolar cualquier cosa. El comando para interactuar con este sistema se llamaba enq. Para minimizar la confusión a usuarios provenientes de sistemas tipo BSD o SystemV, incluye los comandos lp y lpr, pero solamente como frontend de enq.

enq manda trabajos a una "cola", definida en el fichero /etc/qconfig, del siguiente estilo:

lp0:
device = pdev0
pdev0:
file = /dev/lp0
header = never
backend = /usr/lpd/piobe

En este fichero se ve que hay una cola lp0 asociada al dispositivo de impresora pdev0, que tiene tres parámetros de configuración (device file, header, backend - programa que envía realmente los trabajos a imprimir).

El daemon de impresión es qdaemon.
Para saber cómo van las colas: qchk, lpstat, or enq -A
La sintaxis del comando enq es complicada, los que venimos de imprimir en SystemV o BSD preferimos acordarnos de esto:
   lpr -P printer /etc/motd 
que de esto:
   enq -P printer -c -Bgn /etc/motd
Para crear la cola de impresión, los dispositivos, smit nos lo hace de una forma muy intuitiva.

CUPS

CUPS es el acrónimo de Common Unified Printing System y es lo que se viene usando en Linux como "servidor de impresión". A diferencia de los sistemas clásicos de impresión, CUPS se "encarga de todo".

CUPS reemplaza completamente los sistemas clásicos y consta de:
  • demonio de impresión (cupsd): Vigila los directorios spool buscando trabajos que imprimir.
  • cola de impresión (/var/spool/cups/): Directorio que almacena los trabajos a imprimir.
  • drivers PPD para impresoras postscript o filtro que traduzca el documento generado por la aplicación a un lenguaje entendible por la impresora (el fichero necesario para caracterizar a una impresora se llama PPD - Postscript Printer Description - y si no se puede encontrar en linuxprinting.org, se busca foomatic (paquete foomatic-db-engine), que proporciona el archivo PPD y los filtros necesarios para traducir los documentos (trabaja sobre GhostScript).
  • comandos de usuario de interfaz con el sistema: clonados de los clásicos (tanto SysV como BSD) por compatibilidad: lpr (o lp) para enviar a imprimir, lprm para borrar, etc.
  • comandos de administración: los clásicos lpstat, lpinfo...
  • una interfaz web de administración
En Linux, para instalar una impresora:
- Conectamos la impresora
- Conseguimos el archivo PPD
- Instalamos foomatic
- Reiniciamos el cupsd (/etc/init.d/cupsys restart)
- El interfaz web de administración está en el puerto 631


Bibliografía


No hay comentarios:

Publicar un comentario