LPD – Line Printer Daemon

1. Por que fiz isso aqui

Antes de ir aos comandos vou explicar o motivo de eu ter montado esse pequeno HowTo:
Onde trabalho, temos centenas de Unidades de atendimento espalhadas pela cidade e em cada uma das unidades, temos diversas impressoras, em rede, local, através de microtarget, enfim, temos muita coisa relacionada a impressao. Pelo tamanho de nossa rede, diversos chamados para manutencao de impressoras aparecem no help desk e como o pessoal do help desk nem sempre domina o conhecimento (ainda!! afinal help desk tem futuro!) eles costumam tirar as dúvidas com a equipe de Tecnologia (analistas) para poder dar o suporte necessário.
Durante diversos dias, um dos colegas do Help Desk tem solicitado que fosse elaborado um manual onde ele conseguisse atender as unidades durante a madrugada para nao ter que acordar ninguem, sendo assim, googlei algumas coisas sobre lpd e mesclei a outras que já conhecia e elaborei isso daqui.

2. Introducao

No Unix e nos sistemas Unix Like, o sistema padrao sempre foi o LPD (Line Printer daemon). So que nos ultimos anos, surgiram solucoes alternativas a ele (ex. CUPS Common Unix Printing System). Os principais arquivos e executaveis do lpd são:

lpd – line printer daemon (Isso é que faz a impressao funcionar)
lpd.conf – Arquivo aonde configuramos o daemon
lpd.perms – Controle de permissoes de acesso ao lpd (quem imprime oq)
/etc/printcap – Arquivo aonde configuramos as impressoras na qual iremos nos conectar

O arquivo /etc/printcap define a configuração usada pelo daemon. O uso de impressoras locais ou remotas é transparente, sendo gerenciado pela interação entre os daemons lpd das máquinas envolvidas.
Os principais comandos de impressão são:

* lpr : envia o arquivo (ou a entrada padrão) para a impressora.
* lpq : lista a fila de impressão.
* lprm : remove um job da fila de impressão.

Normalmente o comando lpr efetua somente o envio de dados para a impressora local ou remota, sem nenhum tratamento. Isso significa que os dados enviados devem estar formatados para a impressora desejada.
Existem muitos filtros disponíveis para converter formatos comuns (PostScript, imagens, etc) para código nativo de impressoras específicas, como o magicfilter. Esses filtros podem ser ativados automaticamente pelo daemon lpd, através de sua definição adequada no arquivo /etc/printcap. Com isso, pode-se mandar diretamente para impressora os mais diversos formatos de arquivos, sem necessidade de conversão manual.

Todos esses três comandos lpr, lprm e lpq aceitam a opção -PNome-da-Impressora para especificar qual a impressora/fila irá operar, como listado no arquivo /etc/printcap. Ele habilita que você possa enviar, remover e checar os trabalhos de impressão para várias impressoras. Se você não usa a opção -P, então esses comandos usam a impressoras especificada na variável de ambiente PRINTER. Finalmente se você não tiver a variável de ambiente PRINTER, esses comandos por padrão usam a impressora lp.

2.1 Configurando o /etc/printcap

Nesta seção é explicado como configurar a impressora que usamos como exemplo para a impressão de documentos de texto.

Em primeiro lugar é necessário modificar o arquivo /etc/printcap, criando uma descrição para a impressora usando um identificador (o nome da impressora) padrão lp.

Exemplo /etc/printcap

lp|local printer|HP DeskJet 690C:
:lp=/dev/lpa0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:
:sh:pl#66:pw#80:if=/usr/local/libexec/lpfilter:

O formato do arquivo e as opções estão descritas em detalhe em printcap(5). A única coisa a assinalar é que, para resolver o problema das “escadinhas”, foi inserido o indicador para um filtro com a instrução:

if=/usr/local/libexec/lpfilter

Driver de impressão: no Exemplo 6-1 é usado o dispositivo lpa#, que é o driver “polled” da impressora no lugar de lpd#, que é o driver padrão para interrupção administrada (interrupt driven driver). Algumas impressoras não administram corretamente as interrupções, com a conseqüência de que levam horas para imprimir uma página.

Depois é necessário criar os diretórios de spool especificados com as opções sd, que serão usadas pelo lpd para acumular os dados.

# cd /var/spool/lpd
# mkdir lp
# chown daemon:daemon lp
# chmod 770 lp

Impressao remota

E necessario configurar /etc/printcap:

lp|line printer on 192.168.0.1:
:lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:
:rm=192.168.0.1:rp=lp

ps|Ghostscript driver on 192.168.0.1:
:lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:
:mx#0:
:rm=192.168.0.1:rp=ps

3. Imprimindo

Sempre devemos lembrar de nao tentar imprimir um arquivo .doc ou outra coisa diretamente pelo lpr pois sabemos que necessitamos de conversores para que o arquivo seja impresso da maneira correta. No caso de arquivos de texto puro, nao ha problemas.

Para imprimir arquivos em texto puro, digite:

$ lpr nome_do_arquivo

Podemos imprimir também multiplos arquivos de texto puro na mesma linha de comando como no exemplo a seguir:

$ lpr arquivo1.txt arquivo2.txt

Ha tambem a opcao de imprimir especificando a impressora a ser utilizada na impressao:

$ lpr -Pnome-da-impressora nome-do-arquivo

Se voce digitar:

ls -l |lpr -Pprinter1

Estariamos enviando um ls, ou seja, um dir do DOS para a impressora printer1, ou seja, seria impresso exatamente
essa listagem. Como nao ha arquivos a serem impressos pelo comando lpr, O comando lpr ira ler da entrada padrão,
que no caso e o resultado do comando ls -l.

4. Verificando a Impressão

Para visualizar a fila para a impressora padrão, digite: lpq. Para especificar a impressora, use a opção -P. Por exemplo, o comando:

$ lpq -Pprinter1

mostrará a fila da impressora chamada de printer1. Aqui está um exemplo da saída do comando lpq:

printer1 is ready and printing
Rank Owner Job Files Total Size
active suid0 9 /etc/host.conf, /etc/hosts.equiv 88 bytes
2nd suid0 10 (standard input) 1635 bytes
3rd mam 11 … 78519 bytes

Ele mostra três trabalhos de impressão na fila da impressora printer1.
O primeiro trabalho, enviado pelo usuario suid0, tem atribuido um “número de fila” 9. Cada trabalho de impressão tem um número único. A maioria das vezes você pode ignorar este número, mas você irá precisar dele se quizer cancelar o trabalho de impressão; veja na seção Removendo Trabalhos de Impressão para mais detalhes.

O número de trabalho de Impressão 9 consiste em dois arquivos. Multiplos arquivos dado em um comando lpr é tratado como parte de um simples trabalho de impressão. Ele é o trabalho de impressão atual ( note a palavra active na coluna “Rank”), a qual diz qual deve ser o trabalho de impressão ativo. O segundo trabalho de impressão consiste de dados passados pela entrada padrão para o comando lpr. O terceiro vem do usuário mam; o qual é um trabalho de impressão muito grande. O nome do diretório do seu arquivo é tão grande que não cabe, então o comando lpq mostra os pontos da árvore.

A primeira linha da saída do comando lpq é igualmente importante: ela informa o que a impressora está fazendo ( ou o que o LPD pensa que ela fazendo em última instância ).

O comando lpq suporta também a opção -l para gerar uma longa lista detalhada. Aqui está um exemplo lpq -l:

waiting for bamboo to become ready (offline ?)
suid0: 1st [job 009rose]
/etc/host.conf 73 bytes
/etc/hosts.equiv 15 bytes

suid0: 2nd [job 010rose]
(standard input) 1635 bytes

mam: 3rd [job 011rose]
/home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes

5. Removendo um Trabalho da fila de Impressão

Você pode remover um trabalho de impressão da fila com o comando lprm. Frequentemente, você irá utilizar o comando lprm para remover o trabalho de impressão ativo, mas muitas das vezes ou todas as vezes, a impressão continua.

Para remover o trabalho de impressão da impressora padrão, vocè deverá primeiro encontrar o número do trabalho de impressão com o comando lpq, então digite:

$ lprm job-number

Para remover o trabalho de impressão de uma impressora especifica, você deve utilizar a opção -P. O comando à seguir remove o trabalho de impressão de número 10 da fila de impressão da imrpessora bamboo:

$ lprm -Pprinter1 10

O comando lprm possui alguns atalhos:

lprm –

Remove todos os trabalhos de impressão ( para a impressora padrão ) pertencente a você.
lprm usuário

Remove todos os trabalhos de impressão ( para a impressora padrão ) pertencentes ao usuário usuário. Somente o super-usuário pode remover os trabalhos de impressão de outros usuários, e você sõ pode remover os seus próprios.
lprm

Sem o número do trabalho de impressão, ou com a opção – aparecendo na linha de comando, lprm irá remover o trabalho de impressão ativo ( corrente ) da impressora padrão se este for pertencente a você, caso contrário só o super-usuário poderá remove-lo.

Utilize a opção -P para poder especificar a impressora sem ser a padrão. Por exemplo, o seguinte comando remove todos os trabalhos de impressão para o usuário corrente na fila da impressora chamada de printer1:

$ lprm -Pprinter1 –

Nota: Se você esta trabalhando em um ambiente de rede, o comando lprm permitirá à você remover os trabalhos de impressão apenas enviados pela máquina que os enviou. Veja a sequência de comandos abaixo para demosntrar isso:

$ lpr -Pprinter1 myfile

$ telnet servidor

$ lpq -Pprinter1

Rank Owner Job Files Total Size
active sergio 12 … 49123 bytes
2nd suid0 13 myfile 12 bytes

$ lprm -Pprinter1 13

dequeued

6. Utilizando filtros para formatar texto

O comando lpr suporta um número de opções que controla a formatação do texto, converte graficos e outros formatos de arquivos, produzindo multiplas copias, manipulando o trabalho de impressao, e muito mais. Essa seção descreve as opções.

As seguintes opções do comando lpr controla a formatação dos arquivos no trabalho de imrpessão. Use essas opções se o trabalho de impressão não contiver texto puro ou se você quizer uma saída formatada de texto puro através do lpr.

Por exemplo, o comando a seguir imprime um arquivo DVI ( de um systema TeX) chamado de fish-report.dvi para a impressora chamada de bamboo:

$ lpr -Pprinter1 -d fish-report.dvi

Essas opções sao aplicadas em cada arquivo do trabalho de impressão, você não pode misturar (digamos) arquivos nos formatos DVI e ditroff no mesmo trabalho de impressão. Sendo assim envie separadamente os arquivos, usando opções de conversão diferentes para cada um deles.

Nota: Para todas essas opçõess, exceto as -p e -T, requerem um filtro conversor instalado para a impressora de destino. Por exemplo, a opção -d precisa do filtro de conversão para DVI. A seção Filtros Conversores dá mais detalhes.

-c

imprime arquivos do tipo cifplot.
-d

Imprime arquivos do tipo DVI.
-f

Imprime arquivos do tipo FORTRAN.
-g

Imprime arquivos do tipo plot.

-i número

Para alinhar a saída por um número de colunas; se você omitir número, o alinhamento será de 8 colunas. Essa opção trabalha somente com alguns filtros conversores.

Nota: Não coloque nenhum espaço entre a opção -i e o número.

-l

Imprime arquivo do tipo literal, incluindo caracteres de controle.
-n

Imprime arquivo do tipo ditroff (troff independente do dispositivo).
-p

Formata o texto puro com o comando pr(1) antes da impressão. Veja pr(1) para maiores informações.
-T título

Usa o título no cabeçalho do comando pr(1) ao invez do nome do arquivo. Essa opção afeta somente quando usado em conjunto com a opção -p.
-t

Imprime arquivo do tipo troff.
-v

Imprime arquivo do Tipo raster.

Aqui um exemplo: Esse comando imprime uma versão da página de manual do comando ls na impressora padrão:

$ zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t

O comando zcat descompacta o codigo fonte da pagina do manual ls e transfere para o comando troff, o qual formata o codigo a faz a saida do GNU troff ir para lpr, o qual envia o trabalho de impressao para o spooler doLPD. Por causa do uso da opcao -t para o comando lpr(1), o spooler ira converter a saida do GNU troff em um formato que a impressora possa compreender e entao sera impresso o trabalho de impressao.

7. Opções de Manipulação de Impressão

As opçõess a seguir para o comando lpr(1) informa ao LPD como manipular os trabalhos de impressão:

-# cópias

Produz o número de cópias de cada arquivo no trabalho de impressão ao inves de uma única cópia. O administrador pode desabilitar essa opção para reduzir o desgaste da impressora e insentivar a fotocópia. Veja a seção Restringindo o número de cópias .

Esse exemplo imprime tres cópias do arquivo parser.c seguido de tres cópias do arquivo parser.h na impressora padrão:

$ lpr -#3 parser.c parser.h

-m

Envia um e-mail apos o término da impressão do trabalho de impressão. Com essa opção, o sistema LPD irá enviar um e-mal para a sua conta quando ele terminar de gerenciar seu trabalho de impressão. Na mensagem, ele ira informar à você se a impressão terminou com sucesso ou com falhas e, geralmente, qual foi o erro ocorrido.
-s

Não faz cópias de os arquivos para o diretório de spooling, mas ao inves disso, ele cria um link simbólico.

Se você está imprimindo um trabalho de impressão grande, provavelmente essa opção irá ajuda-lo. Isso economiza espaço no diretório de spooling, você pode ter um consumo maior que o seu espaço disponível no sistema do arquivo onde fica esse diretório. Isso economiza tempo porque o LPD não precisa copiar o arquivo cada vez que o seu trabalho de impressão for impresso.

Entretanto, existe um custo: deste que o LPD irá acessar o arquivo original diretamente, você não poderá modifica-lo ou remove-lo até que tenha terminado a sua impressão.

Nota: Se você está imprimindo para uma impressora remota, o LPD irá eventualmeten que copiar os arquivos da máquina local para a máquina remota, então a opção -s irá apenas economizar espaço na máquina local, não na máquina remota. Ainda assim é uma opção muito útil.

-r

Remove os arquivos do trabalho de Impressão apos terem sido copiados para o diretório de spool, ou apos a impressão deles com a opção -s. Seja cuidadoso com essa opção!

8. Opções de Páginas de Cabeçalho

Essa opção do lpr ajusta o texto que normalmente aparece no cabeçalho do trabalho de impressão. Se o cabeçalho for suprimido para a impressora de destino, essa opção não terá efeito algum. Veja a seção Páginas de Cabeçalho para informar-se sobre a configuração.

-C texto

Troca o nome da máquina na página de cabeçalho pelo texto. O nome da máquina é normalmente o da máquina que enviou o trabalho de impressão.
-J texto

Troca o nome do trabalho de impressão na página de cabeçalho pelo texto. O nome do trabalho de impressão normalmente é o nome do primeiro arquivo do trabalho de impressão, ou stdin se você estiver imprimindo da entrada padrão.
-h

Não imprime a página de cabeçalho.

Nota: Em alguns locais, essa opção pode não ter efeito algum, uma vez que a páginas de cabeçalho são sempre gerada.

Acredito que isso consiga explicar bastante coisa sobre o sistema de impressao. Mas caso haja mais alguma coisa, me mande um e-mail para que eu tente ajudar. Mas nao venha me perguntar nada estupido demais. Mesmo que esse manual nao reponda, ainda temos o google para nos ajudar, somente depois de googlar o que esta precisando venha me procurar. Posteriormente, terei um manual explicativo sobre lpc.

Sergio Augusto a.k.a suid0
suid0@unitednerds.org
suidzero@gmail.com