Common Unix Printing System (Sistema de impresión común de Unix, abreviado CUPS) es un sistema de impresión modular para sistemas operativos de tipo Unix que permite que un computador actúe como servidor de impresión. Un computador que ejecuta CUPS actúa como un servidor que puede aceptar tareas de impresión desde otros computadores clientes, los procesa y los envía a la impresora apropiada.
CUPS está compuesto por una cola de impresión con su planificador, un sistema de filtros que convierte datos para imprimir hacia formatos que la impresora conozca, y un sistema de soporte que envía los datos al dispositivo de impresión. CUPS utiliza el protocolo IPP (Internet Printing Protocol) como base para el manejo de tareas de impresión y de colas de impresión. También provee los comandos tradicionales de línea de comandos de impresión de los sistemas Unix, junto a un soporte limitado de operaciones bajo el protocolo server message block (SMB). Los controladores de dispositivos de impresión que CUPS provee pueden ser configurados utilizando archivos de texto con formato PostScript Printer Description (PPD) de Adobe Systems. Existen varias interfaces de usuario para diferentes plataformas para configurar CUPS; cuenta también con una interfaz como aplicación Web. CUPS es software libre y se distribuye bajo licencia GNU General Public License y GNU Lesser General Public License, versión 2.
Historia
Michael Sweet, dueño de Easy Software Products, comenzó a desarrollar CUPS en 1997. Las primeras versiones públicas beta aparecieron en 1999.Michael Sweet (June 9, 1999), "A Bright New Future for Printing on Linux", Linux Today & followup from Michael Sweet (June 11, 1999), "The Future Brightens for Linux Printing", Linux Today. El diseño original de CUPS usaba el protocolo Line Printer Daemon protocol (LPD), pero debido a limitaciones en el protocolo e incompatibilidades entre marcas, se optó cambiar por el protocolo Internet Printing Protocol (IPP). Cups fue rápidamente adoptado como el sistema de impresión por defecto en varias distribuciones Linux. En marzo de 2002, la empresa Apple Inc. adoptó CUPS como el sistema de impresión en el sistema operativo Mac OS X 10.2.Easy Software Products, CUPS Licensed for Use in Apple Operating Systems!, March 1, 2002. En febrero de 2007, Apple Inc. empleó al desarrollador Michael Sweet y compró el código fuente de CUPS."CUPS",CUPS Purchased by Apple Inc., July 11,2007.
Visión general 150px|right CUPS provee un mecanismo que permite que los trabajos de impresión sean enviados a impresoras de manera estandarizada. La información es enviada planificadorEasy Software Products, CUPS Design Description , sección "Scheduler". Último acceso enero de 2007 quien envía el trabajo a un sistema de filtros que convierte el trabajo a un formato que la impresora comprende.Easy Software Products, CUPS Design Description , sección "Filters". Último acceso enero de 2007 El sistema de filtros luego envía los datos a un backend —un filtro especial que envía datos de impresora a un periférico o una conexión de red.Easy Software Products, CUPS Design Description , ver sección "Backend". Último acceso enero de 2007 El sistema hace un uso extensivo del lenguaje PostScript y de rasterización de los datos, para convertir los datos recibidos a un formato aceptado por la impresora.
CUPS tiene como ventaja principal ser un sistema de impresión estandarizado y modularizado, capaz de procesar diferentes formatos de datos en el servidor de impresión. Antes de CUPS, era difícil encontrar un sistema de impresión estandarizado capaz de adaptarse a la gran gama de variedades de impresoras existentes en el mercado, utilizando cada una su propio lenguaje de impresión y formatos. Como ejemplo: los sistemas de impresión de System V y de Berkeley fueron durante mucho tiempo incompatibles uno con el otro, requiriendo scripts complicados y arreglos varios para lograr convertir el formato de datos desde el programa a un formato imprimible. Normalmente no se lograba detectar el formato de archivo que estaba siendo enviado a la impresora, con lo que no se podía corregir y convertir automáticamente el flujo de datos. Además se ejecutaba la conversión de datos en cada estación de trabajo y no en un servidor central.
CUPS permite más fácilmente, a los fabricantes de impresoras y a los desarrolladores de controladores, crear controladores que funcionen nativamente en el servidor de impresión. El procesamiento ocurre en el servidor, permitiendo sistemas de impresión basadas en red mucho más sencillas que con otros sistemas de impresión Unix. Cuando es utilizado con Samba, pueden ser utilizados las impresoras en computadoras Windows remotas y controladores genéricos PostScript pueden ser utilizados para imprimir a través de la red.
Planificador El planificador de CUPS implementa Internet Printing Protocol (IPP) sobre HTTP/1.1. Una aplicación de ayuda (cups-lpd) convierte peticiones de LPD a IPP. El planificador también provee una interfaz web para administrar los trabajos de impresión, la configuración del servidor y para brindar documentación de CUPS mismo.
Un módulo de autorización controla cuáles mensajes de IPP y HTTP pueden pasar a través del sistema.Easy Software Products. CUPS Software Design, Authorization . último acceso enero de 2007. Una vez que los paquetes IPP/HTTP han sido autorizados son enviados al módulo cliente, quien escucha y atiende conexiones entrantes. El módulo cliente es también responsable de ejecutar programas CGI externos, según sea necesario para soportar impresoras web, clases y el monitoreo y administración de estado de los trabajos de impresión.Easy Software Products. CUPS Software Administrators Manual, Authorisation . Last accessed January 9th, 2007. Una vez que este módulo ha procesado sus solicitudes, las envía al módulo IPP quién ejecuta una validación de Uniform Resource Identifier (URI) previniendo que un cliente esquivar algún control de acceso o de autenticación en el servidor HTTP.Easy Software Products. CUPS Software Design, IPP . Último acceso enero de 2007. El URI es una cadena de caracteres que indica un nombre o dirección que puede ser utilizada para referir un recurso -abstracto o físico- en una red. El planificador permite la utilización de clases de impresoras. Las aplicaciones pueden enviar peticiones a grupos de impresoras en una clase, permitiendo al planificador redirigir el trabajo a la primera impresora libre de esa clase.Easy Software Products. CUPS Software Administrators Manual, Classes . Último acceso enero de 2007. Un módulo de trabajos (jobs en inglés) gestiona los trabajos de impresión, enviándolos al filtro y proceso backend para conversión final e impresión, monitoreando además los mensajes de estado provenientes de éstos procesos.Easy Software Products. CUPS Software Administrators Manual, Jobs . Último acceso enero de 2007. El planificador de CUPS utiliza un módulo configuración, quien analiza archivos de configuración, inicializa las estructuras de datos de CUPS, y es quien inicia y detiene el programa CUPS. Este módulo de configuración detendrá el servicio de CUPS durante el procesamiento del archivo de configuración para luego reiniciar el servicio al finalizar el procesamiento.Easy Software Products. CUPS Software Design, Configuration . Último acceso enero de 2007. Un módulo de bitácora (logging module en inglés) se encarga de registrar los eventos de acceso, error y registros de páginas. El módulo principal (main en inglés) se encarga de servir las peticiones de entrada/salida a tiempo por parte de las conexiones clientes, vigilar si hay señales, manejar errores y finalizaciones de procesos hijos, y de recargar los archivos de configuración del servidor según sea necesario.Easy Software Products. CUPS Software Design, Logging . último acceso enero de 2007.
Otros módulos utilizados por el planificador son: el módulo Mime, encargado de una base de datos de tipos y de conversión Multipurpose Internet Mail Extensions (MIME), utilizado en el proceso de filtrado que convierte los datos recibidos a un formato adecuado para la impresoraEasy Software Products. CUPS Software Design, MIME . Último acceso enero de 2007. el módulo PPD encargado de manejar una lista de archivos PPD PostScript Printer DescriptionEasy Software Products. CUPS Software Design, PPD . Último acceso enero de 2007. el módulo periféricos quien administra una lista de periféricos disponibles en el sistemaEasy Software Products. CUPS Software Design, Devices . Último acceso enero de 2007. y un módulo impresoras encargado de las impresoras y PPDs dentro de CUPS.Easy Software Products. CUPS Software Design, Printers . Último acceso enero de 2007.
Sistema de filtrado 200px|thumb|CUPS permite que diferentes datos sean enviados al servidor CUPS y ser convertidos a un formato que la impresora entienda y sea capaz de imprimir. Una de las principales ventajas de CUPS es que puede procesar una variedad de formatos de datos en el servidor de impresiones. Convierte la información del trabajo de impresión al lenguaje/formato destino de la impresora a través de una serie de filtros.Easy Software Products. CUPS Software Administrators Manual, Filters . Último acceso enero de 2007.Easy Software Products. CUPS Software Design, Filters . Último acceso enero de 2007. Lo hace utilizando tipos de MIME, siendo éste un estándar web para el formato de correo electrónico, pero muy útil para permitir que CUPS determine el tipo del archivo que está siendo procesado.
Base de datos MIME Luego de que un trabajo de impresión ha sido asignado al planificador, es reenviado al sistema de filtrados de CUPS. Éste convierte los datos a un formato adecuado para la impresora. El demonio CUPS carga durante el inicio dos Bases de datos MIME: mime.types define los tipos de archivos conocidos, de los cuales CUPS acepta datos mime.convs define las aplicaciones que deben procesar cada tipo MIME en particular. Easy Software Products. CUPS Software Administrators Manual, File Typing and Filtering . Último acceso enero de 2007.
El archivo mime.types utiliza la siguiente sintaxis:
mimetype { [file-extensions] | [pattern-match] }
Por ejemplo, para detectar un archivo HTML se utilizaría la siguiente entrada:
text/html html htm \ printable(0,1024) + (string(0,"<HTML>") string(0,"<!DOCTYPE"))
La segunda línea une el contenido del archivo al tipo MIME especificado, determinando que el primero kilobyte de texto en el archivo contiene caracteres imprimibles y que éstos incluyen html. Si el pattern de arriba es coincidente, será tildado el archivo como de tipo MIME text/html.Easy Software Products. CUPS Software Administrators Manual, mime.types . Último acceso enero de 2007.
El archivo mime.convs utiliza la siguiente sintaxis:
source destination cost program
El campo source es el tipo MIME determinado al revisar el archivo mime.types, mientras que el campo destination lista el tipo de salida solicitada y determina qué aplicación debe ser utilizada. Esto también es obtenido desde mime.types. El campo cost asiste en la selección del conjunto de filtros al convertir el archivo. El último campo, program, determina los programas de filtros a ser utilizados para ejecutar la conversión de datos.Easy Software Products. CUPS Software Administrators Manual, mime.convs . Último acceso enero de 2007.
Algunos ejemplos:
text/plain application/postscript 50 texttops application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster image/* application/vnd.cups-postscript 50 imagetops image/* application/vnd.cups-raster 50 imagetoraster
Procesos de filtrados