lunes, 31 de octubre de 2016

lpstat - Muestra el estado del sistema de impresión

El programa lpstat es útil para determinar los nombres y la disponibilidad de las impresoras en el sistema. Por ejemplo, si tuviéramos un sistema con una impresora física (llamada "printer") y una impresora virtual (llamada "PDF"), podríamos comprobar su estado así:

[me@linuxbox ~]$ lpstat -a
PDF accepting requests since Mon 08 Dec 2008 03:05:59 PM EST
printer accepting requests since Tue 24 Feb 2009 08:43:22 AM EST

Además, podríamos determinar una descripción más detallada de la configuración del sistema de impresión de esta forma:

[me@linuxbox ~]$ lpstat -s
system default destination: printer
device for PDF: cups-pdf:/
device for printer: ipp://print-server:631/printers/printer

En este ejemplo, vemos que "printer" es la impresora por defecto del sistema y que es una impresora de red que usa el Protocolo de Impresión de Internet - Internet Printing Protocol (ipp://) que está conectada a un sistema llamado "print-server".

Las opciones útiles usadas más habitualmente incluyen:

Tabla 22-5: Opciones comunes de lpstat
Opción Descripción
-a [impresora...] Muestra el estado de la cola de impresión de impresora. Fíjate que es el estado de la capacidad de la cola de la impresora para aceptar trabajos, no el estado de las impresoras físicas. Si no se especifican impresoras, se muestran todas las colas de impresión.
-d Muestra el nombre de la impresora por defecto del sistema.
-p [impresora...] Muestra el estado de la impresora especificada. Si no se especifican impresoras, se muestran todas.
-r Muestra el estado del servidor de impresión.
-s Muestra un resumen de estado.
-t Muestra un informe de estado completo.

viernes, 28 de octubre de 2016

Monitorizando y controlando trabajos de impresión

Como los sistemas de impresión Unix están diseñados para manejar múltiples trabajos de impresión de múltiples usuarios, CUPS está diseñado para hacer lo mismo. A cada impresora se le da una cola de impresión, donde se aparcan los trabajos hasta que pueden ser puestos en cola hacia la impresora. CUPS proporciona varios programas de línea de comandos que se usan para gestionar el estado de la impresora y las colas de impresión. Al igual que los programas lpr y lp, estos programas de gestión siguen el modelo de los sistemas de impresión Berkeley y System V.

miércoles, 26 de octubre de 2016

Otra opción: a2ps

El programa a2ps es interesante. Como podemos suponer por su nombre, es un programa de conversión de formatos, pero también es algo más. Su nombre originalmente significa "ASCII to PostScript - ASCII a PostScript" y se usaba para preparar archivos de texto para imprimir en impresoras PostScript. A lo largo de los años, sin embargo, las capacidades del programa han crecido, y ahora su nombre significa "Cualquier cosa a PostScript". Aunque su nombre nos sugiere un programa de conversión de formatos, es realmente un programa de impresión. Manda su salida por defecto a la impresora predeterminada del sistema en lugar de a la salida estándar. El comportamiento del programa por defecto es como el de una "impresora bonita", lo que significa que mejora la apariencia de la salida. Si usamos el programa para crear un archivo PostScript en nuestro escritorio:

[me@linuxbox ~]$ ls /usr/bin | pr -3 -t | a2ps -o ~/Desktop/ls.ps -L 66
[stdin (plain): 11 pages on 6 sheets]
[Total: 11 pages on 6 sheets] saved into the file `/home/me/Desktop/ls.ps'

Aquí filtramos la secuencia con pr, usando la opción -t (que omite encabezados y pies de página) y luego con a2ps, especificamos un archivo de salida (opción -o) y 66 líneas por página (opción -L) para que coincida con la paginación de salida de pr. Si vemos el archivo resultante con un visor de archivos adecuado, veremos esto:
Figura 6: Viendo la salida de a2ps

Como podemos ver, la plantilla de salida por defecto es en formato de dos páginas por hoja. Esto provoca que el contenido de dos pagínas se impriman en cada hoja de papel. a2ps también aplica bonitos encabezados y pies de página.

a2ps tiene muchas opciones. Aquí tenemos un resumen:

Tabla 22-4: Opciones de a2ps
Opción Descripción
--center-title texto Establece el título del centro de la página a texto.
--columns número Ordena páginas en número columnas. La opción por defecto 2.
--footer texto Establece el pie de página a texto.
--guess Muestra los tipos de archivos dados como argumentos. Como a2ps trata de convertir y formatear todos los tipos de datos, esta opción puede ser útil para predecir qué hará a2ps cuando se le dé un archivo en particular.
--left-footer texto Establece el pie de página izquierdo a texto.
--left-title texto Establece el título izquierdo de la página a texto.
--line-numbers=intervalo Numera las líneas de salida cada intervalo de líneas.
--list=defaults Muestra la configuración por defecto.
--list=tema Muestra las configuraciónes de tema, donde tema es uno de los siguientes: delegaciones (programas externos que se usarán para convertir datos), codificación, características, variables, medios (tamaño de papel y similares), ppd (descripciones de impresora PostScript), impresoras, prólogos (porciones de código que están prefijados a la salida normal), hojas de estilo y opciones de usuario.
--pages rango Imprime páginas incluidas en rango.
--right-footer texto Establece el pie de página derecho a texto.
--right-title texto Establece el título derecho de la página a texto.
--rows número Ordena páginas en número filas. Por defecto es una.
-B Sin encabezados de página.
-b texto Establece el encabezado de página a texto.
-f tamaño Usa fuente de tamaño puntos.
-l número Establece los caracteres por línea a número. Esta y la opción -L (a continuación) pueden usarse para hacer que archivos paginados con otros programas, como pr, encajen correctamente en la página.
-L número Establece las líneas por página a número.
-M nombre Usa el medio nombre. Por ejemplo, "A4"
-n número Imprime número de copias de cada página.
-o archivo Envía la salida a archivo. Si archivo se especifica como "-", usa la salida estándar.
-P impresora Usa impresora. Si no se especifica la impresora, se usa la impresora por defecto del sistema.
-R Orientación vertical.
-r Orientación horizontal.
-T número Establece el tamaño del tabulador a número caracteres.
-u texto Imprime texto (marca de agua) una capa por debajo de la página.

Esto es sólo un resumen. a2ps tiene varias opciones más.

Nota: a2ps está todavía en desarrollo activo. Durante mi prueba, he notado comportamientos diferentes en varias distribuciones. En CentOS 4, la salida siempre va a la salida estándar por defecto. En CentOS 4 y Fedora 10, la salida va por defecto a un medio A4, a pesar de que el programa esté configurado para usar medios de tamaño carta por defecto. Podría superar estos problemas especificando explícitamente la opción deseada. En Ubuntu 8.04, a2ps se comporta como está documentado.

Ten en cuenta también que hay otro formateador de salida útil para convertir texto a PostScript. Se llama enscript, puede realizar muchos de los mismos tipos de trucos de formateo e impresión, pero al contrario que a2ps, sólo acepta entrada de texto.

lunes, 24 de octubre de 2016

lp - Imprime archivos (Estilo System V)

Al igual que lpr, lp acepta tanto archivos como entrada estándar para imprimir. Se diferencia de lpr en que soporta una colección de opciones diferente (y algo más sofisticada). Aquí tenemos las opciones comunes:

Tabla 22-3: Opciones comunes de lp
Opción Descripción
-d impresora Establece el destino (impresora) a impresora. Si no se especifica la opción d, se usa la impresora por defecto del sistema.
-n número Establece el número de copias a número.
-o landscape Establece la salida a orientación horizontal.
-o fitplot Escala el archivo para que se ajuste a la página. Esto es útil cuando imprimimos imágenes, como archivos JPEG.
-o scaling=número Escala el archivo a número. El valor 100 rellena la página. Los valores menores de 100 reducen, mientras que los valores mayores de 100 hacen que el archivo se imprima en varias páginas.
-o cpi=número Establece los caracteres de salida por pulgada a número. La opción por defecto es 10.
-o lpi=número Establece las líneas de salida por pulgada a número. La opción por defecto es 6.
-o page-bottom=puntos
-o page-left=puntos
-o page-right=puntos
-o page-top=puntos
Establece los márgenes de la página. Los valores se expresan en puntos, una unidad de medida tipográfica. Hay 72 puntos en una pulgada.
-P páginas
Especifica la lista de páginas. Las páginas pueden expresarse como una lista separada por comas y/o un rango. Por ejemplo "1,3,5,7-10"

Generaremos nuestro listado de directorio de nuevo, esta vez imprimiendo 12 CPI y 8 LPI con un margen izquierdo de media pulgada. Fijate que hemos ajustado las opciones de pr para que tenga en cuenta el nuevo tamaño de página:

[me@linuxbox ~]$ ls /usr/bin | pr -4 -w 90 -l 88 | lp -o page-left=36 -o cpi=12 -o lpi=8

Esta tubería produce un listado de cuatro columnas usando un tamaño de letra más pequeño que el que viene por defecto. El incremento de número de caracteres por pulgada nos permite ajustar más columnas en la página.

viernes, 21 de octubre de 2016

lpr - Imprime archivos (Estilo Berkeley)

El programa lpr puede usarse para enviar archivos a la impresora. También puede usarse en tuberías, ya que acepta entrada estándar. Por ejemplo, para imprimir resultados de nuestro directorio multicolumna listado antes, podríamos hacer ésto:

[me@linuxbox ~]$ ls /usr/bin | pr -3 | lpr

y el informe será enviado a la impresora por defecto del sistema. Para enviar el archivo a una impresora distinta, puede usarse la opción -P así:

lpr -P nombre_impresora

donde nombre_impresora es el nombre de la impresora que queremos. Para ver una lista de impresoras conocidas por el sistema:

[me@linuxbox ~]$ lpstat -a

Consejo: Muchas distribuciones Linux permiten definir una "impresora" que produce archivos en PDF (Portable Document Format - Formato de Documento Portable), en lugar de imprimir en la impresora física. Esto es muy útil para experimentar con comandos de impresión. Comprueba tu programa de configuración de impresora para ver si soporta esta configuración. En algunas distribuciones, puedes necesitar instalar paquetes adicionales (como cups-pdf) para habilitar esta capacidad.

Aquí tienes algunas de las opciones comunes de lpr:

Tabla 22-2: Opciones comunes de lpr
Opción Descripción
-# número Establece el número de copias a número.
-p Imprime cada página con un encabezado sombreado con la fecha, hora, nombre del trabajo y número de página. Esta opción denominada "impresión bonita" puede usarse cuando imprimimos archivos de texto.
-P impresora Especifica el nombre de la impresora usada para la salida. Si no se especifica una impresora, se usa la impresora por defecto del sistema.
-r Borra archivos tras imprimirlos. Esto sería útil para programas que producen archivos temporales de impresora.

miércoles, 19 de octubre de 2016

Enviando un trabajo de impresión a una impresora

La suite de impresión CUPS soporta dos métodos de impresión usados históricamente en sistemas tipo Unix. Un método, llamado Berkeley o LPD (usado en la versión de Unix Berkeley Software Distribution), usa el programa lpr, mientras que el otro método, llamado SysV (de la versión de Unix System V), usa el programa lp. Ambos programas hacen básicamente lo mismo. Usar uno u otro es cuestión de gustos.

lunes, 17 de octubre de 2016

pr - Convierte archivos de texto para imprimir

Vimos un poco sobre pr en el capítulo anterior. Ahora examinaremos algunas de sus muchas opciones usadas junto a la impresión. En nuestra historia de la impresión, vimos como las impresoras basadas en caracteres usan fuentes monoespaciadas, lo que produce números fijos de caracteres por línea y líneas por página. pr se usa para ajustar texto para encajarlo en un tamaño específico de página, con encabezados y márgenes opcionales. Aquí hay un resumen de sus opciones más comúnmente usadas:

Tabla 22-1: Opciones comunes de pr
Opción Descripción
+first[:last] Genera un rango de páginas que comienza con first y, opcionalmente, termina con last.
-columns Organiza el contenido de la página en el número de columnas especificado por columns.
-a Por defecto, la salida multicolumna se lista verticalmente. Añadiendo la opción -a (across), el contenido se lista horizontalmente.
-d Salida a doble espacio.
-D "format" Formatea la fecha mostrada en los encabezados de página usando format. Mira la man page del comando date para ver una descripción de la cadena format.
-f Usa saltos de página en lugar de retornos de carro para separar páginas.
-h "header" En la parte central del encabezado de página, usa header en lugar del nombre del archivo que está siendo procesado.
-l lenght Establece la longitud de página a length. Por defecto es 66 (Tamaño US letter a 6 líneas por pulgada)
-n Numera las líneas.
-o offset Crea un margen izquierdo de offset caracteres de ancho.
-w width Establece el ancho de página a witdth. Por defecto es 72.

pr se usa a menudo como filtro en tuberías. En este ejemplo, produciremos un listado del directorio /usr/bin y lo formatearemos paginado en 3 columnas usando pr:

[me@linuxbox ~]$ ls /usr/bin | pr -3 -w 65 | head


2009-02-18 14:00                         Page 1

[                apturl                   bsd-write
411toppm         ar                       bsh
a2p              arecord                  btcflash
a2ps             arecordmidi              bug-buddy
a2ps-lpr-wrapper ark                      buildhash

viernes, 14 de octubre de 2016

Preparando archivos para imprimir

Como usuarios de la línea de comandos, estamos principalmente interesados en imprimir texto, aunque también es posible imprimir otros formatos de datos.

miércoles, 12 de octubre de 2016

Imprimiendo con Linux

Los sistemas Linux modernos emplean dos paquetes de software para realizar y gestionar impresiones. El primero, CUPS (Common Unix Printing System - Sistema Común de Impresión Unix) proporciona controladores de impresión y gestión de trabajos de impresión, y el segundo, Ghostscript, un interprete PostScript, actúa como un RIP.

CUPS gestiona impresoras creando y manteniendo colas de impresión. Como vimos en nuestra lección de historia anterior, la impresión Unix fue originalmente diseñada para manejar una impresora central compartida por múltiples usuarios. Como las impresoras son lentas por naturaleza, comparadas con los ordenadores que las alimentan, los sistemas de impresión necesitan un modo de programar múltiples trabajos de impresión y mantener las cosas organizadas. CUPS también tiene la capacidad de reconocer diferentes tipos de datos (dentro de lo razonable) y puede convertir archivos a una forma imprimible.

lunes, 10 de octubre de 2016

Impresoras gráficas

El desarrollo de GUIs condujo a grandes cambios en la tecnología de impresión. Como los ordenadores evolucionaron a pantallas más basadas en imágenes, la impresión evolucionó de técnicas basadas en caracteres a otras basadas en gráficos. Esto fue propiciado por la llegada de impresoras láser de bajo costo que, en lugar de imprimir caracteres fijos, podían imprimir diminutos puntos en cualquier parte del área imprimible de la página. Esto hizo posible la impresión de fuentes proporcionales (como las usadas en las imprentas) e incluso fotografías y diagramas de alta resolución.

Sin embargo, evolucionar de un esquema basado en caracteres a otro basado en gráficos requería un desafío tecnológico formidable. Aquí está el por qué: El número de bytes necesarios para llenar una página usando una impresora basada en caracteres podía calcularse de esta forma (asumiendo 60 líneas por página cada una con 80 caracteres):

60 X 80 = 4800 bytes

En comparación, una impresora láser de 300 puntos por pulgada (DPI) (asumiendo un área de impresión por página de 8 por 10 pulgadas) requiere:

(8 X 300) X (10 X 300) / 8 = 900000 bytes

Muchas de las lentas redes de PC simplemente no podían soportar el casi un megabyte de datos requeridos para imprimir una página completa en una impresora láser, así que estaba claro que se necesitaba una invención ingeniosa.

Esa invención resultó ser el lenguaje de descripción de página (PDL - page descriptión language). Un lenguaje de descripción de página es un lenguaje de programación que describe el contenido de una página. Básicamente dice, "ve a esta posición, dibuja del carácter 'a' en Helvetica de 10 puntos, ve a esta posición..." hasta que todo lo que haya en la página haya sido descrito. El primer gran PDL fue PostScript de Adobe Systems, que todavía está en uso hoy en día. El lenguaje PostScript es un lenguaje de programación completo adaptado a tipografía y otros tipos de gráficos e imágenes. Incluye soporte integrado para 35 fuentes estándar de gran calidad, más la capacidad de aceptar definiciones de fuentes adicionales al ejecutarse. Al principio, el soporte para PostScript estaba incluido en las propias impresoras. Esto solucionaba el problema de la transmisión de datos. Aunque el típico programa PostScript era muy prolijo en comparación a la simple secuencia de bytes de las impresoras basadas en caracteres, era mucho más pequeño que el número de bytes requeridos para representar la página impresa completa.

Una impresora PostScript aceptaba un programa PostScript como entrada. La impresora tenía su propio procesador y memoria (haciendo que a veces la impresora fuese más potente que el ordenador al que estaba conectada) y ejecutaba un programa especial llamado intérprete PostScript, que leía el programa PostScript entrante y procesaba los resultados en la memoria interna de la impresora, formando así el patrón de bits (puntos) que se transferían al papel. El nombre genérico de este proceso de convertir algo a un gran patrón de bits (llamado bitmap o mapa de bits) es procesador de imagen rasterizada (raster image processor) o RIP.

Según pasaron los años, tanto los ordenadores como las redes se hicieron mucho más rápidos. Esto permitió mover el RIP de la impresora al ordenador, que, a cambio, permitió que las impresoras de gran calidad fueran mucho menos costosas.

Hoy día, muchas impresoras todavía aceptan secuencias basadas en caracteres, pero muchas impresoras de bajo coste ya no. Confían en el RIP del ordenador para que les proporcione una secuencia de bits para imprimir como puntos. Aún existen algunas impresoras PostScript.

viernes, 7 de octubre de 2016

Impresoras basadas en caracteres

La tecnología de impresión de los 80 era muy diferente en dos aspectos. Primero, las impresoras de dicho periodo eran casi todas impresoras de impacto. Las impresoras de impacto usan un sistema mecánico que golpea una cinta contra el papel para formar impresiones de caracteres en la página. Dos de las tecnologías populares de aquella época eran la impresión de margarita y la impresión por matriz de puntos.

La segunda, y más importante característica de las primeras impresoras, era que las impresoras usaban una colección limitada de caracteres que era intrínseca al propio dispositivo. Por ejemplo, una impresora de margarita sólo podía imprimir los caracteres que estaban moldeados en los pétalos de la margarita. Esto hacía que las impresoras fueran casi como máquinas de escribir de alta velocidad. Como la mayoría de máquinas de escribir, imprimían usando fuentes monoespaciadas (de anchura fija). Esto significa que cada carácter tiene el mismo ancho. La impresión se realizaba en posiciones fijas de la página, y el área imprimible de una página contenía un número fijo de caracteres. La mayoría de las impresoras imprimían diez caracteres por pulgada (CPI) horizontalmente y seis líneas por pulgada (LPI) verticalmente. Usando este esquema, una hoja de papel tamaño US-letter tenía 85 caracteres de ancho y 66 líneas de alto. Teniendo en cuenta un pequeño margen a cada lado, se consideraba que 80 caracteres era el ancho máximo de una línea impresa. Esto explica por qué las pantallas de terminales (y nuestros emuladores de terminal) normalmente tienen 80 caracteres de ancho. Proporciona una vista WYSIWYG (What you see is what you get - Lo que ves es lo que obtienes) de la salida impresa, usando una fuente monoespaciada.

Los datos son enviados a una impresora tipo máquina de escribir en una secuencia simple de bytes que contiene los caracteres a imprimir. Por ejemplo, para imprimir una "a", se envía el código ASCII 97 del carácter. Además, los códigos de control ASCII con números bajos proporcionaban un medio de mover el carro y el papel de la impresora, usando códigos para retorno de carro, salto de línea, salto de página, etc. Usando los códigos de control, es posible conseguir efectos de texto limitados, como negrita, haciendo a la impresora imprimir un carácter, retroceso, e imprimir el carácter de nuevo para conseguir una impresión más oscura en la página. En realidad podemos comprobar esto si usamos nroff para renderizar una man page y ver la salida usando cat -A:

[me@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | nroff -man | cat -A | head
LS(1)            User Commands               LS(1)
$
$
$
N^HNA^HAM^HME^HE$
       ls - list directory contents$
$
S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS$
       l^Hls^Hs [_^HO_^HP_^HT_^HI_^HO_^HN]... [_^HF_^HI_^HL_^HE]...$

Los caracteres ^H (Control-h) son los retrocesos usados para crear el efecto negrita. De igual forma, podemos ver una secuencia retroceso/guión bajo para producir un subrayado.

miércoles, 5 de octubre de 2016

Imprimiendo en los tiempos oscuros

Al igual que los propios ordenadores, las impresoras en la era pre-PC tendían a ser grandes, caras y centralizadas. El típico usuario de ordenador de 1980 trabajaba en un terminal conectado a un ordenador que estaba a cierta distancia. La impresora se encontraba cerca del ordenador y estaba bajo la atenta mirada de los operadores del ordenador.

Cuando las impresoras eran caras y centralizadas, como lo eran a menudo en los primeros tiempos de Unix, era una práctica común para muchos usuarios compartir una impresora. Para identificar los trabajos de impresión pertenecientes a un usuario en particular, se imprimía a menudo una página cabecera (banner page) mostrando el nombre del usuario al principio de cada trabajo de impresión. El equipo de soporte del ordenador cargaría entonces un carrito con los trabajos de impresión del día y los enviaría a cada usuario.

lunes, 3 de octubre de 2016

Una breve historia de la impresión

Para entender completamente las características de impresión que encontramos en los sistemas operativos tipo Unix, tenemos que aprender antes algo de historia. La impresión en los sistemas tipo Unix se remonta al comienzo del sistema operativo en sí. En aquellos días, las impresoras, y su uso, eran muy diferentes de las actuales.