# CUPS

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 (em inglês: IPP) 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.
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. Em fevereiro de 2007, Apple Inc. contratou Michael Sweet como desenvolvedor chefe contratado e comprou o código fonte do CUPS.

## Visão geral

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 escalonador que envia o serviço para um sistema de filtragem que converte o serviço para um formato que a impressora vai entender. 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. 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. 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. 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. 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. 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.
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.
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.
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,
* O módulo PPD que lida com uma lista de PostScript Printer Description (PPD);
* O módulo de dispositivos que gerencia uma lista de dispositivos que estão disponíveis no sistema;
* O módulo de impressoras que lida com impressoras e PPDs no CUPS.

### Sistema de filtragem

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. 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.
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.
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.
Alguns exemplos:
text/plain application/postscript 50 texttops

#### 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.
CUPS pode converter dados fornecidos tanto dados em PostScript ou diretamente em dados raster. Se ela é convertida em dados PostScript um filtro adicional é aplicado chamado de pré-filtro, que corre os dados PostScript através de outro conversor PostScript para que possa adicionar opções específicas da impressora como a seleção de intervalos de páginas para impressão, modo de configuração n-up e dispositivos específicos de outras coisas. Após a pré-filtragem é feita, os dados podem ser enviados diretamente para CUPS backend. Se estiver usando uma impressora PostScript, ou ele pode ser passado para outro filtro como Foomatic por linuxprinting.org. Alternativamente, pode ser passado para Ghostscript, que converte o PostScript em um intermediário CUPS-raster formato. O formato raster intermediário é então passada em um filtro final que converte os dados raster para uma impressora de formato específico. Os filtros padrão incluído com CUPS incluem:
* Raster para PCL
* Raster para ESC/P ou ESC/P2 (Linguagem de impressora Epson, agora em grande parte substituído por sua nova ESC/P Raster-format)
* Raster para Dymo (outra empresa de impressora).
* Raster para Zebra Programming Language ou ZPL (a Zebra Technologies linguagem de impressora)
Em 2009, outras linguagens proprietárias como o GDI ou SPL (Samsung Printer Language) são suportados pelo Splix, um raster para tradutor SPL
No entanto, várias outras alternativas pode se integrar com CUPS. Easy Software Products (ESP), os criadores originais do CUPS, lançaram seus próprios filtros CUPS; Gutenprint (anteriormente conhecido como Gimp-Print) é um conjunto de drivers de alta qualidade de impressão para (principalmente) impressoras jato de tinta, e TurboPrint para Linux tem outra gama de controladores de impressora de qualidade para uma ampla gama de impressoras.

### Backends

O backends são as maneiras pelas quais CUPS envia dados a impressoras. Existem várias infra-estruturas disponíveis para CUPS: paralela, serial e portas USB, bem como backends de rede que operam através da IPP , JetDirect (AppSocket), Line Printer Daemon ("LPD") e protocolo SMB.

## Compatibilidade

CUPS fornece tanto o System V e comandos de impressão Berkeley, assim os usuários podem continuar com comandos tradicionais para impressão via CUPS. CUPS usa a porta 631 (TCP e UDP), que é a porta padrão IPP e, opcionalmente, na porta 515 por inetd, launchd, o Solaris Service Management Facility, ou xinetd que usam o programa auxiliar cups-lpd para suportar a impressão LPD. Quando é instalado o CUPS lp System V printing system comando e o lpr Berkeley printing system comandos são instalados como programas compatíveis. Isto permite uma interface padrão para CUPS e permite o máximo de compatibilidade com aplicativos existentes que dependem destes sistemas de impressão.

## Interface Ferramentas de usuário

Existem várias ferramentas para ajudar a configurar o CUPS.

### CUPS web-based interface de administração

Em todas as plataformas, CUPS tem uma interface de administração baseada na web que roda em porta 631 É particularmente ajuda as organizações que precisam monitorar os trabalhos de impressão e adicionar filas de impressão e impressoras remotamente.
CUPS 1,0 forneceu uma classe simples, trabalho, e monitoramento de impressora e interface para navegadores web.
CUPS 1.1 substituiu esta interface com uma interface de administração avançada que permite aos usuários adicionar, modificar, excluir, configurar e classes de controle, postos de trabalho e impressoras.
CUPS 1.2 e depois fornecer uma interface web renovada que apresenta melhor legibilidade e design, suporte automático de busca para impressoras, e um melhor acesso aos logs de sistema e configurações avançadas.

### GNOME

O GNOME Gestor CUPS pode adicionar novas impressoras CUPS e gerenciar impressoras e filas de CUPS. Existem outros aplicativos de terceiros para gerenciar impressão, por exemplo GtkLP e sua GtkLPQ ferramenta de associado, ou GtkPSproc.
GNOME widget toolkit GTK + incluem suporte de impressão integrado baseado em CUPS em sua versão 2.10, lançado em 2006.

### KDE

O quadro KDEPrint para KDE contém vários GUI-ferramentas que atuam como CUPS front-end s e permite a administração de classes, as filas de impressão e trabalhos de impressão, que inclui um assistente de impressora para ajudar com a adição de novas impressoras, entre outras características KDEPrint apareceu pela primeira vez no KDE 2.2.
KDEPrint suporta várias plataformas de impressão diferente, com CUPS um dos best-suported. Ele substituiu uma versão anterior do suporte de impressão no KDE,qtcups é compatível com este módulo do KDE. Desde 2009 kprinter, a caixa de diálogo programa, serve como a principal ferramenta para envio de trabalhos para o dispositivo de impressão, mas também pode ser iniciado a partir do comando de linha. KDEPrint inclui um sistema de pré-filtro de todos os trabalhos antes de serem entregues ao CUPS, ou para lidar com todos os postos de trabalho em si, como a conversão de arquivos para PDF. Estes filtros são descritos por um par de Desktop/XML arquivos.
Componentes principais KDEPrint incluem:
* Uma caixa de diálogo de impressão, que permite que as propriedades da impressora a ser modificado
* Administrador de impressão, que permite o gerenciamento de impressoras, tais como adicionar e remover impressoras, através de um Assistente para adicionar impressora
* Visualizador de trabalho/administrador, que gerencia os trabalhos da impressora, como segurar/liberar, cancelar e mudar para outra impressora
* Um módulo de configuração CUPS (integrado ao KDE)

### Mac OS X

No Mac OS X 10.5, as impressoras são configuradas no painel Impressão & Fax no System Preferences, em aplicações de impressão de proxy que exibem as filas de impressão e permitem a configuração adicional após as impressoras são configuradas. Versões anteriores do Mac OS X também incluiu um Printer Setup Utility, que forneceu as opções de configuração em falta de versões anteriores do painel de preferências Impressão e Fax.

### Mandriva Linux

Mandriva Linux 10.1 até 2008.1 versão apresenta uma interface gráfica para a impressão (Printerdrake). É basicamente uma interface para o CUPS e permite aos usuários adicionar, remover e atualizar impressoras, bem como o controle de trabalhos de impressão. Isto é feito a partir de um programa de configuração centralizada que permite a configuração do servidor CUPS em um conjunto centralizado de telas. Partir de 2009, ele usa o Red Hat Enterprise Linux/Fedora printer frontend, chamado system-config-printer.

### PrinterSetup

O sistema pode gerenciar filas PrinterSetup CUPS. Que leva a abordagem de atribuir um arquivo de texto para descrever cada fila de impressão. Estes "PrinterSetupFiles podem então ser adicionados a outros arquivos de texto chamado 'PrinterSetupLists'. Isto permite agrupamento lógico de impressoras. Partir de 2009, o projeto PrinterSetup permanece em sua infância.

### Red Hat Linux/Fedora

A partir do Red Hat Linux 9, a Red Hat usa um gerenciador de impressão integrado baseado em CUPS e integrados GNOME. Isto permitiu a adição de impressoras através de uma interface semelhante à Microsoft Windows, onde uma nova impressora pode ser adicionado usando um assistente adicionar nova impressora, junto com a mudança de padrão da impressora de propriedades em uma janela contendo um lista de impressoras instaladas. O trabalho também pode ser iniciado e interrompido usando um gerenciador de impressão e a impressora pode ser pausado usando um menu de contexto que aparece quando o ícone da impressora é right-clicked.
Eric Raymond criticou este sistema em sua peça O luxo da ignorância. Raymond tinha tentado instalar o CUPS usando o Fedora Core gestor de impressão mas achei não-intuitivo, ele criticou os designers de interface por não projetar com os usuários do ponto de vista em mente. Ele achou a ideia de filas de impressão não era óbvio, pois os usuários criam filas em seu computador local, mas essas filas são realmente criadas no servidor CUPS.
Ele também descobriu a infinidade de opções de fila tipo confusa, pois ele poderia escolher entre a rede CUPS (IPP), em rede Unix (LPD), em rede Windows (SMB) , em rede Novell (NCP) ou em rede JetDirect. Ele encontrou o arquivo de ajuda singularmente inútil e irrelevante para as necessidades do usuário. Raymond utilizado CUPS como um tema geral para demonstrar que o design da interface de usuário em desktops Linux precisa de repensar e ter design mais cuidado. Ele declarou:

### ESP Print Pro

Easy Software Products, os criadores originais do CUPS, criou uma GUI, desde o suporte para muitas impressoras PostScript e implementou um RIP. ESP Print Pro funcionou em Windows, UNIX e Linux, mas não está mais disponível e suporte para este produto terminou em 31 de dezembro de 2007. Imprimir

## Nome

CUPS começou a vida como "The Common UNIX Printing System". O nome foi abreviado para apenas "CUPS" começando com CUPS 1.4 devido a preocupações legais com a marca UNIX.