El proceso de impresión en Linux

El proceso de impresión en Linux

1. Introduccion
2. Impresión en Linux
3. Impresión remota
4. El area de Spool
5. Directorios temporales
6. Configuracion de impresoras y printcap
7. El demonio de la impresion
8. Formatos de texto
9. Filtros

INTRODUCCION

El sistema de impresión de Linux (el sistema lp) es una adaptación del código escrito por los Regents de la Universidad de California para la versión Berkeley Software Distribution (BSD) del sistema operativo UNIX.

IMPRESIÓN EN LINUX Impresión en Linux

La forma más simple de imprimir en Linux es enviar el fichero que se va a imprimir directamente al dispositivo de impresión.

Para esto podemos usar el comando cat.

Como usuario root, uno puede hacer lo siguiente:

cat tesis.txt > /dev/lp
otro ejemplo podría ser
ls > /dev/lp1
Lp o lp1 son enlaces simbólicos a las impresoras existentes en la máquina. Cuando se instala una impresora se debe poner el nombre completo de la misma y se asigna un alias o nombre corto para la misma lp1, lp2, lp3, etc.

Para el propósito de la seguridad, sólo el usuario root y los usuarios de su mismo grupo como el demonio de impresión son capaces de escribir directamente a la impresora. Es por esto por lo que se tienen que usar comandos como lpr, lprm, etc para acceder a la impresora.

Este método de impresión tiene el problema de no utilizar la multitarea de linux ya que el proceso duraría el tiempo que la impresora necesite para despachar el trabajo a imprimir, incluyendo otro tipo de problemas , como por ejemplo que la impresora se encuentre apagada, trancada o sin papel.

Lo que saldría por la impresora en el primer caso sería el documento tesis.txt, en el segundo caso se ejecuta el comando ls, listando por impresora los ficheros que se encuentren en el directorio actual.

IMPRESIÓN REMOTA

Cualquier máquina que intente imprimir en un sistema determinado, debe estar registrada en la maquina que se va a imprimir en cualquiera de los siguientes ficheros:
* /etc/hosts.equiv

* /etc/hosts.lpd

Estos, son simples ficheros de texto, con un nombre de maquina por línea. Es preferible el segundo, reservando el primero para proporcionar mayores permisos de acceso.

Puede restringirse el uso tanto por nombre como por grupos.

- Las siguientes son líneas que se deben agregar al fichero /etc/printcap.

:rg: Con esta línea se especifican los grupos autorizados con uno o varios campos.

Ej. :rg=Grupo: Poniendo esta línea en el printcap solo podrán acceder a la impresora aquellos usuarios asignados al grupo que se especifica en la línea, en este caso es Grupo.

:rs: Con este campo, se puede también limitar el acceso a aquellos usuarios con cuenta en su sistema.

EL AREA DE SPOOL

El spool o cola de impresión es un área de almacenamiento, donde se guardan los datos a imprimir en un archivo temporal y se arranca un proceso en segundo plano (que es el demonio de impresión o lpd) que es quen envía la información a la impresora seleccionada.



Generalmente el directorio de spool se encuentra en:
/usr /spool / lpd

o

/var /spool / impresora
La cola de Impresión permite que se puedan imprimir varios ficheros a la vez, cuantos sean necesarios.

Cada impresora tiene su cola de impresión esto significa que se pueden estar mandando varios documentos a las impresoras que se tengan instaladas e incluso pueden haber varios documentos en cada una de las colas.

Los documentos de una cola no se mezclan con los documentos de la otra y existe un procesos o demonios que se encargan de tratar individualmente cada documento, esto lo veremos más detalladamente en la parte de Proceso de Impresión).

Realmente, sólo hay un directorio importante que es el spool.

Sin embargo, un sistema típico debería configurarse en varios directorios, uno para cada impresora, lo que facilita notablemente el mantenimiento. En la mayoría de las instalaciones, /var/spool/lpd o /usr /spool / lpd (algunos materiales hacen referencia a la primera y otros a la segunda) es el directorio de spool principal, y cada impresora tiene un subdirectorio particular, con el mismo nombre que la impresora. Así, si tiene una impresora llamada PJL-16 que admite PostScript y HPGL, debería crear dos directorios, por ejemplo /var/spool/lpd/PJL-16-ps y /var/spool/lpd/PJL-16-hpgl..

DIRECTORIOS TEMPORALES

Los directorios temporales deberían pertenecer a root, grupo lp

El usuario y el grupo deben poder leer y escribir, y el resto solo leer.

Cada directorio temporal debe contener como mínimo estos cuatro ficheros: ".seq" , "errs" , "lock" y "status".

- El fichero .seq contiene la secuencia de trabajos enviados.

- El fichero status contiene el mensaje que devuelve "lpc stat".

- El fichero lock impide al demonio lpd imprimir dos trabajos al mismo tiempo en la misma impresora.

- El fichero errs guarda un registro de los errores de la impresora.

CONFIGURACION DE IMPRESORAS Y PRINTCAP

Configuración de Impresoras El /etc/printcap es simplemente un archivo de texto, que guarda la configuración de las impresoras y que puede ser modificado por el root o superusuario.

Su propietario es el administrador del sistema y debe tener permisos de lectura y escritura para el mismo. Los permisos para todos los demás deben ser de solo lectura, por razones obvias.

Cada entrada de printcap describe una impresora, es decir, cada entrada de printcap provee una denominación lógica para un dispositivo físico, y describe cómo deben ser los datos enviados y manejados por este dipositivo.

Por ejemplo, una entrada de printcap definirá qué puerto vamos a usar, que spool, que proceso deben soportar los datos, qué clase de errores debemos notificar, qué volumen de datos se permiten enviar como máximo, o limitar el acceso de ciertos dispositivos.

Cada entrada de /etc/printcap se estructura con una serie de campos, encabezados por una etiqueta, y limitados por dos puntos, a excepción del primer campo, que describe la impresora.

Campos del printcap:

- lp :

Apunta al puerto/dispositivo de impresión.

Generalmente es /dev/lp.

Cuando configure una impresora remota, se debe poner ":lp=:" en /etc/printcap, indicando que no está asignada a ningún dispositivo local..

- lf :

Guarda un registro de los errores de la impresión.

- if :

Indica el nombre del filtro de impresión a ejecutar.

- rm y rp :

Controlan el destino de la impresión remota.

- sh y sf :

Son separadores.

Se usan cuando hay mucha gente usando la misma impresora.

- mx :

Limita el tamaño del spool, señalando una cantidad en bloques de 1 K ( 1024 bits ).

Si mx=0, el límite viene dado por el espacio disponible en disco.

Este campo es útil si se tienen programas que accidentalmente pueden generar un volumen desproporcionado de datos a imprimir (imágenes, por ejemplo).

Ejemplo de entrada en /etc/printcap:

impresora|HP850C:\

# Se pone la impresora con 2 alias.

:lp=/dev/lp1:\

# lp es el dispositivo de impresión, acá se está seteando como la primera impresora.

:sd=/var/spool/lpd/HP850C:

# Con esta línea especificamos el área de spool para esta impresora.

COMANDOS

lpr :

Nos permite imprimir un fichero o conjunto de ficheros, así como la salida de alguna orden.

Sintaxis de impresión de ficheros:

lpr fichero1

lpr fichero1 fichero2 fichero3

Como la salida de un comando:

comando | lpr

ls -l | lpr

El parámetro -P nos permite especifica a que impresora va dirigido el trabajo de impresión.

Sintaxis:

lpr -P nombre_impresora fichero1

lpq :

Lo utilizamos para poder gestionar el conjunto de tareas de impresión que se encuentran en la cola de impresión.

El parámetro -P especifica que cola de impresión queremos ver.

La información que visualiza el lpq es entre otra el nombre del propietario del trabajo, un número de trabajo que es secuencial, el nombre del fichero o del comando a imprimir, el tamaño del fichero y el orden en el que se va a imprimir.

lprm :

Este comando se utiliza para remover un trabajo de la cola de impresión.

Se puede indicar específicamente el numero de trabajo, o con el parámetro "–P" podemos cancelar todos los trabajos destinados a una impresora seleccionada.

Sintaxis de eliminación de ficheros:

lprm número de trabajo

Si el superusuario deseara eliminar todos los trabajos pertenecientes a un usuario determinado, bastaría con especificar el nombre del usuario en la línea de comandos.

Sintaxis de eliminación de todos los ficheros de un usuario:

lprm -P impresora usuario

También existe con este commando, una forma de eliminar todos los trabajos de la cola de impresión, esto esta reservad solo para el administrador del sistema.

Sintaxis:

lprm -

lpc :

Con lpc podemos comprobar el estado de las impresoras, y controlar algunos aspectos de su uso.

permite arrancar y parar la cola de impresión, permite activar y desactivar impresoras, y reorganizar el orden de los trabajos en cola.

1) lpc down impresora

2) lpc enable impresora

3) lpc topq 23

1.- Inhabilita la impresora "impresora".

2.- Habilita la impresora "impresora".

3.- Mueve el trabajo 23 al principio de la cola de impresión.

EL DEMONIO DE LA IMPRESION

Es un proceso en segundo plano, que analiza constante y metódicamente los directorios de spool, buscando nuevos datos a imprimir.

Cuando hay algún dato para imprimir, este demonio realiza una copia de si mismo que toma los archivos correspondientes y los manda a la impresora seleccionada.

El demonio original se encarga de seguir chequeando la cola en espera de nuevos trabajos para imprimir.

Vale decir que para cada trabajo se crea un demonio que se ocupe únicamente de ese trabajo.

PROCESO DE LA IMPRESION

Vamos a presentar el proceso de impresión mediante un ejemplo.

Suponemos que el usuario manda a imprimir el archivo carta.txt, en la impresora cuyo nombre simbólico es lp

Esto se puede hacer con el comando lpr, de la siguiente manera:

lpr -Plp carta.txt

Las características de la impresora física son especificadas por el administrador del sistema en el archivo /etc/printcap.

El archivo carta.txt es leído por el programa lpr, el cual crea una copia en el directorio de spool de esta impresora.

Esta copia es tomada como un Data File y el nombre de la copia del archivo será algo parecido a dfA123host.

En este momento, la copia del archivo carta.txt (data file), se coloca en el directorio de spool, junto con otro archivo llamado el archivo de control (control file).

El archivo de control especifica los parámetros de impresión para el programa que imprime el archivo y su nombre será algo parecido a cfA123host.

Una vez copiados los archivos de datos y de control al directorio de spool, el proceso lpr manda un mensaje IPC al demonio de impresión (lpd).

Para ver el grafico seleccione la opción "Descargar" del menú superior

El mensaje IPC notifica que hay un trabajo a imprimir y también contiene el nombre de la impresora, para que el demonio sepa en que directorio de spool debe buscar los datos a imprimir.

El demonio, que ha estado por un mensaje IPC, hace una copia de sí mismo.

Esta copia maneja la solicitud de impresión, enviando los datos al dispositivo (impresora), mientras que el lpd original espera por otro mensaje IPC que le indique que hay otro trabajo para imprimir.

El proceso lpr está completo:

- Se copiaron los archivos en el directorio de spool.

- Se creó un archivo de control para el programa de impresión.

- Se notificó al demonio que hay trabajos para imprimir.

- El proceso lpd (hijo) busca los archivos en el spool y los envía a la impresora.

II – FORMATOS DE TEXTO

PostScript :

Unix generalmente opera en "terminales ASCII" y no en el ambiente de Ventanas.

El hecho de usar "terminales ASCII", limita toda la escritura a un sólo tipo de formato texto simple o ASCII), esto significa documentos sin sangrías, encabezados, margenes o cualquier tipo de formato.

Por lo tanto, antes de imprimir un documento de "texto simple" este debe ser formateado para que la impresión contenga el formato adecuado.

Para esto existen programas como troff y TEX , que integran márgenes, diferentes tipos de letra, encabezados, entre otras cosas al documento.

Lo anterior producía un problema para muchos usuarios que no conocían el funcionamiento de troff o TEX ya que no era posible observar el documento formateado antes de su impresión, además en la "terminales ASCII" no era posible observar este tipo de formato, previamente a la impresión

Para solucionar estos problemas surgieron los procesadores de palabras que se conocen hoy en día.

Procesadores de Palabras WYSIWYG

Los procesadores de Palabras que conocemos hoy en día, también denomindos WYSIWYG ("What you see is what you get" que significa lo que ves es lo que obtienes), surgieron para auxiliar a los usuarios que necesitaban ver la presentación del documento antes de enviarlo a impresión.

Pero surge un problema, "el formato", cada procesador de palabras implementa diferentes conversiones.

A pesar de la ventaja de poder observar el documento de una manera formateada con diferentes tipos de letra, el problema de intercambiar documentación en estos procesadores de palabras resulta problemático.

La Impresión

Al mandar imprimir un documento ya sea de "Word","WordPerfect","troff" o cual fuera el formato visualizado en pantalla, aún ocurre otra conversión.

Ya que ningún procesador de palabras utiliza las mismas conversiones, este documento debe de ser convertido en un lenguaje que pueda ser interpretado por la impresora, generalmente es: Postscript o PCL de IBM.

Texinfo :

Es el formato nativo del proyecto GNU. emacs puede ser forzado a producir un fichero de información desde TeXinfo, y TeX producirá un excelente resultado a partir de este mismo fichero. Realmente, el documento está en formato TeX, y necesita que el fichero de macros texinfo.tex esté instalado en su sistema.

Simplemente ejecute 'tex fichero' dos veces (con el fin de generar índices), y obtendrá un fichero dvi que podrá imprimir o visualizar.

Adobe Acrobat. Ficheros PDF :

PDF es un formato de documentación que permite absoluta independencia del sistema operativo.

Un fichero PDF se imprimirá igual de bien en un ordenador con MS-Windows, un Mac o un PC con Linux.

Los documentos PDF se traducen justo a la hora de imprimirlos al formato que cada sistema operativo requiera.

En UNIX, se traducen a PostScript.

III - FILTROS

Los filtros son programas que reciben datos por la entrada estándar, y los devuelven procesados por la salida estándar.

El trabajo del filtro consta de procesar los datos a imprimir.

Un filtro puede incluso no enviar ningún dato al puerto.

Un ejemplo de filtro típico es detectar texto llano y convertirlo en PostScript para imprimirlo en ese tipo de trastos.

Son muy útiles, por ejemplo, para eliminar el efecto escalera, o cambiar la página de códigos sin necesidad de cambiar la configuración de la impresora cada vez que la usemos entre UNIX y DOS.

Cuando se especifica un filtro de entrada, el demonio de impresión no envía los datos pendientes al dispositivo especificado. En su lugar, arranca el filtro y asigna el fichero temporal a la entrada estándar, y el dispositivo de impresión como salida estándar.

Además, podemos definir distintos modos de procesar datos para una misma impresora. Por ejemplo, una misma impresora puede manejar datos en formatos PostScript, HPGL y PCL, dependiendo de la secuencia de órdenes que le enviamos al comienzo de cada trabajo.

GHOSTSCRIPT

PostScript es el formato estándar de los ficheros imprimibles en UNIX.

El problema radica en que no todos tienen impresora que Maneje PostScript.

GhostScript, creado por Peter Deutsch, fundador de Aladdin Enterprises es el interprete por excelencia de documentos en formato PostScript y también PDF.

GhostScript permite presentar datos PS y PDF en la pantalla y además traducirlos de manera que puedan ser impresos en una impresora con capacidad gráfica, mediante el uso del controlador de dicha impresora.

Ghostscript, como la mayoría de las utilidades, procede del proyecto GNU.

Tiene la finalidad de traducir PostScript a formato X Window, el cual es el que usan las impresoras como IBM, Epson, HP, Canon, fax y casi para cualquier dispositivo que exista.

Los dispositivos soportados en cada versión de ghostscript están debidamente relacionados en la documentación del programa; puede obtenerse una relación con la orden 'gs -help'.

Ghostscript se ha convertido en utilidad estándar en la mayoría de las distribuciones de Linux, que la incluyen completa.

Para imprimir ps lo primero que hay que hacer es determinar el nombre del dispositivo por donde quiero imprimir con la orden 'gs -help', que lista los dispositivos instalados.

# gs -dNOPAUSE - sDEVICE=? -sOutputFile=/dev/lp1 fichero.ps

gs puede imprimir en la mayoría de las resoluciones soportadas por el dispositivo: '-r300' '-r150', '-r360x180' son ejemplos de las opciones para su control.

Las impresoras matriciales necesitan que se fije esta opción, al no soportar normalmente la resolución por defecto de 300x300.

OTROS FILTROS

mpage :

Transforma texto llano a PostScript y/o imprime más de una página en cada hoja de papel a partir de PostScript o texto.

a2ps, enscript, nenscript :

A partir de un texto ascii llano, a2ps produce una página debidamente formateada, con cabeceras, pies, números de página

enscript y nenscript hacen lo mismo que a2ps.

TeX, LaTeX :

TeX es un sistema de formateado de textos.
Aunque más bien se usa como un procesador de documentos.

Funciona de modo análogo a un compilador: El código fuente corre a través del programa tex, y obtenemos un fichero .dvi, independiente del dispositivo, que normalmente debe ser procesado de nuevo para obtener un documento impreso.

La calidad del producto obtenido es muy buena.

dvips :

Convierte el fichero dvi generado a partir de un documento TeX en un fichero PostScript, que puede imprimir a través de gs, o directamente en la máquina adecuada.

Sintaxis:

dvips -f1 fich.dvi | lpr

Banderas:

dvips -r1 fich.dvi

Esta línea imprime el documento en orden inverso.

Es una opción muy útil para los propietarios de impresoras HP ya que de este modo las hojas saldrán ya ordenadas.

eps, dvilj, dvi500 :

Transforman los ficheros dvi en los lenguajes de impresoras Epson y HP LaserJet y DeskJet respectivamente.

*roff; (es para crear páginas man) :

Troff es el generador de documentos virtualmente universal, esto es debido a que las páginas de manual se escriben para ellos.

Sintaxis:

man -t | lpr

Groff traduce la página a PostScript, que se procesa sin mayores problemas.

FILTROS MAGICOS

Existen otros tipos de filtros que son capaces de reconocer el tipo de fichero que queremos imprimir y realizar las operaciones necesarias para que obtengamos una salida correcta, a estos programas los denominamos Filtros Mágicos.

Un filtro mágico analiza la entrada que recibe, y de acuerdo con los datos que se le envíen, manda estos datos a otros filtros secundarios, que son los que detallamos en la sección anterior.

Así por ejemplo cuando le llega un trabajo que está en PostScript lo envía al GhostScript y cuando le llega un formato de dibujo como BMP, lo envía al filtro correspondiente.

Los filtros mágicos más conocidos son MagicFilter, apsfilter y los filtros de impresión del Redhat.

MagicFilter :

El programa MagicfilterConfig se crea al instalar el paquete Magicfilter y permite una comoda configuración de la impresora, escribiendo el archivo etc/printcap a través de respuestas a preguntas que nos hace interactivamente.

El creador de este programa es Peter Anvin y el programa puede descargarse de cualquier espejo de Sunsite.

Una vez instalado el programa permite que el sistema reconozca e imprima Gráficos (Jpeg, Tiff, BMP, Gif, etc.), ficheros PS, PDF, DVI, paginas de manual, Ficheros ASCII con acentos y ñ e incluso cualquier fichero comprimido con gzip.

ApsFilter :

Este programa fue desarrollado por Andreas Klemm, y hace básicamente lo mismo que el MagicFilter, pero además añade algunas opciones interesantes como por ejemplo, permite imprimir ficheros comprimidos con gzip, compress y freeze entre otros.

Además el ApsFilter ofrece las siguientes colas de impresión para máquinas locales:

- Lp :

Cola estándar para todos los formatos de fichero.

- Lp-mono :

Se genera para impresoras de color, cuando se quiere imprimir en blanco y negro

- Ascii :

Para imprimir ficheros tipo ascii.

- Raw :

Para imprimir ficheros que ya tienen un formato específico de la impresora y por lo tanto no requieren ningún tipo de compresión.

Filtros de Impresión de RedHat :

Redhat cuenta con su propio sistema de configuración de impresora (Printtool) y su propio sistema de filtros de impresión (/usr/lib/rhs/rhs-printfilters).

Se incluye dentro de estos filtro una herramienta de configuración visual y un administrador gráfico de trabajos de impresión.

La configuración de una impresora mediante Printtool es muy sencilla y no requiere que el usuario tenga muchos conocimientos del sistema.

El filtro de RedHat se parece más al MagicFilter que al ApsFilter porque genera solo una cola de impresión para una impresora única lp.

0 comentarios: