Você está na página 1de 16

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 e o


CUPS é um deles.

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 <driver
name>").

– 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/<version>/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.tutorial-
handout-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-Filtering-
Architecture/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-the-
command-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: ehernandes@empro.com.br - eduardodeoh@gmail.com

Introdução ao Sistema de Impressão CUPS 16

Você também pode gostar