9.5. LPD (Daemon de impressora de linha)

A impressão de um arquivo em segundo plano é chamada de spooling. Um spooler permite que o usuário continue com outros programas no computador sem ter de esperar que a impressora conclua lentamente o trabalho de impressão.

O FreeBSD inclui um spooler chamado lpd(8). Os trabalhos de impressão são enviados com o comando lpr(1).

9.5.1. Configuração inicial

Um diretório para armazenar trabalhos de impressão é criado, a propriedade é definida e as permissões são definidas para impedir que outros usuários visualizem o conteúdo desses arquivos:

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

As impressoras são definidas no /etc/printcap. Uma entrada para cada impressora inclui detalhes como um nome, a porta onde ela está conectada e várias outras configurações. Crie /etc/printcap com estes conteúdos:

lp:\				1
	:lp=/dev/unlpt0:\	2
	:sh:\			3
	:mx#0:\			4
	:sd=/var/spool/lpd/lp:\	5
	:lf=/var/log/lpd-errs:	6

1

O nome desta impressora. O lpr(1) envia trabalhos de impressão para a impressora lp, a menos que outra impressora seja especificada com -P, portanto, a impressora padrão deve ser denominada lp.

2

O dispositivo em que a impressora está conectada. Substitua esta linha pela apropriada para o tipo de conexão mostrado aqui.

Tipo de conexãoEntrada de Dispositivos no /etc/printcap
USB
:lp=/dev/unlpt0:\

Este é o dispositivo de impressora USB que não reseta. Se houver problemas, use o ulpt0, ele reseta a porta USB após cada uso.

Paralelo
:lp=/dev/lpt0:\
Rede

Para uma impressora que suporta o protocolo LPD:

:lp=:rm=network-printer-name:rp=raw:\

Para impressoras que suportam impressão na porta 9100:

:lp=9100@network-printer-name:\

Para ambos os tipos, substitua network-printer-name pelo nome de host DNS da impressora na rede.

Serial
:lp=/dev/cuau0:br=9600:pa=none:\

Esses valores são para uma impressora serial comum conectada a uma porta serial da placa-mãe. A taxa de transmissão é 9600 e nenhuma paridade é usada.

3

Suprimir a impressão de uma página de cabeçalho no início de um trabalho de impressão.

4

Não limite o tamanho máximo de um trabalho de impressão.

5

O caminho para o diretório de spooling desta impressora. Cada impressora usa seu próprio diretório de spooling.

6

O arquivo de log no qual os erros nesta impressora serão relatados.

Depois de criar o /etc/printcap, use chkprintcap(8) para testar se há erros:

# chkprintcap

Corrija quaisquer problemas relatados antes de continuar.

Ative o lpd(8) no /etc/rc.conf:

lpd_enable="YES"

Inicie o serviço:

# service lpd start

9.5.2. Imprimindo com o lpr(1)

Os documentos são enviados para a impressora com o lpr. Um arquivo a ser impresso pode ser nomeado na linha de comando ou canalizado para o lpr. Esses dois comandos são equivalentes, enviando o conteúdo de doc.txt para a impressora padrão:

% lpr doc.txt
% cat doc.txt | lpr

Impressoras podem ser selecionadas com -P. Para imprimir em uma impressora chamada laser:

% lpr -Plaser doc.txt

9.5.3. Filtros

Os exemplos mostrados até agora enviaram o conteúdo de um arquivo de texto diretamente para a impressora. Contanto que a impressora entenda o conteúdo desses arquivos, a saída será impressa corretamente.

Algumas impressoras não são capazes de imprimir texto simples, e o arquivo de entrada pode nem ser texto simples.

Filtros permitem que os arquivos sejam traduzidos ou processados. O uso típico é traduzir um tipo de entrada, como texto simples, em um formato que a impressora possa entender, como PostScript® ou PCL. Os filtros também podem ser usados para fornecer recursos adicionais, como adicionar números de página ou destacar o código-fonte para facilitar a leitura.

Os filtros discutidos aqui são filtros de entrada ou filtros de texto. Esses filtros convertem o arquivo recebido em diferentes formatos. Use su(1) para se tornar root antes de criar os arquivos.

Os filtros são especificados em /etc/printcap com o identificador if=. Para usar /usr/local/libexec/lf2crlf como um filtro, modifique o /etc/printcap assim:

lp:\
	:lp=/dev/unlpt0:\
	:sh:\
	:mx#0:\
	:sd=/var/spool/lpd/lp:\
	:if=/usr/local/libexec/lf2crlf:\   1
	:lf=/var/log/lpd-errs:

1

if= identifica o filtro de entrada que será usado no texto recebido.

Dica:

Os caracteres backslash de continuação de linha no final das linhas nas entradas do printcap revelam que uma entrada para uma impressora é na verdade apenas uma linha longa com entradas delimitadas por dois pontos. O exemplo anterior pode ser reescrito como uma única linha menos legível:

lp:lp=/dev/unlpt0:sh:mx#0:sd=/var/spool/lpd/lp:if=/usr/local/libexec/lf2crlf:lf=/var/log/lpd-errs:

9.5.3.1. Impedindo degraus em impressoras de texto simples

Os arquivos de texto típicos do FreeBSD contêm apenas um único caractere de feed de linha no final de cada linha. Estas linhas vão ficar em degraus em uma impressora padrão:

Um arquivo impresso parece
                    como os degraus de uma escada
                                              espalhados pelo vento

Um filtro pode converter os caracteres de nova linha em retornos de carro e novas linhas. Os retornos de carro fazem a impressora retornar para a esquerda após cada linha. Crie o /usr/local/libexec/lf2crlf com este conteúdo:

#!/bin/sh
CR=$'\r'
/usr/bin/sed -e "s/$/${CR}/g"

Defina as permissões e torne-o executável:

# chmod 555 /usr/local/libexec/lf2crlf

Modifique o /etc/printcap para usar o novo filtro:

:if=/usr/local/libexec/lf2crlf:\

Teste o filtro imprimindo o mesmo arquivo de texto simples. O procedimento fará com que cada linha comece no lado esquerdo da página.

9.5.3.2. Texto simples chique em impressoras PostScript® com print/enscript

O GNUEnscript converte arquivos de texto simples em arquivos formatados como PostScript® para impressão em impressoras PostScript®. Ele adiciona números de página, quebra as linhas longas e fornece vários outros recursos para facilitar a leitura dos arquivos de texto impressos. Dependendo do tamanho do papel local, instale o print/enscript-letter ou o print/enscript-a4 da coleção Ports.

Crie o /usr/local/libexec/enscript com este conteúdo:

#!/bin/sh
/usr/local/bin/enscript -o -

Defina as permissões e torne-o executável:

# chmod 555 /usr/local/libexec/enscript

Modifique o /etc/printcap para usar o novo filtro:

:if=/usr/local/libexec/enscript:\

Teste o filtro imprimindo um arquivo de texto simples.

9.5.3.3. Imprimindo PostScript® em impressoras PCL

Muitos programas produzem documentos PostScript®. No entanto, impressoras baratas geralmente só entendem texto simples ou PCL. Este filtro converte os arquivos PostScript® para o formato PCL antes de enviá-los para a impressora.

Instale o interpretador de PostScript® Ghostscript, print/ghostscript9, através da Coleção de Ports.

Crie o /usr/local/libexec/ps2pcl com este conteúdo:

#!/bin/sh
/usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -q -sDEVICE=ljet4 -sOutputFile=- -

Defina as permissões e torne-o executável:

# chmod 555 /usr/local/libexec/ps2pcl

A entrada PostScript® enviada para este script será processada e convertida em PCL antes de ser enviada para a impressora.

Modifique o /etc/printcap para usar este novo filtro de entrada:

:if=/usr/local/libexec/ps2pcl:\

Teste o filtro enviando um pequeno programa PostScript® para ele:

% printf "%%\!PS \n /Helvetica findfont 18 scalefont setfont \
72 432 moveto (PostScript printing successful.) show showpage \004" | lpr

9.5.3.4. Filtros Inteligentes

Um filtro que detecta o tipo de entrada e converte automaticamente para o formato correto da impressora pode ser muito conveniente. Os dois primeiros caracteres de um arquivo PostScript® são geralmente %!. Um filtro pode detectar esses dois caracteres. Os arquivos PostScript® podem ser enviados de forma inalterada para uma impressora PostScript®. Arquivos de texto podem ser convertidos para PostScript® com o Enscript como mostrado anteriormente. Crie o /usr/local/libexec/psif com este conteúdo:

#!/bin/sh
#
#  psif - Print PostScript or plain text on a PostScript printer
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

case "$first_two_chars" in
%!)
    # %! : PostScript job, print it.
    echo "$first_line" && cat && exit 0
    exit 2
    ;;
*)
    # otherwise, format with enscript
    ( echo "$first_line"; cat ) | /usr/local/bin/enscript -o - && exit 0
    exit 2
    ;;
esac

Defina as permissões e torne-o executável:

# chmod 555 /usr/local/libexec/psif

Modifique o /etc/printcap para usar este novo filtro de entrada:

:if=/usr/local/libexec/psif:\

Teste o filtro imprimindo PostScript® e arquivos de texto simples.

9.5.3.5. Outros Filtros Inteligentes

Escrever um filtro que detecte muitos tipos diferentes de entrada e os formate corretamente é um desafio. O print/apsfilter da Coleção de Ports é um filtro magico inteligente que detecta dezenas de tipos de arquivos e os converte automaticamente para o PDL entendido pela impressora. Veja http://www.apsfilter.org para mais detalhes.

9.5.4. Múltiplas filas

As entradas no /etc/printcap são na verdade definições de filas. Pode haver mais de uma fila para uma única impressora. Quando combinadas com filtros, múltiplas filas fornecem aos usuários um maior controle sobre como seus trabalhos são impressos.

Por exemplo, considere uma impressora laser PostScript® em rede num escritório. A maioria dos usuários deseja imprimir texto simples, mas alguns usuários avançados querem poder imprimir diretamente os arquivos PostScript®. Duas entradas podem ser criadas para a mesma impressora no /etc/printcap:

textprinter:\
	:lp=9100@officelaser:\
	:sh:\
	:mx#0:\
	:sd=/var/spool/lpd/textprinter:\
	:if=/usr/local/libexec/enscript:\
	:lf=/var/log/lpd-errs:

psprinter:\
	:lp=9100@officelaser:\
	:sh:\
	:mx#0:\
	:sd=/var/spool/lpd/psprinter:\
	:lf=/var/log/lpd-errs:

Os documentos enviados para a fila textprinter serão formatados pelo filtro /usr/local/libexec/enscript mostrado em um exemplo anterior. Usuários avançados podem imprimir arquivos PostScript® em psprinter, onde nenhuma filtragem é feita.

Esta técnica de múltiplas filas pode ser usada para fornecer acesso direto a todos os tipos de recursos da impressora. Uma impressora com um duplexador pode usar duas filas, uma para impressões em apenas um lado da folha e outra com um filtro que envia a seqüência de comandos para habilitar a impressão frente e verso e, em seguida, envia o arquivo recebido.

9.5.5. Monitoramento e controle de impressão

Vários utilitários estão disponíveis para monitorar trabalhos de impressão e verificar e controlar a operação da impressora.

9.5.5.1. lpq(1)

O lpq(1) mostra o status das tarefas de impressão de um usuário. Trabalhos de impressão de outros usuários não são mostrados.

Mostra os trabalhos pendentes do usuário atual em uma única impressora:

% lpq -Plp
Rank   Owner      Job  Files                                 Total Size
1st    jsmith     0    (standard input)                      12792 bytes

Mostra os trabalhos pendentes do usuário atual em todas as impressoras:

% lpq -a
lp:
Rank   Owner      Job  Files                                 Total Size
1st    jsmith     1    (standard input)                      27320 bytes

laser:
Rank   Owner      Job  Files                                 Total Size
1st    jsmith     287  (standard input)                      22443 bytes

9.5.5.2. lprm(1)

O lprm(1) é usado para remover trabalhos de impressão. Usuários normais só podem remover seus próprios trabalhos. O root pode remover qualquer um ou todos os trabalhos.

Remova todos os trabalhos pendentes de uma impressora:

# lprm -Plp -
dfA002smithy dequeued
cfA002smithy dequeued
dfA003smithy dequeued
cfA003smithy dequeued
dfA004smithy dequeued
cfA004smithy dequeued

Remova um único trabalho de uma impressora. O lpq(1) é usado para encontrar o número do trabalho.

% lpq
Rank   Owner      Job  Files                                 Total Size
1st    jsmith     5    (standard input)                      12188 bytes
% lprm -Plp 5
dfA005smithy dequeued
cfA005smithy dequeued

9.5.5.3. lpc(8)

O lpc(8) é usado para verificar e modificar o status da impressora. O lpc é seguido por um comando e um nome de impressora opcional. O parâmetro all pode ser usado em vez de um nome de impressora específico, e o comando será aplicado a todas as impressoras. Usuários normais podem visualizar o status com lpc(8). Somente o class="username">root pode usar comandos que modificam o status da impressora.

Mostrar o status de todas as impressoras:

% lpc status all
lp:
	queuing is enabled
	printing is enabled
	1 entry in spool area
	printer idle
laser:
	queuing is enabled
	printing is enabled
	1 entry in spool area
	waiting for laser to come up

Impedindo que uma impressora aceite novos trabalhos e fazendo com que ela comece a aceitar novos trabalhos novamente:

# lpc disable lp
lp:
	queuing disabled
# lpc enable lp
lp:
	queuing enabled

Pare de imprimir, mas continue aceitando novos trabalhos. Em seguida, comece a imprimir novamente:

# lpc stop lp
lp:
	printing disabled
# lpc start lp
lp:
	printing enabled
	daemon started

Reinicie uma impressora após alguma condição de erro:

# lpc restart lp
lp:
	no daemon to abort
	printing enabled
	daemon restarted

Desative a fila de impressão e desative a impressão, com uma mensagem para explicar o problema aos usuários:

# lpc down lp Repair parts will arrive on Monday
lp:
	printer and queuing disabled
	status message is now: Repair parts will arrive on Monday

Reative uma impressora que esteja inativa:

# lpc up lp
lp:
	printing enabled
	daemon started

Veja lpc(8) para mais comandos e opções.

9.5.6. Impressoras Compartilhadas

As impressoras costumam ser compartilhadas por vários usuários em empresas e escolas. Recursos adicionais são fornecidos para tornar as impressoras compartilhadas mais convenientes.

9.5.6.1. Aliases

O nome da impressora é definido na primeira linha da entrada em /etc/printcap. Nomes adicionais, ou aliases, podem ser adicionados após esse nome. Os aliases são separados do nome e um do outro por barras verticais:

lp|repairsprinter|salesprinter:\

Os aliases podem ser usados no lugar do nome da impressora. Por exemplo, os usuários do departamento de vendas imprimem em sua impressora com

% lpr -Psalesprinter sales-report.txt

Usuários do departamento de Reparos podem imprimir na sua impressora com

% lpr -Prepairsprinter repairs-report.txt

Todos os documentos são impressos nessa única impressora. Quando o departamento de vendas cresce o suficiente para precisar de sua própria impressora, o alias pode ser removido da entrada da impressora compartilhada e usado como o nome de uma nova impressora. Os usuários nos dois departamentos continuam usando os mesmos comandos, mas os documentos de vendas são enviados para a nova impressora.

9.5.6.2. Páginas de cabeçalho

Pode ser difícil para os usuários localizarem seus documentos na pilha de páginas produzidas por uma impressora compartilhada ocupada. Páginas de cabeçalho foram criadas para resolver este problema. Uma página de cabeçalho com o nome de usuário e o nome do documento é impressa antes de cada trabalho de impressão. Estas páginas são por vezes chamadas de páginas banner ou separadoras.

A ativação das páginas de cabeçalho é diferente, dependendo se a impressora está conectada diretamente ao computador com um cabo USB, paralelo ou serial, ou se está conectada remotamente por uma rede.

As páginas de cabeçalho em impressoras conectadas diretamente são ativadas removendo-se a linha :sh:\ (Suprimir Cabeçalho) da entrada no /etc/printcap. Essas páginas de cabeçalho usam apenas caracteres de feed de linha para novas linhas. Algumas impressoras precisarão do filtro /usr/share/examples/printing/hpif para evitar imprimir o texto em escada. O filtro configura impressoras PCL para imprimir retornos de carro e alimentações de linha quando um feed de linha é recebido.

As páginas de cabeçalho das impressoras de rede devem ser configuradas na própria impressora. Entradas de página de cabeçalho no /etc/printcap são ignoradas. As configurações geralmente estão disponíveis no painel frontal da impressora ou em uma página da web de configuração acessível com um navegador da web.

9.5.7. Referências

Arquivos de exemplo:/usr/share/examples/printing/.

O Manual do Spooler de Impressora de Linha do 4.3BSD, /usr/share/doc/smm/07.lpd/paper.ascii.gz.

Páginas de manual: printcap(5), lpd(8), lpr(1), lpc(8), lprm(1), lpq(1).

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.