CUPS (anteriormente um acrónimo para Common Unix Printing System) é um sistema de impressão modular para sistemas operacionais do tipo Unix que permite que um computador aja como um servidor de impressão. Um computador executando o CUPS é um hospedeiro que pode aceitar trabalhos de impressão de computadores clientes, processá-los e enviá-los à impressora apropriada.

O CUPS consiste de um spooler e um escalonador de impressão, um sistema de filtragem, que converte os dados de impressão para um formato que a impressora entenderá, e um sistema em segundo-plano que envia estes dados ao dispositivo de impressão. O CUPS utiliza o Protocolo de Impressão da Internet () como base para gerenciar os trabalhos e as filas de impressão. Ele também fornece a interface de linha de comando tradicional para os sistemas de impressão do System V e do Berkeley, e fornece suporte para o protocolo de daemon de impressão em linha do sistema de impressão do Berkeley e suporte limitado para o protocolo do SMB. Administradores de sistema podem configurar o driver de dispositivo que o CUPS fornece por meio da edição de arquivos de texto no formato PostScript Printer Description (PPD) da Adobe. Há um número de interfaces de usuário para diferentes plataformas que podem configurar o CUPS, além dele possuir uma interface nativa baseada na web. O CUPS é um software livre, fornecido sob a licença Apache.

História Michael Sweet, dono da Easy Software Products, iniciou o desenvolvimento do CUPS em 1997. Os primeiros betas apareceram em 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.

O projeto original do CUPS utilizou o protocolo LPD, mas devido a limitações no LPD e incompatibilidades com fornecedores, o Internet Printing Protocol (IPP) foi escolhido. CUPS foi adotado rapidamente como o sistema padrão de impressão em várias distribuições Linux, incluindo a Red Hat Linux. Em março de 2002, a Apple Inc. adotou o CUPS como o sistema de impressão do Mac OS X 10.2.Easy Software Products, CUPS Licensed for Use in Apple Operating Systems! (press release), March 1, 2002. Em fevereiro de 2007, Apple Inc. contratou Michael Sweet como desenvolvedor chefe contratado e comprou o código fonte do CUPS."CUPS",CUPS Purchased by Apple Inc. (press release), July 11, 2007.

Visão geral 150px|right

O CUPS oferece mecanismos que permitem que serviços de impressão sejam enviados a impressoras de um modo padrão. Os dados de impressão vão para um escalonadorEasy Software Products, CUPS Design Description, see section "Scheduler". Last accessed January 9, 2007 que envia o serviço para um sistema de filtragem que converte o serviço para um formato que a impressora vai entender.Easy Software Products, CUPS Design Description, see section "Filters". Last accessed January 9th, 2007 O sistema de filtragem então, passa os dados para um sistema em segundo-plano— um filtro especial que envia os dados para o dispositivo ou conexão de rede.Easy Software Products, CUPS Design Description, see section "Backend". Last accessed January 9, 2007 O sistema faz uso extensivo de PostScript e rastreio de dados para converter os dados em um formato útil a impressora padrão.

O CUPS fornece sistemas de impressão padrão e modularizados que processos inúmeros formatos de dados no servidor de impressão. Antes do CUPS, era difícil encontrar um sistema de gerenciamento de impressão que comportasse uma grande variedade de impressoras no mercado, usando suas próprias linguagens e formatos de impressão. Por exemplo, os sistemas de impressão do System V e Berkeley foram muito incompatíveis entre si, e exigiam manuscritos, complexos para converter os dados do programa para um formato imprimível. Geralmente eles não detectavam que o formato de ficheiro que estava sendo enviado para a impressora e por isso não podiam converter os fluxos de dados automaticamente e corretamente. Além disso, conversão de dados era realizada em estações de trabalho individual, mais do que em um servidor central.

O CUPS permite que empresas e desenvolvedores sejam boicotados por drivers criem drivers que funcionam nativamente no servidor de impressão mais facilmente. Processos ocorrem no servidor, permitindo impressoras via rede mais fáceis do que com outros sistemas de impressão unix. Com o software Samba, usuários podem endereçar impressoras instaladas em computadores Windows e drivers genéricos de PostScript podem ser usados para impressão através da rede.

Scheduler O CUPS scheduler implementa Internet Printing Protocol (IPP) sobre HTTP/1.1. Um aplicativo auxiliar (cups-lpd) converte Line Printer Daemon protocol (LPD) Os pedidos de IPP. O programador também fornece uma interface web-based para gerenciar tarefas de impressão, a configuração do servidor e para a documentação sobre o CUPS em si.

Um módulo de autorização que controla IPP e mensagens HTTP pode passar através do sistema.Easy Software Products. CUPS Software Design, Authorization. Last accessed January 9, 2007. Uma vez que os pacotes IPP/HTTP estão autorizados são enviados para o módulo de cliente, que escuta e processa conexões de entrada. O módulo de cliente também é responsável pela execução de programas externos CGI, conforme necessário para suportar impressoras web-based, classes, e monitoramento de status de trabalho e administração.Easy Software Products. CUPS Software Administrators Manual, Authorisation. Last accessed January 9th, 2007. Uma vez que este módulo tem processado o seu pedido, ele envia-los para o módulo IPP que executa Identificador Uniforme de Recursos (URI) para validação impedir que um cliente evitando qualquer controle de acesso ou autenticação no servidor HTTP.Easy Software Products. CUPS Software Design, IPP. Last accessed January 9, 2007. A URI é um texto string. Que indica um nome ou endereço, que pode ser usado para se referir a um recurso abstrato ou físico em uma rede.

O scheduler permite que classes de impressoras. Aplicações podem enviar pedidos de grupos de impressoras em uma classe, permitindo que o scheduler para direcionar o trabalho para a primeira impressora disponível nesta classe.Easy Software Products. CUPS Software Administrators Manual, Classes. Last accessed January 9, 2007. OS módulos jobs gerencia os trabalhos de impressão, enviando-os aos processos de filtragem e de back-end para a conversão final e impressão, monitorando as mensagens de status dos processos.Easy Software Products. CUPS Software Administrators Manual, Jobs. Last accessed January 9th, 2007.

O CUPS scheduler utiliza uma configuração módulo, que analisa os arquivos de configuração, inicializa o CUPS estrutura de dados, e começa e termina o programa de CUPS. O módulo de configuração irá interromper os serviços CUPS durante o processamento do arquivo de configuração e reinicie o serviço quando o processamento estiver concluído.Easy Software Products. CUPS Software Design, Configuration. Last accessed January 9, 2007.

O módulo logging lida com o registro de eventos scheduler para o acesso, erro, e na página do arquivo de log. O principal módulo lida com timeouts e expedição de pedidos I/O para conexões de clientes, prestando atenção para sinais, Tratamento de processos de erros pequenos e saídas, e recarregar os arquivos de configuração do servidor quando necessário.Easy Software Products. CUPS Software Design, Logging. Last accessed January 9, 2007.

Outros módulos usados ​​pelo scheduler incluem:

O módulo MIME, que lida com um Multipurpose Internet Mail Extensions tipo (MIME) e banco de dados de conversão utilizado no processo de filtragem que converte dados de impressão para um formato adequado para um dispositivo de impressão,Easy Software Products. CUPS Software Design, MIME. Last accessed January 9, 2007. O módulo PPD que lida com uma lista de PostScript Printer Description (PPD);Easy Software Products. CUPS Software Design, PPD. Last accessed January 9, 2007. O módulo de dispositivos que gerencia uma lista de dispositivos que estão disponíveis no sistema;Easy Software Products. CUPS Software Design, Devices. Last accessed January 9, 2007. O módulo de impressoras que lida com impressoras e PPDs no CUPS. Easy Software Products. CUPS Software Design, Printers. Last accessed January 9, 2007.

Sistema de filtragem 200px|thumb|CUPS permite aos usuários enviar dados diferentes para o servidor CUPS e têm que os dados convertidos em um formato que a impressora irá compreender e ser capaz de imprimir

CUPS pode processar uma variedade de formatos de dados no servidor de impressão. Ele converte os dados do trabalho de impressão para o idioma final/formato da impressora através de uma série de filtros.Easy Software Products. CUPS Software Administrators Manual, Filters. Last accessed January 9, 2007. Easy Software Products. CUPS Software Design, Filters. Last accessed January 9th, 2007. Ele usa tipos de MIME ​​para a identificação de formatos de arquivos.

Bancos de dados MIME

Depois que o sistema CUPS atribuiu o trabalho de impressão para o scheduler, é passado para o sistema de filtragem CUPS. Esta converte os dados para um formato adequado para a impressora. Durante a inicialização, o CUPS daemon carrega duas bases de dados MIME: mime.types que define os tipos de arquivo conhecidos que CUPS pode aceitar dados para, e mime.convs que define o programas que processar cada tipo particular MIME.Easy Software Products. CUPS Software Administrators Manual, File Typing and Filtering. Last accessed January 9, 2007.

O mime.types tem a seguinte sintaxe:

mimetype { [file-extensions] | [pattern-match] }

Por exemplo, para detectar um HTML arquivo, a seguinte entrada seria aplicável:

text/html html htm \ printable(0,1024) + (string(0,"<HTML>") string(0,"<!DOCTYPE"))

A segunda linha corresponde ao conteúdo do arquivo para o tipo MIME especificado, determinando o primeiro kilobyte de texto do arquivo contém caracteres imprimíveis e que aqueles caracteres incluem marcação html. Se o padrão acima corresponde, então o sistema de filtro marcaria o arquivo como o tipo de MIME text/html.Easy Software Products. CUPS Software Administrators Manual, mime.types. Last accessed January 9th, 2007.

O mime.convs tem a seguinte sintaxe:

source destination cost program

O source campo designa o tipo MIME que é determinado, observando-se o mime.types, enquanto o destination campo lista o tipo de saída solicitada e determina que programa deve ser usado. Este é também obtido de mime.types. O cost campo auxilia na seleção de conjuntos de filtros ao converter um arquivo. O último campo, o program, determina que filtram programa usar para realizar a conversão de dados.Easy Software Products. CUPS Software Administrators Manual, mime.convs. Last accessed January 9, 2007.

Alguns exemplos:

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

Processo de filtragem

O processo de filtragem funciona através da obtenção de dados de entrada pré-formatadas com seis argumentos:

ID do trabalho do trabalho de impressão O nome de usuário O trabalho de nome O número de cópias a imprimir As opções de impressão Nome do arquivo (embora isto não é necessário se foi redirecionado a partir de padrão de entrada).

Em seguida, determina o tipo de dados que está sendo de entrada e o filtro a ser usado através do uso das bases de dados MIME, por exemplo, dados de imagem será detectado e processado através de um filtro especial de dados e HTML detectados e processados ​​através de outro filtro.