CUPS (anteriormente acrónimo de Common UNIX Printing System ) es un sistema de impresión modular para sistemas operativos de tipo Unix que permite que un ordenador actúe como servidor de impresión . Un ordenador que ejecuta CUPS es un host que puede aceptar trabajos de impresión de ordenadores cliente , procesarlos y enviarlos a la impresora correspondiente.
CUPS consta de un administrador de trabajos de impresión y un programador, un sistema de filtros que convierte los datos de impresión a un formato que la impresora entenderá y un sistema backend que envía estos datos al dispositivo de impresión. CUPS utiliza el Protocolo de impresión de Internet (IPP) como base para gestionar los trabajos de impresión y las colas . También proporciona las interfaces de línea de comandos tradicionales para los sistemas de impresión System V y Berkeley , y proporciona compatibilidad con el protocolo Line Printer Daemon del sistema de impresión Berkeley y compatibilidad limitada con el protocolo Server Message Block (SMB). Los administradores del sistema pueden configurar los controladores de dispositivos que proporciona CUPS editando archivos de texto en formato PostScript Printer Description (PPD) de Adobe. Hay varias interfaces de usuario para diferentes plataformas que pueden configurar CUPS, y tiene una interfaz web incorporada. CUPS es software libre , proporcionado bajo la Licencia Apache .
Michael Sweet , propietario de Easy Software Products , comenzó a desarrollar CUPS en 1997 y las primeras versiones beta públicas aparecieron en 1999. [5] [6] El diseño original de CUPS usaba el protocolo Line Printer Daemon (LPD), pero debido a limitaciones en LPD e incompatibilidades de proveedores, se eligió en su lugar el Protocolo de impresión de Internet (IPP). CUPS se llamó inicialmente "El sistema de impresión común de UNIX". Este nombre se acortó a solo "CUPS" a partir de CUPS 1.4 debido a preocupaciones legales con la marca registrada UNIX. [7] CUPS fue rápidamente adoptado como el sistema de impresión predeterminado para la mayoría de las distribuciones de Linux . En marzo de 2002, Apple Inc. adoptó CUPS como el sistema de impresión para Mac OS X 10.2. [8] En febrero de 2007, Apple Inc. contrató al desarrollador jefe Michael Sweet y compró el código fuente de CUPS. [9] El 20 de diciembre de 2019, Michael Sweet anunció en su blog que había dejado Apple. [10] [11] En 2020, la organización OpenPrinting bifurcó el proyecto, y Michael Sweet continuó trabajando en él. [12] [13] En 2024, se encontró una vulnerabilidad crítica que involucraba la ejecución remota de código en CUPS y que afectaba a todos los sistemas GNU/Linux. [14]
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 programador [15] que envía los trabajos a un sistema de filtrado que convierte el trabajo de impresión a un formato que la impresora entenderá. [16] El sistema de filtrado luego pasa los datos a un backend , un filtro especial que envía los datos de impresión a un dispositivo o conexión de red. [17] El sistema hace un uso extensivo de PostScript y rasterización de datos para convertir los datos a 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 pudiera adaptarse a la amplia variedad de impresoras del mercado que utilizaban 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 scripts complicados y soluciones alternativas para convertir el formato de datos del programa a un formato imprimible. A menudo no podían detectar el formato de archivo que se estaba enviando a la impresora y, por lo tanto, no podían convertir automáticamente 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 impresoras crear controladores que funcionen de forma nativa en el servidor de impresión con mayor facilidad. 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 acceder a impresoras en equipos Windows remotos y se pueden utilizar controladores PostScript genéricos para imprimir en la red.
El programador CUPS implementa el Protocolo de Impresión de Internet (IPP) sobre HTTP/1.1. Una aplicación auxiliar (cups-lpd) convierte las solicitudes del protocolo LPD (Line Printer Daemon ) a IPP. El programador también proporciona una interfaz basada en web para gestionar los trabajos de impresión, la configuración del servidor y la documentación sobre el propio CUPS. [15]
Un módulo de autorización controla qué mensajes IPP y HTTP pueden pasar a través del sistema. [18] Una vez que se autorizan los paquetes IPP/HTTP, 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 admitir impresoras basadas en web, clases y monitoreo y administración del estado de los trabajos. [19] Una vez que este módulo ha procesado sus solicitudes, 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. [20] El URI es una cadena de texto que indica un nombre o dirección que se puede usar para hacer referencia a un recurso abstracto o físico en una red.
El programador permite la creación de clases de impresoras. Las aplicaciones pueden enviar solicitudes a grupos de impresoras de una clase, lo que permite al programador dirigir el trabajo a la primera impresora disponible de esa clase. [21] Un módulo de trabajos gestiona los trabajos de impresión, enviándolos a los procesos de filtrado y backend para su conversión e impresión finales, y supervisando los mensajes de estado de esos procesos. [22]
El programador de CUPS utiliza un módulo de configuración que analiza los archivos de configuración, inicializa las estructuras de datos de CUPS e inicia y detiene el programa de 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 se complete el procesamiento. [23]
Un módulo de registro se encarga del registro de eventos del programador para archivos de registro de acceso, error y página . El módulo principal se encarga de los tiempos de espera y el envío de solicitudes de E/S para conexiones de clientes, vigila las señales , gestiona los errores y salidas de procesos secundarios y vuelve a cargar los archivos de configuración del servidor según sea necesario. [24]
Otros módulos utilizados por el programador incluyen:
CUPS puede procesar una variedad de formatos de datos en el servidor de impresión. Convierte los datos del trabajo de impresión al idioma/formato final de la impresora mediante una serie de filtros . [29] [30] Utiliza tipos MIME para identificar formatos de archivo.
Una vez que el sistema CUPS ha asignado el trabajo de impresión al programador, éste se pasa al sistema de filtrado de CUPS, que convierte los datos a un formato adecuado para la impresora. Durante el inicio, el demonio CUPS carga dos bases de datos MIME: mime.types
una que define los tipos de archivos conocidos para los que CUPS puede aceptar datos y mime.convs
otra que define los programas que procesan cada tipo MIME en particular. [31]
El mime.types
archivo tiene la sintaxis:
mimetype { [file-extensions] | [pattern-match] }
Por ejemplo, para detectar un archivo HTML , sería aplicable la siguiente entrada:
text/html html htm \
printable(0,1024) + (string(0,"<HTML>") string(0,"<!DOCTYPE"))
La segunda línea compara el contenido del archivo con el tipo MIME especificado al determinar que el primer kilobyte de texto del archivo contiene caracteres imprimibles y que esos caracteres incluyen marcado HTML. Si el patrón anterior coincide, entonces el sistema de filtrado marcará el archivo como de tipo MIME text/html. [32]
El mime.convs
archivo tiene la sintaxis:
source destination cost program
El campo de origen designa el tipo MIME que se determina al buscar el mime.types
archivo, mientras que el campo de destino enumera el tipo de salida solicitada y determina qué programa se debe utilizar. Esto también se recupera de mime.types
. El campo de costo ayuda en la selección de conjuntos de filtros al convertir un archivo. El último campo, programa , determina qué programa de filtro se debe utilizar para realizar la conversión de datos. [33]
Algunos ejemplos:
texto/aplicación simple/postscript 50 texttopsaplicación/vnd.cups-postscript aplicación/vnd.cups-raster 50 pstorasterimagen/* aplicación/vnd.cups-postscript 50 imagetopsimagen/* aplicación/vnd.cups-raster 50 imagetoraster
El proceso de filtrado funciona tomando datos de entrada preformateados con seis argumentos:
Luego, determina el tipo de datos que se están ingresando y el filtro que se utilizará mediante el uso de las bases de datos MIME; por ejemplo, los datos de imágenes 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 convierten en datos PostScript, se aplica un filtro adicional llamado prefiltro , que ejecuta los datos PostScript a través de otro convertidor PostScript para que pueda agregar opciones específicas de la impresora, como seleccionar rangos de páginas para imprimir, configurar el modo n -up y otras cosas específicas del dispositivo. [34] Una vez realizado el prefiltrado, los datos se pueden enviar directamente a un backend de CUPS si se usa una impresora PostScript, o se pueden pasar a otro filtro como Foomatic de linuxprinting.org . Alternativamente, se pueden pasar a Ghostscript , que convierte el PostScript en un formato raster CUPS intermedio . [35] El formato raster intermedio se pasa luego a un filtro final que convierte los datos rasterizados a un formato específico de la impresora. Los filtros predeterminados incluidos con CUPS incluyen:
A partir de 2009, [actualizar]Splix, un traductor de ráster a SPL, admite otros lenguajes propietarios como GDI o SPL (Samsung Printer Language). [36]
Sin embargo, existen otras alternativas que se pueden integrar 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 de inyección de tinta (principalmente) y TurboPrint para Linux tiene otra gama de controladores de impresora de calidad para una amplia gama de impresoras.
Los backends son las formas en que CUPS envía datos a las impresoras. Hay varios backends disponibles para CUPS: puertos paralelos , seriales y USB , cups-pdf [37] PDF Virtual Printing, así como backends de red que funcionan a través de los protocolos IPP , JetDirect (AppSocket), Line Printer Daemon ("LPD") y SMB .
Un nuevo mdns
backend en CUPS 1.4 proporciona detección de impresoras basada en Bonjour ( DNS-SD ). [38] En CUPS 1.6, también se admite la detección y el uso compartido de impresoras Bonjour mediante Avahi . [39]
CUPS proporciona los comandos de impresión de System V y Berkeley, por lo que los usuarios pueden continuar con los comandos tradicionales para imprimir a través de CUPS. CUPS utiliza el puerto 631 (TCP y UDP), que es el puerto IPP estándar, y opcionalmente el puerto 515 por inetd , launchd , Solaris Service Management Facility o xinetd que utilizan el programa auxiliar cups-lpd para admitir la impresión LPD. Cuando se instala CUPS, el comando lp
del sistema de impresión de System V y los comandos lpr
del sistema de impresión de Berkeley se instalan como programas compatibles. Esto permite una interfaz estándar con CUPS y permite la máxima compatibilidad con las aplicaciones existentes que dependen de estos sistemas de impresión.
Existen varias herramientas para ayudar a configurar CUPS.
En todas las plataformas, CUPS tiene una interfaz de administración basada en web que se ejecuta en el puerto 631. [40] Ayuda particularmente a las organizaciones que necesitan monitorear trabajos de impresión y agregar colas de impresión e impresoras de forma remota.
CUPS 1.0 proporcionó una interfaz sencilla de monitoreo de clases, trabajos e impresoras para navegadores web.
CUPS 1.1 reemplazó esta interfaz con una interfaz de administración mejorada que permite a los usuarios agregar, modificar, eliminar, configurar y controlar clases, trabajos e impresoras.
CUPS 1.2 y versiones posteriores proporcionan una interfaz web renovada que presenta legibilidad y diseño mejorados, compatibilidad con impresoras descubiertas automáticamente y mejor acceso a registros del sistema y configuraciones avanzadas.
En GNOME, a partir de GNOME 3, la impresión CUPS se gestionaba en la aplicación Configuración, que forma parte de las Aplicaciones principales de GNOME . La GUI puede agregar impresoras CUPS y administrar impresoras CUPS y colas. [41] Antes de GNOME 3, se utilizaban las Configuraciones de impresión de GNOME (anteriormente llamadas Administrador de CUPS) para realizar estas tareas. [42]
El kit de herramientas de widgets GTK+ de GNOME incluyó soporte de impresión integrado basado en CUPS en su versión 2.10, lanzada en 2006.
El marco KDEPrint para KDE contiene varias herramientas GUI que actúan como interfaces CUPS y permiten la administración de clases, colas de impresión y trabajos de impresión; incluye un asistente de impresora para ayudar a agregar nuevas impresoras, entre otras funciones. [43] KDEPrint apareció por primera vez en KDE 2.2.
KDEPrint es compatible con varias plataformas de impresión diferentes, siendo CUPS una de las que mejor soporta. Reemplazó a una versión anterior de soporte de impresión en KDE, qtcups , y es compatible con versiones anteriores de este módulo de KDE. A partir de 2009, kprinter , un programa de cuadro de diálogo , sirve como la herramienta principal para enviar trabajos al dispositivo de impresión; también se puede iniciar desde la línea de comandos . KDEPrint incluye un sistema para prefiltrar cualquier trabajo antes de que se entregue a CUPS, o para manejar trabajos por sí solo, como convertir archivos a PDF . Estos filtros se describen mediante un par de archivos Desktop/ XML .[actualizar]
Los componentes principales de KDEPrint incluyen:
En Mac OS X 10.5, las impresoras se configuran en el panel Impresión y fax de Preferencias del sistema y en aplicaciones proxy de impresora que muestran las colas de impresión y permiten realizar configuraciones adicionales después de configurar las impresoras. Las versiones anteriores de Mac OS X también incluían una Utilidad de configuración de impresoras , que proporcionaba opciones de configuración que no estaban disponibles en versiones anteriores del panel de preferencias Impresión y fax. [ cita requerida ]
El sistema PrinterSetup puede gestionar colas CUPS. Su método consiste en asignar un archivo de texto para describir cada cola de impresión. Estos archivos "PrinterSetupFiles" pueden añadirse a otros archivos de texto llamados "PrinterSetupLists". Esto permite la agrupación lógica de impresoras. En 2009, [actualizar]el proyecto PrinterSetup todavía se encontraba en sus primeras etapas. [44]
A partir de Red Hat Linux 9, Red Hat proporcionó un administrador de impresión integrado basado en CUPS e integrado en GNOME . Esto permitió agregar impresoras a través de una interfaz de usuario similar a la que utiliza Microsoft Windows , donde se podía agregar una nueva impresora utilizando un asistente para agregar una nueva impresora , junto con cambiar las propiedades predeterminadas de la impresora en una ventana que contenía una lista de impresoras instaladas. Los trabajos también se podían iniciar y detener utilizando un administrador de impresión, y la impresora se podía pausar utilizando un menú contextual que aparece cuando se hace clic con el botón derecho en el ícono de la impresora.
Eric Raymond criticó este sistema en su artículo The Luxury of Ignorance (El lujo de la ignorancia) . Raymond había intentado instalar CUPS utilizando el administrador de impresión Fedora Core 1, pero lo encontró poco intuitivo; criticó a los diseñadores de la interfaz por no diseñar teniendo en cuenta el punto de vista del usuario. Consideró que la idea de las colas de impresión no era obvia porque los usuarios crean colas en su computadora local, pero estas colas en realidad se crean en el servidor CUPS.
También le resultó confusa la plétora de opciones de tipo de cola, ya que podía elegir entre CUPS en red (IPP), Unix en red ( LPD ), Windows en red ( SMB ), Novell en red ( NCP ) o JetDirect en red . Encontró que el archivo de ayuda era singularmente inútil y en gran medida irrelevante para las necesidades de un usuario. Raymond usó CUPS como un tema general para demostrar que el diseño de la interfaz de usuario en los escritorios Linux necesita repensarse y un diseño más cuidadoso. Afirmó: [45]
El metaproblema aquí es que el asistente de configuración realiza todos los rituales aprobados (GUI con botones estandarizados que se pueden hacer clic, ayuda que aparece en un navegador, etc.) pero no tiene el atributo central que se supone que deben lograr: la capacidad de descubrimiento. Es decir, la cualidad de que cada punto de la interfaz tenga indicaciones y acciones adjuntas a él de las cuales se pueda aprender qué hacer a continuación. ¿Tiene su proyecto esta cualidad?
Easy Software Products , los creadores originales de CUPS, crearon una interfaz gráfica de usuario, brindaron soporte para muchas impresoras e implementaron un RIP PostScript . ESP Print Pro funcionó en Windows, UNIX y Linux, pero ya no está disponible y el soporte para este producto finalizó el 31 de diciembre de 2007. [46]
{{cite web}}
: Mantenimiento CS1: año ( enlace )