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).
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:\:lp=/dev/unlpt0:\
:sh:\
:mx#0:\
:sd=/var/spool/lpd/lp:\
:lf=/var/log/lpd-errs:
O nome desta impressora. O lpr(1) envia trabalhos de impressão para a impressora | |||||||||||
O dispositivo em que a impressora está conectada. Substitua esta linha pela apropriada para o tipo de conexão mostrado aqui.
| |||||||||||
Suprimir a impressão de uma página de cabeçalho no início de um trabalho de impressão. | |||||||||||
Não limite o tamanho máximo de um trabalho de impressão. | |||||||||||
O caminho para o diretório de spooling desta impressora. Cada impressora usa seu próprio diretório de spooling. | |||||||||||
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
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
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:\:lf=/var/log/lpd-errs:
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:
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.
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.
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
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.
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.
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.
Vários utilitários estão disponíveis para monitorar trabalhos de impressão e verificar e controlar a operação da impressora.
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 -P
Rank Owner Job Files Total Size 1st jsmith 0 (standard input) 12792 byteslp
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
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 -P
dfA002smithy dequeued cfA002smithy dequeued dfA003smithy dequeued cfA003smithy dequeued dfA004smithy dequeued cfA004smithy dequeuedlp
-
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 -P
dfA005smithy dequeued cfA005smithy dequeuedlp
5
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: queuing disabledlp
#
lpc enable
lp: queuing enabledlp
Pare de imprimir, mas continue aceitando novos trabalhos. Em seguida, comece a imprimir novamente:
#
lpc stop
lp: printing disabledlp
#
lpc start
lp: printing enabled daemon startedlp
Reinicie uma impressora após alguma condição de erro:
#
lpc restart
lp: no daemon to abort printing enabled daemon restartedlp
Desative a fila de impressão e desative a impressão, com uma mensagem para explicar o problema aos usuários:
#
lpc down
lp: printer and queuing disabled status message is now: Repair parts will arrive on Mondaylp
Repair parts will arrive on Monday
Reative uma impressora que esteja inativa:
#
lpc up
lp: printing enabled daemon startedlp
Veja lpc(8) para mais comandos e opções.
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.
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 -P
salesprinter
sales-report.txt
Usuários do departamento de Reparos podem imprimir na sua impressora com
%
lpr -P
repairsprinter
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.
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.
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>.