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