CUPS proporciona un mecanismo que permite enviar trabajos de impresión a las impresoras de forma estándar. Los datos de impresión van a un planificador que envía los trabajos a un sistema de filtrado que convierte el trabajo de impresión en un formato que la impresora entenderá. A continuación, el sistema de filtrado pasa los datos a un backend, un filtro especial que envía los datos de impresión a un dispositivo o a una conexión de red. El sistema hace un amplio uso de PostScript y la rasterización de los datos para convertirlos en un formato adecuado para la impresora de destino.
CUPS ofrece un sistema de impresión estándar y modularizado que puede procesar numerosos formatos de datos en el servidor de impresión. Antes de CUPS, era difícil encontrar un sistema de gestión de impresoras estándar que se adaptara a la amplísima variedad de impresoras del mercado que utilizan sus propios lenguajes y formatos de impresión. Por ejemplo, los sistemas de impresión System V y Berkeley eran en gran medida incompatibles entre sí, y requerían complicados scripts y soluciones para convertir el formato de datos del programa en un formato imprimible. A menudo no podían detectar el formato de archivo que se enviaba a la impresora y, por tanto, no podían convertir automática y correctamente el flujo de datos. Además, la conversión de datos se realizaba en estaciones de trabajo individuales en lugar de en un servidor central.
CUPS permite a los fabricantes de impresoras y a los desarrolladores de controladores de impresión crear más fácilmente controladores que funcionen de forma nativa en el servidor de impresión. El procesamiento se realiza en el servidor, lo que permite una impresión en red más sencilla que con otros sistemas de impresión Unix. Con Samba instalado, los usuarios pueden dirigirse a impresoras en ordenadores Windows remotos, y se pueden utilizar controladores PostScript genéricos para imprimir a través de la red.
SchedulerEdit
El planificador CUPS implementa el Protocolo de Impresión de Internet (IPP) sobre HTTP/1.1. Una aplicación de ayuda (cups-lpd) convierte las solicitudes del protocolo Line Printer Daemon (LPD) en IPP. El planificador también proporciona una interfaz basada en la web para la gestión de los trabajos de impresión, la configuración del servidor, y para la documentación sobre el propio CUPS.
Un módulo de autorización controla qué mensajes IPP y HTTP pueden pasar por el sistema. Una vez que los paquetes IPP/HTTP están autorizados se envían al módulo cliente, que escucha y procesa las conexiones entrantes. El módulo cliente también es responsable de ejecutar programas CGI externos, según sea necesario, para dar soporte a las impresoras basadas en la web, a las clases y a la supervisión y administración del estado de los trabajos. Una vez que este módulo ha procesado sus peticiones, las envía al módulo IPP que realiza la validación del Identificador Uniforme de Recursos (URI) para evitar que un cliente eluda cualquier control de acceso o autenticación en el servidor HTTP. El URI es una cadena de texto que indica un nombre o una dirección que puede utilizarse para referirse a un recurso abstracto o físico en una red.
El planificador permite clases de impresoras. Las aplicaciones pueden enviar solicitudes a grupos de impresoras de una clase, permitiendo que el planificador dirija el trabajo a la primera impresora disponible de esa clase. Un módulo de trabajos gestiona los trabajos de impresión, enviándolos a los procesos de filtro y backend para su conversión e impresión final, y monitorizando los mensajes de estado de esos procesos.
El planificador CUPS utiliza un módulo de configuración, que analiza los archivos de configuración, inicializa las estructuras de datos CUPS, e inicia y detiene el programa CUPS. El módulo de configuración detendrá los servicios de CUPS durante el procesamiento del archivo de configuración y luego reiniciará el servicio cuando el procesamiento se haya completado.
Un módulo de registro maneja el registro de los eventos del programador para los archivos de registro de acceso, error y página. El módulo principal maneja los tiempos de espera y el envío de solicitudes de E/S para las conexiones de los clientes, vigilando las señales, manejando los errores y salidas de los procesos hijos, y recargando los archivos de configuración del servidor según sea necesario.
Otros módulos utilizados por el planificador incluyen:
- el módulo MIME, que maneja una base de datos de tipo y conversión Multipurpose Internet Mail Extensions (MIME) utilizada en el proceso de filtrado que convierte los datos de impresión a un formato adecuado para un dispositivo de impresión;
- un módulo PPD que maneja una lista de archivos Postscript Printer Description (PPD);
- un módulo de dispositivos que maneja una lista de dispositivos que están disponibles en el sistema;
- un módulo de impresoras que maneja impresoras y PPDs dentro de CUPS.
Filtro systemEdit
CUPS puede procesar una variedad de formatos de datos en el servidor de impresión. Convierte los datos del trabajo de impresión en el lenguaje/formato final de la impresora mediante una serie de filtros. Utiliza los tipos MIME para identificar los formatos de archivo.
Bases de datos MIMEEdit
Después de que el sistema CUPS haya asignado el trabajo de impresión al programador, se pasa al sistema de filtros CUPS. Éste convierte los datos a un formato adecuado para la impresora. Durante el arranque, el demonio CUPS carga dos bases de datos MIME: mime.types
que define los tipos de archivo conocidos para los que CUPS puede aceptar datos, y mime.convs
que define los programas que procesan cada tipo MIME en particular.
El archivo mime.types
tiene la sintaxis:
mimetype { | }
Por ejemplo, para detectar un archivo HTML, se aplicaría la siguiente entrada:
text/html html htm \
printable(0,1024) + (string(0,"<HTML>") string(0,"<!DOCTYPE"))
La segunda línea hace coincidir el contenido del archivo con el tipo MIME especificado determinando que el primer kilobyte de texto del archivo contiene caracteres imprimibles y que esos caracteres incluyen marcas HTML. Si el patrón anterior coincide, entonces el sistema de filtrado marcará el archivo como tipo MIME text/html.
El archivo mime.convs
tiene la sintaxis:
source destination cost program
El campo de origen designa el tipo MIME que se determina buscando en el archivo mime.types
, mientras que el campo de destino enumera el tipo de salida solicitada y determina qué programa debe utilizarse. Esto también se obtiene de mime.types
. El campo de coste ayuda en la selección de conjuntos de filtros al convertir un archivo. El último campo, programa, determina qué programa de filtrado se debe utilizar para realizar la conversión de datos.
Algunos ejemplos:
text/plain application/postscript 50 texttopsapplication/vnd.cups-postscript application/vnd.cups-raster 50 pstorasterimage/* application/vnd.cups-postscript 50 imagetopsimage/* application/vnd.cups-raster 50 imagetoraster
Proceso de filtradoEditar
El proceso de filtrado funciona tomando datos de entrada preformateados con seis argumentos:
- el ID del trabajo de impresión
- el nombre del usuario
- el nombre del trabajo
- el número de copias a imprimir
- cualquier opción de impresión
- el nombre del archivo (aunque esto es innecesario si se ha redirigido desde la entrada estándar).
A continuación, determina el tipo de datos que se está introduciendo y el filtro que se utilizará mediante el uso de las bases de datos MIME; por ejemplo, los datos de imagen se detectarán y procesarán a través de un filtro particular, y los datos HTML se detectarán y procesarán a través de otro filtro.
CUPS puede convertir los datos suministrados en datos PostScript o directamente en datos rasterizados. Si se convierte en datos PostScript se aplica un filtro adicional llamado prefiltro, que ejecuta los datos PostScript a través de otro convertidor PostScript para poder añadir opciones específicas de la impresora como la selección de rangos de páginas a imprimir, la configuración del modo n-up y otras cosas específicas del dispositivo. Una vez realizado el prefiltrado, los datos pueden enviarse directamente a un backend CUPS si se utiliza una impresora PostScript, o pueden pasarse a otro filtro como Foomatic de linuxprinting.org. También puede pasarse a Ghostscript, que convierte el PostScript en un formato intermedio CUPS-raster. El formato rasterizado intermedio se pasa a un filtro final que convierte los datos rasterizados a un formato específico de la impresora. Los filtros por defecto incluidos con CUPS incluyen:
- raster a PCL
- raster a ESC/P o ESC/P2 (un lenguaje de impresión de Epson, ahora ampliamente sustituido por su nuevo formato ESC/P-Raster)
- raster a Dymo (otra compañía de impresoras).
- raster a Zebra Programming Language o ZPL (un lenguaje de impresión de Zebra Technologies)
Desde 2009 otros lenguajes propietarios como GDI o SPL (Samsung Printer Language) son soportados por Splix, un traductor de raster a SPL.
Sin embargo, varias otras alternativas pueden integrarse con CUPS. HPLIP (antes conocido como HP-IJS) proporciona controladores Linux+CUPS para impresoras HP, Gutenprint (antes conocido como Gimp-Print) es una gama de controladores de impresora de alta calidad para impresoras (en su mayoría) de inyección de tinta, y TurboPrint para Linux tiene otra gama de controladores de impresora de calidad para una amplia gama de impresoras.
BackendsEdit
Los backends son las formas en que CUPS envía datos a las impresoras. Hay varios backends disponibles para CUPS: puertos paralelos, serie y USB, cups-pdf PDF Virtual Printing, así como backends de red que operan a través de los protocolos IPP, JetDirect (AppSocket), Line Printer Daemon («LPD») y SMB.
Un nuevo mdns
backend en CUPS 1.4 proporciona el descubrimiento de impresoras basado en Bonjour (DNS-SD). En CUPS 1.6, el descubrimiento de impresoras Bonjour y el uso compartido utilizando Avahi también es compatible.