INTRODUÇÃO AO SISTEMA DE IMPRESSÃO CUPS
CUPS – COMMON UNIX PRINTING SYSTEM
Básico sobre Impressão Impressão é um dos capítulos mais complicados na área de TI. Desde o início, todo desenvolvedor de um programa que era capaz de produzir dados que pudessem ser impressos também tinha que produzir seu próprio driver de impressão. Isto era bem complicado porque diferentes programas tinham diferentes formatos de arquivos e mesmos programas para o mesmo tipo de uso não entendiam o formato um dos outros. Não havia então uma interface comum para todas impressoras e os programadores suportavam somente poucos modelos selecionados. Quando um novo modelo aparecia no mercado o autor do programa tinha que escrever um novo driver de impressão para que o programa dele pudesse suportar esta nova impressora, e mesmo para os fabricantes era impossível saber se o dispositivos deles eram suportados por qualquer programa conhecido no mundo. Ter que suportar 10 aplicações e um desena de impressoras, significava que o administrador de sistemas tinha que lidar com 120 drivers de impressão. O desenvolvimento de uma interface unificada entre os programas e impressoras tornava-se urgente. O surgimento das Linguagens de Descrição de Páginas (Page Description Languages), descrevia a representação gráfica de tinta e toner nas folhas de papel. Um outro desenvolvimento foi o PostScript pela Adobe. Isto significava que o programador de uma aplicação poderia concentrar em fazer o programa dele produzir uma saída dos dados na linguagem PostScript, enquanto os desenvolvedores de dispositivos poderiam focar-se em fazer dispositivos literalmente PostScript. O objetivo principal do PostScript é descrever o layout de um objeto gráfico em uma página. Um arquivo PostScript é a representação de um ou mais páginas a serem impressas de uma forma relativamente abstrata. Idealmente, isto significa descrever as páginas de uma forma independente de dispositivos, o PostScript não é diretamente visível, somente vive no hard disk e na memória RAM como a representação codificada de futuras impressões. Com o tempo surgiu o desenvolvimento de outros métodos de descrição de uma página a ser impressa e os competidores mais importantes foram o PCL (Print Control Language – HP), ESC/P (da Epson) e o GDI (Graphical Device Interface – Microsoft). O surgimento destas linguagens de descrição de páginas facilitou a vida principalmente dos desenvolvedores, mas ainda há linguagens competindo entre si, incompatíveis e diferentes. Toda a base teórica que todos devem ter conhecimento sobre Impressão em Geral está disponibilizada no link: http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/III.PostScript-and-PPDs/III.PostScript-and-PPDs.html
ou no arquivo – III.PostScript-and-PPDs.pdf – no diretório PDFs
Introdução ao Sistema de Impressão CUPS
2
CUPS – COMMON UNIX PRINTING SYSTEM
1 - Impressão em sistemas Linux/Unix As aplicações nos sistemas Unix/Linux geralmente produzem arquivos PostScript (Adobe) para impressão. PostScript é uma linguagem de descrição de páginas independente de plataforma e é a linguagem de escolha das impressoras laser de médio e alto nível e até mesmo de algumas impressoras jato de tinta de alto nível. Entretanto, PostScript geralmente não é suportado por impressoras "de nível consumidor" e certamente não temos uma impressora PostScript em nossa casa ou no nosso trabalho. Os processadores integrados de impressoras PostScript processam os arquivos PS para dados “raster” (http://pt.wikipedia.org/wiki/Raster) e este procedimento é baseado em cálculos altamente intensivos - Raster Image Process ou RIP (http://en.wikipedia.org/wiki/Raster_image_processor). As impressoras que não trabalham com PostScript necessitam de um software para fazer todo o processamento de PostScript. A Silicon Graphics introduziu conceitos como o de filtrar arquivos de impressão para convertê-los em um formato legível para a impressora. Dentro de um produto chamada "Impressario" incluiu um interpretador PostScript para converter arquivos PostScript no formato "raster" para impressoras não PostScript. Houve também o GhostScript (um interpretador PostScript popular livre) que acabou não sendo utilizado como opção, então era necessário escrever os próprios drivers de impressão.
CUPS No ambiente Linux/Unix sempre houveram vários sistemas de impressão CUPS é um deles.
e o
O projeto original do CUPS - Common Unix Printing System - foi baseado em torno do protocolo de rede LPD, com suporte adicional para opções e administração remota. O projeto original terminou baseado no protocolo IPP - Internet Printing Protocol - que era um protocolo que veio atualizar o LDP mas acabou tornando-se um protocolo muito mais funcional e extensível para suportar nova tecnologias. Hoje o CUPS é incluído na maioria das distribuições Linux e está disponível livremente para todos sistemas operacionais UNIX e Linux. Drivers de impressão para o CUPS estão disponíveis comercialmente pela ESP Print Pro assim como drivers são oferecidos por vários projetos livres. Fonte: http://www.cups.org/book/intro.php
Introdução ao Sistema de Impressão CUPS
3
CUPS – COMMON UNIX PRINTING SYSTEM
2 - Design do CUPS Como muitos sistemas de impressão, o CUPS é estruturado em torno de um processo de agendamento de impressão central que despacha os jobs de impressão, comandos administrativos, fornece informações do estado da impressora para programas locais e remotos, além de outras coisas. Entre alguns de seus componentes estão: - Scheduler O scheduler é uma uma aplicação servidor HTTP/1.1 e IPP/1.1 que gerencia as requisições HTTP e IPP, impressoras, classes, jobs e notificações no sistema. Este componente é estruturado como um tradicional processo single-threaded e monolítico que roda processos externos para fazer operações como impressão, notificação, enumeração de dispositivos/drivers e monitoramento de impressão remota. - Diagrama do CUPS
- Arquivos Job O scheduler armazena os arquivos job em um diretório de spool (/var/spool/cups). Dois tipos de aquivos são encontrados no diretório de spool: arquivos de controle que iniciam o nome com "c" ("c00001") e arquivos de dados que iniciam o nome com "d" ("d00001). Arquivos de controle são mensagens IPP enquanto que arquivos de dados são os arquivos originais para impressão.
Introdução ao Sistema de Impressão CUPS
4
CUPS – COMMON UNIX PRINTING SYSTEM
- Arquivos Log O scheduler mantém 3 tipos de arquivos de log que normalmente ficam armazenados em (/var/logs/cups). O arquivo access_log - lista toda requisição HTTP e IPP que foi processado pelo scheduler. O arquivo error_log contém mensagens do scheduler e de outras aplicações que podem auxiliar na descoberta de problemas. O arquivo page_log lista todo página impressa, útil para simples contagem de impressão. Os arquivos de log são rotacionados pelo scheduler quando alcançam um limite configurado mas também podem usar outros programas para tal tarefa como o "logrotate". - Arquivos de Configuração O scheduler usa vários arquivos de configuração: – – – – –
para armazenar as configurações do servidor – cupsd.conf classes disponíveis – classes.conf impressoras disponíveis – printers.conf mensagens de notificações – subscriptions.conf tipos de arquivos e filtros suportados - mime.types e mime.convs
3 - PPDs para Impressoras PostScript A Adobe não somente criou a linguagem PostScript mas também uma forma de descrever as propriedades e comandos especiais para as diferentes impressoras PostScript. A impressão avançada PostScript originalmente foi desenvolvida para uso nos sistemas Microsoft e Apple somente. Por um longo tempo toda impressão rica em características das impressoras modernas esteve indisponível para sistemas Linux e Unix. Cups mudou isso decisivamente e o mesmo está muito ligado ao conceito dos PPDs (PostScript Printer Description). Basicamente, um PPD descreve todas as características dependentes do dispositivo que podem ser utilizadas por um certo modelo de impressora. O driver de impressão carrega o arquivo PPD como um arquivo adicional de configuração e então o driver de impressão aprende sobre as opções disponíveis no disposi e como chamá-los. Impressoras PostScript possuem seus próprios PPDs e eles descrevem suas Introdução ao Sistema de Impressão CUPS
5
CUPS – COMMON UNIX PRINTING SYSTEM
propriedades exatamente. Estes arquivos são usado pelos drivers para Windows e Mac OS. Usar estes arquivos no CUPS torna o sistema de impressão completamente funcional. Para usar o PPD basta copiar para o diretório /usr/share/cups/model, atribuir as permissões de leitura para todos e reiniciar o sistema CUPS, e então irá aparecer na interface Web do CUPS. Os PPDs podem ser encontrados: – – – – –
No CD de drivers da impressora (mas as vezes estes arquivos vem de forma comprimida não podendo ser descomprimido com software livre) Também podem ser encontrados em uma máquina Windows (que já tenha a impressora instalada) No site do fabricante ou no site da Adobe (no caso de modelos antigos). No site http://www.linuxprinting.org/download/PPD/ (PPDs fornecidos pelos fabricantes como software livre) No site http://www.cups.org/ppd.php (arquivos de contribuição dos fabricantes de impressoras).
No caso de PPDs para diferentes sistemas Windows e Mac OS, as versões para NT4 e Mac OS X devem trabalhar bem no CUPS. (http://www.freestandards.org/en/OpenPrinting/Database/PPDDocumentation) Para checar a integridade de um PPD, utilize a ferramenta “cupstestppd” Maiores detalhes sobre como obter arquivos PPD: http://www.freestandards.org/en/OpenPrinting/Database/PPDDocumentation
3 - Impressoras Não PostScript, GhostScript, Foomatic e etc... Como as aplicações Unix/Linux geralmente produzem PostScript quando enviam um documento para impressão, todas impressoras são tratadas como PostScript. Se a impressora não entende PostScript por si mesma, o software GhostScript, que é um interpretador PostScript, é usado para traduzir o documento em PostScript para a linguagem da impressora (PCL, ESP/P entre outros). O código o qual gera a linguagem nativa da impressora é chamado de driver de impressão e há mais ou menos drivers sofisticados para muitas impressoras e linguagens. Isto cobre todos filtros GhostScript para uso com o sistema CUPS e requisita então que GhostScript esteja instalado no servidor de impressão. De acordo com o projeto, é possível criar o PPD para a impressora existente em conjunto com um filtro GhostScript. Do ponto de vista do usuário, isto já é o driver de impressão e pode ser instalado no sistema CUPS pelo métodos usuais (linha de comando, GUI ou Browser. ) Assim, os dados específicos de impressão do PPD são enviados a um filtro Introdução ao Sistema de Impressão CUPS
6
CUPS – COMMON UNIX PRINTING SYSTEM
GhostScript relevante no sistema que irá preparar os dados para impressão. Com este sistema o CUPS imprime tão bem como qualquer outro sistema GhostScript disponível, e há também outras opções para integrar filtros no CUPS, como o TurboPrint e Gimp-Print. Há diferentes tipos de drivers: –
Compilado no GhostScript - O conceito de driver é antigo e drivers são pedaços de código dentro do executável do GhostScript. Para adicionar novos drivers é necessário reconstruir o binário. Para ver os drivers no sistema “gs -h”. Há uma versão ESP GhostScript que contém todos drivers livres deste tipo
–
Filtros - Filters are separate executables which convert a printer-independent graphics format produced by GhostScript (PNM, PPM, ...) into the printer's native language. They appeared because some people wanted to create a printer driver quickly without needing to study the internals of GhostScript. The advantage is that you do not need to patch and compile GhostScript to install them. So they are very easy to install. To find out whether the driver you need is already installed, check whether the driver's executable is in the execution path (Use "which
").
–
CUPS Raster - CUPS raster drivers are a special form of filter type drivers. The concept is developed as a part of CUPS to make driver installation easy. CUPS calls GhostScript to translate the PostScript input into the CUPS raster format and an additional CUPS filter to translate the CUPS raster format into the printer's language. These drivers come always with PPDs which do not only contain options and printer properties but also instruct CUPS to call the correct CUPS filter. Which of these drivers are installed you see by the PPD files in /usr/share/cups/model (and its subdirectories) and by the printer models showing up in the lists when setting up a print queue with the web interface of CUPS (entries contain "CUPS").
–
Plugin IJS - Like filters IJS plug-ins are also separate executables and so they also do not require GhostScript to be patched and recompiled to add support for a new printer. But in contrary to filters IJS plug-ins communicate bi-directionally with GhostScript and so GhostScript can ask them for certain printer properties and adapt its rendering appropriately. The executables have to be in the execution path, like filters. They usually contain "ijs" somewhere in their names and some of them can be called with the "-h" command line option to get version information.
–
Uniprint - This method is not common any more. GhostScript has a built-in driver named "uniprint" which is a universal raster driver. One can supply all comands which have to be sent to a printer to do raster printing on the GhostScript command line or by a file. For some printers there are several such files with the extension ".upp" in the /usr/share/GhostScript//lib/ directory. Maiores detalhes sobre este assunto:: http://www.linuxprinting.org/~till/printing-tutorial/tut.html http://www.freestandards.org/en/OpenPrinting/Database/CUPSDocumentation
Introdução ao Sistema de Impressão CUPS
7
CUPS – COMMON UNIX PRINTING SYSTEM
FOOMATIC Um problema grande na instalação de uma impressora é fazer o sistema de impressão usar os filtros certos para converter os dados a serem impressos ao formato que a impressora precisa. Também precisa−se de acesso a todas as capacidades da impressora como escolha de caixa de papel, impressão aos dois lados, diferentes resoluções, economia de toner, ... A maioria das distribuições GNU/Linux usavam ferramentas próprias para configurar impressoras, que muitas vezes não suportam os modelos mais recentes e só disponibilizam as opções mais básicas do driver. Para melhorar esta situação, o Grant Taylor, autor do Printing HOWTO, criou uma base de dados para colecionar todas as informações sobre como as impressoras funcionam com software livre e sobre os drivers livres com as suas linhas de comando e todas as opções disponíveis, sendo muito útil para impressoras não PostScript. Este sistema, chamado Foomatic e situado no site www.linuxprinting.org, já tem mais que 1000 impressoras e mais que 200 drivers cadastrados. Com um filtro universal e um gerador de arquivos PPD é fácil criar filas de impressão para todos os sistemas de impressão livres com acesso a todas as opções do driver. O Foomatic já se tornou padrão nas distribuições GNU/Linux principais.
RESUMO O Foomatic é um sistema ou uma base de dados para integrar drivers de impressão livres com o sistemas de impressão em Unix e Linux. Suporta alguns sistemas de impressão como CUPS, LPRng, LPD, GNUlpr, Solaris LP, PPR, PDQ, CPS e impressão direta (no spooler) com qualquer driver de impressão livre conhecido ao projeto e qualquer impressora que trabalhe com estes drivers. Basicamente o Foomatic fornece um script filtro universal (foomatic-rip) o qual trabalha com vários sistemas de impressão e uma base de dados descrevendo impressoras e drivers que este filtro pode utilizar. Mais sobre o Foomatic em: http://www.freestandards.org/en/OpenPrinting/Database/Foomatic http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.tutorialhandout-foomatic-user.html ou no arquivo IV.Foomatic-Developer e II.Foomatic-User no diretório PDFs Para se servir do Foomatic, há duas possibilidades: – –
Baixar os arquivos necessários do linuxprinting.org e colocá−los no lugar certo manualmente. Baixar os pacotes do Foomatic e usar as ferramentas de linha de comando do Foomatic
Introdução ao Sistema de Impressão CUPS
8
CUPS – COMMON UNIX PRINTING SYSTEM
Maiores detalhes sobre estes procedimentos no arquivo: fisl2003_CUPS_FOOMATIC.pdf (no diretório PDFs)
4 – Filtros Filtros convertem arquivos job dentro de um formato que a impressora possa imprimir. Múltiplos filtros são executados, quando necessários, para converter um arquivo job para um formato imprimível. O programa filtro lê a entrada padrão ou lê um arquivo se um nome de arquivo é fornecido. Todos os filtros devem suportar um conjunto comum de opções incluindo nome da impressora, ID do job, título do job, número de cópias e opções do job. Toda a saída é enviada para a saída padrão. O CUPS fornece filtros para imprimir texto, PostScript, PDF, HP-GL/2 e muitos outros tipos de arquivos de imagem. CUPS também fornece filtros de driver de impressão para HP-PCL, ESC/P entre outros tipos. Filtros adicionais podem ser adicionados através do uso do arquivo mime.convs e arquivos PPD. Alguns filtros são disponibilizados na instalação padrão do CUPS para impressoras “Inkjet” e “Laser” compatíveis com PCL (Page Control Language - Uma linguagem de controle de páginas para impressoras da HP e compatíveis.) das famílias Deskjet e Laserjet da HP, Epson Stylus Color e Stylus Photo, Espon 9-pin e Epson 24-pin. Estes filtros são geralmente encontrados junto com outros filtros derivados do GhostScript, no diretório /usr/lib/cups/filter. O processo de filtragem em detalhes encontra-se no links: http://en.wikipedia.org/wiki/Common_Unix_Printing_System http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/V.CUPS-FilteringArchitecture/V.CUPS-Workshop-LinuxKongress2002-Content.html ou no arquivo V.CUPS-Filtering-Architecture no diretório PDFs. A figura abaixo mostra um visão geral sobre o funcionamento de filtros no sistema CUPS:
Introdução ao Sistema de Impressão CUPS
9
CUPS – COMMON UNIX PRINTING SYSTEM
Introdução ao Sistema de Impressão CUPS
10
CUPS – COMMON UNIX PRINTING SYSTEM
5 - Backends Os Backends enviam os dados de impressão para a impressora e enumera dispositivos/impressoras disponíveis quando necessário. O sistema CUPS inclui Backends para conexões como: – – – – – – – – –
parallel serial SCSI USB LPD IPP AppSocket (JetDirect) SMB. Entre outros Backends que podem ser construídos
6 - Bibliotecas O CUPS fornece uma biblioteca de funções para manipular imagens, conversão e gerenciamento de cores, dimensionamento de imagens entre outras coisas.
RESUMO CUPS consiste de um spooler de impressão Unix/Linux e um scheduler, um sistema de filtro que converte os dados de impressão para um formato que a impressora irá imprimir e um sistema backend que enviará estes dados para o dispositivo de impressão. O sistema CUPS faz uso extensivo: – –
PostScript - http://en.wikipedia.org/wiki/PostScript Rasterização - http://en.wikipedia.org/wiki/Raster_graphics - dos dados para convertê-los dentro de um formato legível para a impressora.
Introdução ao Sistema de Impressão CUPS
11
CUPS – COMMON UNIX PRINTING SYSTEM
A figura abaixo mostra de forma básica o sistema CUPS :
Além disso, o CUPS usa o protocolo IPP como base para gerenciamento da fila e trabalhos de impressão. Fornece interfaces de linha de comando tradicionais como o System V e Berkeley (BSD). Existem várias interfaces de configuração do CUPS e uma interface Web do próprio projeto CUPS, além da linha linha de comando já mencionada. Fontes: http://www.cups.org/documentation.php/spec-design.html http://en.wikipedia.org/wiki/Common_Unix_Printing_System
Introdução ao Sistema de Impressão CUPS
12
CUPS – COMMON UNIX PRINTING SYSTEM
7 - Configuração do CUPS O sistema CUPS pode ser monitorado e administrado por linha de comando, sendo os principais comandos: lpadmin, lpoption, lpstat – – –
lpstat -p -d = exibe as impressoras disponíveis lpadmin = configura impressoras, classes e direitos de usuários lpoption = todas características da impressora, que pode ser configurada via PPD, podem ser visualizadas e alteradas.
Mas existem também as ferramentas gráficas como XPP, GTKLP, Interface Web entre outras ferramentas intermediárias nos ambientes Desktop como o Gnome e o KDE (KDEPrint)
8 - Onde Obter Ajuda –
FAQ http://www.freestandards.org/en/OpenPrinting/Database/IndexFAQ
–
Aplicações usando arquivos PPD e Foomatic http://www.freestandards.org/en/OpenPrinting/Database/PPDDocumentation
9 – Parte Prática Obtendo Informações lpinfo -v Mostra os dispositivos suportados e disponíveis no sistema Impressoras disponíveis lpstat -p -d “-p” especifica que queremos ver a lista de impressoras “-d” nos diz qual a impressora padrão Imprimindo lp -d impressora arquivo lpr -P impressora arquivo Configurando a impressora padrão
Introdução ao Sistema de Impressão CUPS
13
CUPS – COMMON UNIX PRINTING SYSTEM
lpoptions -d impressora lpadmin -d impressora Visualizando os jobs lpq lpstat Cancelando os jobs cancel job-id lprm job-id Listando opções da impressora lpoptions -p impressora -l Mais opções em: http://www.cups.org/documentation.php/options.html Removendo uma impressora lpadmin -x impressora Adicionando uma impressora Para adicionar uma impressora no sistema há várias formas: – – –
Linha de comando Interface Web do Cups Aplicações disponíveis nas distribuições Linux Veremos abaixo o método por linha de comando: Confirmando a execução do sistema CUPS lpstat -t Mostra se o sistema está em execução e se há alguma impressora
Introdução ao Sistema de Impressão CUPS
14
CUPS – COMMON UNIX PRINTING SYSTEM
Adicionando a impressora lpadmin -p laserjet -E -v parallel -D “HP” -L “Escritorio” -E -m laser.ppd -p laserjet = nome da nova impressora - E = habilita a impressora e aceita requisições -v parallel = tipo de dispositivo da impressora -D “HP” = descrição da impressora -L “Escritorio” = descrição da localização da impressora -m laser.ppd = arquivo PPD do modelo da impressora (pode ser o path completo) Checando a adição da impressora no sistema lpstat -t Outros comandos Caso acima, não fosse utilizado a opção – E no comando lpadmin, deveriamos: enable laserjet Habilita a impressora (pronta para imprimir) lpstat -a -p laserjet Até aqui a impressora está pronta para imprimir, mas não aceita requisições, então: accept laserjet Aceita requisições para impressão A diferença entre enable e accept é que quando a impressora está “accept” o usuário é capaz de submeter jobs de impressão mesmo que ela não esteja “enable”. Isto permite os administradores fazer pequena manutenção na impressora como troca de papel ou toner enquanto o scheduler aceita requisições de impressão. Os comando inversos são: disable e reject
Introdução ao Sistema de Impressão CUPS
15
CUPS – COMMON UNIX PRINTING SYSTEM
10 – Referências http://www.linuxprinting.org/~till/printing-tutorial/tut.html http://www.linuxprinting.org//kpfeifle/LinuxKongress2002/Tutorial/ http://www.freestandards.org/en/OpenPrinting/Database/CUPSDocumentation http://www.freestandards.org/en/OpenPrinting/Database/Documentation http://www.freestandards.org/en/OpenPrinting/Database/IndexFAQ http://www.freestandards.org/en/OpenPrinting/Database/Foomatic -Toda Docs Cups http://www.cups.org/documentation.php - Historia Cups http://www.cups.org/book/intro.php -Design Cups http://www.cups.org/documentation.php/spec-design.html -Resolvendo Problemas Cups http://www.cups.org/cups-help.html - Impressoras de rede http://www.cups.org/documentation.php/network.html - Cups 1.2 http://www.cups.org/documentation.php/whatsnew.html - Cups linha de comando http://www.cups.org/documentation.php/options.html http://www.howtoforge.com/ipp_based_print_server_cups_p2? s=39906d785500a394fd2baf2fef13738b& http://www.vivaolinux.com.br/dicas/verDica.php?codigo=6036 http://learnlinux.tsf.org.za/courses/build/sys-admin/ch08s03.html http://www.togaware.com/linux/survivor/CUPS_Command.html http://www.lockergnome.com/nexus/it/2005/01/31/control-printers-in-linux-from-thecommand-line/ -Manual do Administrador http://www.cups.org/doc-1.1/sam.html - Manual do usuario http://www.cups.org/doc-1.1/sum.html
Autor: Eduardo de Oliveira Hernandes Analista de Suporte - EMPRO Mail: [email protected] - [email protected] Introdução ao Sistema de Impressão CUPS
16