Capítulo 6. Impressão

Índice
6.1. Ativando o dæmon de impressão
6.2. Configurando o /etc/printcap
6.3. Configurando o Ghostscript
6.4. Comandos úteis para a impressão
6.5. Impressão remota

Neste capítulo é descrita uma configuração simples para uma impressora utilizando, a título de exemplo, uma HP Deskjet 690C conectada à primeira porta paralela. Em um primeiro momento é configurada a impressora de documentos em modo texto. Depois, a impressão de documentos PostScript com o programa Ghostscript.

6.1. Ativando o dæmon de impressão

Ao fim da instalação ainda não será possível imprimir porque o dæmon de impressão não está habilitado. Para ativá-lo é suficiente editar o arquivo /etc/rc.conf, mudando a linha

lpd=NO    

para

lpd=YES    

Para verificar se lpd está ativo, executar o seguinte comando:

# ps ax | grep lpd
  179 ??  Is     0:00.01 lpd     

Se o comando precedente não produz um output, quer dizer que o lpd não está ativo. Nesse caso, pode-se ativá-lo manualmente com o seguinte comando:

# lpd -s    

Efetuemos agora uma prova de impressão, usando o programa lptest.

# lptest 20 10 > /dev/lpt0    

O output dever-se-ia apresentar com alinhamento em colunas. Se ao invés disso obtém-se um efeito de "escadinhas", provavelmente a impressora está configurada para utilizar um caracter <CR> (carriage return, ASCII 13) para voltar ao início da linha, e um sucessivo caracter <LF> (line feed, ASCII 10) para avançar uma linha, enquanto o NetBSD (e o Unix em geral) usa somente o caracter <LF>. Pode-se resolver este problema:

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

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. Com esse tipo de impressora (e a HP Deskjet 690C é uma delas) basta usar o driver polled (note-se que também é possível compilar um kernel indicando que lpd deve funcionar em modo polled).

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
    

Nesse ponto é necessário criar o filtro de impressão lpfilter. A sua única função é configurar a impressora, eliminando o já citado problema das escadinhas, antes de enviar o texto para impressão. Para a Deskjet 690C a seqüência para enviar é "ESC&k2G". Depois de ter criado o filtro é preciso fazê-lo funcionar.

# cd /usr/local/libexec
# chmod 755 lpfilter*
    

Agora pode-se tentar executar novamente o programa lptest. Dessa vez, utilizando-se da spooler lpd.

# lptest 20 10 | lpr -h    

lpr é um programa de impressão que utiliza a spooler para enviar os dados para a impressora (a opção -h serve para eliminar a impressão da página de cabeçalho).

Se tudo funcionou bem, as escadinhas foram eliminadas. Este não é o único método para eliminar o problema das escadinhas. Podem-se utilizar muitos tipos de filtros, inclusive programas escritos em C. Mas esta solução tem a vantagem de ser muito simples.

6.3. Configurando o Ghostscript

Agora que a impressão básica funciona, pode-se pensar em configurar a impressão de arquivos em formato PostScript. Uma vez que a impressora utilizada no exemplo não suporta nativamente a impressão de arquivos PostScript, é necessário usar um programa que converta o PostScript para um formato compreensível para a impressora. Este programa é o Ghostscript, que se pode instalar a partir da coleção de pacotes (ver Capítulo 8). Nesta seção será mostrado um exemplo de configuração para o uso do Ghostscript com a impressora HP Deskjet 690C. No exemplo é criado um segundo identificador para a impressora. Esse novo nome utiliza um filtro diferente, capaz de invocar o Ghostscript para a impressão dos arquivos PostScript. Portanto, os documentos de texto serão impressos na impressora lp, enquanto os documentos PostScript se-lo-ão na lps.

Como em muitas outras situações, a solução não é a única possível. Por exemplo, poder-se-ia usar um único filtro de impressão capaz de reconhecer o tipo de arquivo que está sendo impresso e de agir de acordo com isso. Com esta abordagem basta definir uma só impressora, um só diretório de spool e um único filtro, ao preço de uma maior complexidade do próprio filtro. Enfim, existem programas capazes de instalar filtros "inteligentes" e de simplificar muito a fase de configuração. Veja-se, por exemplo, o magicfilter na coleção de pacotes.

O arquivo /etc/printcap é modificado assim:

Note-se, em particular, a opção mx#0, que elimina as restrições de tamanho dos arquivos de output. Esta opção é necessária porque os arquivos PostScript são habitualmente de notáveis dimensões. Ademais, a opção if faz referência ao novo filtro, que se chama lpfilter-ps.

Agora podemos utilizar dois nomes de impressora no sistema: lp e ps que, na realidade, fazem referência à mesma impressora física mas utilizam filtros e diretórios diferentes. Para imprimir um arquivo Postscript, naturalmente, não basta definir uma expressão no /etc/printcap. É necessário também instalar o programa Ghostscript.

Ainda precisam ser criados o diretório da spool e o filtro.

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

O filtro para a impressão em formato PostScript é mais elaborado. O arquivo a ser impresso alimenta o intérprete que o transforma em uma seqüência de comandos adaptada à impressora. Desse modo transforma-se uma impressora econômica de jato de tinta em uma potente impressora PostScript. Para uma descrição dos comandos do filtro veja-se a documentação do Ghostscript. A chave do processo de impressão é a escolha do driver da impressora usado pelo Ghostscript, que no nosso caso é a cdj550.

6.4. Comandos úteis para a impressão

Nesta seção estão apresentados alguns comandos úteis para a gerenciamento da impressão típicos do ambiente BSD. Além dos já citados lpr e lpd, temos:

6.5. Impressão remota

É possível configurar o sistema de impressão de tal modo que possamos imprimir em uma impressora ligada a um host remoto. Suponhamos, por exemplo, trabalhar no host wotan e querer imprimir na impressora conectada ao host loge. Seja o arquivo /etc/printcap de loge aquele do Exemplo 6-3. A partir de wotan, portanto, poderemos imprimir até arquivos PostScript, utilizando o Ghostscript instalado em loge.

A primeira operação a cumprir é habilitar em loge as ordens de impressão provenientes do host wotan. Para fazer isso é necessário inserir o nome do host wotan no arquivo /etc/hosts.lpd de loge. O formato do arquivo é muito simples: em cada linha aparece o nome de um host a habilitar.

Depois é necessário configurar /etc/printcap em wotan, de modo a enviar as ordens de impressão para loge. Por exemplo:

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

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

Há quatro diferenças entre estas configurações e as do Exemplo 6-3.

  1. A definição de "lp" está vazia.

  2. A expressão "rm" define o nome do host a que está ligada a impressora.

  3. A expressão "rp" especifica o nome da impressora remota no host remoto.

  4. Não é necessário especificar filtros de input porque são utilizados os filtros definidos em loge.

Uma vez efetuadas as operações precedentes, os trabalhos de impressão de wotan são enviados automaticamente ao host loge.