11.7. Solução de problemas

As seções a seguir abordam alguns dos problemas mais encontrados em relação a hardware e software de impressora, bem como formas de solucionar ou superar esses problemas.

11.7.1. Impressoras sem suporte de linguagem de impressora padrão

As impressoras que não suportam nenhuma linguagem de impressora comum e só podem ser endereçadas com seqüências de controle especiais são chamadas de impressoras GDI. Essas impressoras só funcionam com as versões do sistema operacional para as quais o fabricante oferece driver. GDI é uma interface de programação desenvolvida pela Microsoft para dispositivos gráficos. O verdadeiro problema não é a interface de programação, mas o fato de que as impressoras GDI só podem ser endereçadas com a linguagem de impressora proprietária do respectivo modelo de impressora.

Algumas impressoras podem ser modificadas para funcionar no modo GDI ou em uma das linguagens de impressora padrão. Alguns fabricantes oferecem drivers proprietários para suas impressoras GDI. A desvantagem dos drivers de impressora proprietários é que não há garantia de que vão funcionar com o sistema de impressão instalado e de que são adequados para as diferentes plataformas de hardware. Em contraste, impressoras que suportam uma linguagem de impressora padrão não dependem de uma versão do sistema de impressão especial ou de plataforma de hardware especial.

Em vez de desperdiçar tempo tentando fazer um driver Linux proprietário funcionar, pode ser mais eficaz comprar uma impressora suportada. Isso solucionaria o problema do driver de uma vez por todas, eliminando a necessidade de instalar e configurar software de driver especial e obter atualizações do driver eventualmente necessárias devido a novos avanços no sistema de impressão.

11.7.2. Nenhum arquivo PPD adequado disponível para impressora PostScript

Se o pacote manufacturer-PPDs não contiver qualquer arquivo PPD adequado para uma impressora PostScript, será possível usar o arquivo PPD do CD do driver do fabricante da impressora ou fazer download de um arquivo PPD adequado da página da Web do fabricante.

Se o arquivo PPD for fornecido como arquivo compactado (.zip) ou arquivo compactado de auto-extração (.exe), faça a descompactação com unzip. Primeiro, reveja os termos de licença do arquivo PPD. Use o utilitário cupstestppd para verificar se o arquivo PPD é compatível com a “Especificação de Formato do Arquivo de Descrição de Impressora Adobe PostScript, versão 4.3”. Se o utilitário retornar “FAIL”, os erros dos arquivos PPD são sérios e provavelmente causarão grandes problemas. Os problemas reportados pelo cupstestppd devem ser eliminados. Se necessário, peça o arquivo PPD adequado ao fabricante da impressora.

11.7.3. Portas paralelas

A abordagem mais segura é conectar a impressora diretamente à primeira porta paralela e selecionar as configurações de porta paralela no BIOS:

  • Endereço de E/S: 378 (hexadecimal)

  • Interrupção: irrelevante

  • Modo: Normal, SPP ou Output Only

  • DMA: desabilitado

Se a impressora não puder ser endereçada na porta paralela apesar dessas configurações, digite o endereço de E/S explicitamente de acordo com a configuração no BIOS no formato 0x378 em /etc/modprobe.conf. Se houver duas portas paralelas definidas para os endereços de E/S 378 e 278 (hexadecimal), digite-os no formato 0x378,0x278.

Se a interrupção 7 estiver livre, poderá ser ativada com a entrada mostrada no Exemplo 11.1, “/etc/modprobe.conf: Modo de interrupção para a primeira porta paralela”. Antes de ativar o modo de interrupção, verifique o arquivo /proc/interrupts para ver quais interrupções já estão sendo usadas. Somente as interrupções usadas atualmente são exibidas. Isso pode mudar dependendo dos componentes de hardware ativos. A interrupção da porta paralela não deve ser usada por outro dispositivo. Se não tiver certeza, use o modo de polling com irq=none.

Exemplo 11.1. /etc/modprobe.conf: Modo de interrupção para a primeira porta paralela

alias parport_lowlevel parport_pc
options parport_pc io=0x378 irq=7

11.7.4. Conexões da impressora de rede

Identificação de problemas de rede

Conecte a impressora diretamente ao computador. Para fins de teste, configure-a como impressora local. Se isso funcionar, o problema está na rede.

Verificando a rede TCP/IP

A rede TCP/IP e a resolução de nomes devem ser funcionais.

Verificando um lpd remoto

Use o comando a seguir para testar o estabelecimento de uma conexão TCP com lpd (porta 515) no host.

netcat -z host 515 && echo ok || echo failed

Se a conexão com lpd não for estabelecida, o lpd pode não estar ativo ou pode haver problemas básicos de rede.

Como usuário root, use o seguinte comando para consultar um relatório de status (possivelmente muito longo) sobre a fila no host remoto, considerando que o respectivo lpd esteja ativo e o host aceite consultas:

echo -e "\004queue" \
  | netcat -w 2 -p 722 host 515

Se o lpd não responder, ele pode não estar ativo ou pode haver problemas básicos de rede. Se o lpd responder, a resposta deve mostrar por que não é possível imprimir na fila do host. Se você receber uma resposta como a do Exemplo 11.2, “Mensagem de erro do lpd, o problema está sendo causado pelo lpd remoto.

Exemplo 11.2. Mensagem de erro do lpd

lpd: your host does not have line printer access
lpd: queue does not exist
printer: spooling disabled
printer: printing disabled
Verificando um cupsd remoto

Por padrão, o servidor de rede CUPS deve transmitir suas filas a cada 30 segundos na porta UDP 631. Por isso, o seguinte comando pode ser usado para testar a existência de um servidor de rede CUPS na rede.

netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID

Se existir um servidor de rede CUPS de transmissão, a saída aparecerá conforme mostrado no Exemplo 11.3, “Transmissão do servidor de rede CUPS”.

Exemplo 11.3. Transmissão do servidor de rede CUPS

ipp://host.domain:631/printers/queue

Use o comando a seguir para testar o estabelecimento de uma conexão TCP com cupsd (porta 631) no host.

netcat -z host 631 && echo ok || echo failed

Se a conexão com cupsd não for estabelecida, o cupsd pode não estar ativo ou existem problemas básicos de rede. lpstat -h host -l -t retorna um relatório de status (possivelmente muito longo) para todas as filas do host, desde que o respectivo cupsd esteja ativo e o host aceite consultas.

O próximo comando pode ser usado para testar se a fila do host aceita uma tarefa de impressão consistindo em um único caractere de retorno de carro. Nada será impresso. Possivelmente, será ejetada uma página em branco.

 
echo -en "\r" \ 
  | lp -d fila -h host 
Solução de problemas da impressora de rede ou da caixa do servidor de impressão

Algumas vezes, spoolers executados na caixa do servidor de impressão causam problemas quando precisam lidar com muitas tarefas de impressão. Como isso é causado pelo spooler nessa caixa, não há solução para o problema. Como paliativo, desvie o spooler na caixa do servidor de impressão endereçando a impressora conectada à caixa diretamente por meio do soquete TCP. Consulte a Seção 11.4.2, “Impressoras de rede”.

Dessa forma, a caixa do servidor de impressão é reduzida a um conversor entre as várias formas de transferência de dados (conexão de rede TCP/IP e impressora local). Para usar esse método, você precisa conhecer a porta TCP da caixa do servidor de impressão. Se a impressora estiver conectada à caixa do servidor de impressão e ligada, a porta TCP poderá, geralmente, ser determinada com o utilitário nmap do pacote nmap depois que essa caixa for ativada. Por exemplo, nmapendereço IP pode resultar na seguinte saída para a caixa do servidor de impressão:

Port       State       Service
23/tcp     open        telnet
80/tcp     open        http
515/tcp    open        printer
631/tcp    open        cups
9100/tcp   open        jetdirect

Essa saída indica que a impressora conectada à caixa do servidor de impressão pode ser endereçada via soquete TCP na porta 9100. Por padrão, nmap verifica somente algumas portas mais conhecidas listadas em /usr/share/nmap/nmap-services. Para verificar todas as portas possíveis, use o comando nmap-pporta_de_origem-porta_de_destino endereço-IP. O processo pode demorar. Para obter mais informações, consulte a página de manual nmap.

Digite um comando como

 
echo -en "\rHello\r\f" | netcat -w 1 porta endereço-IP arquivo 
cat | netcat -w 1 porta endereço-IP 

para enviar strings de caracteres ou arquivos diretamente à respectiva porta para testar se a impressora pode ser endereçada dessa porta.

11.7.5. Defeitos na impressão sem mensagem de erro

Para o sistema de impressão, a tarefa de impressão é concluída quando o back end do CUPS finaliza a transferência de dados ao destinatário (impressora). Se houver falha no processamento posterior no destinatário (por exemplo, se a impressora não imprimir seus dados específicos), o sistema de impressão não notará. Se a impressora não imprimir seus dados específicos, selecione outro arquivo PPD mais adequado à impressora.

11.7.6. Filas desabilitadas

Se a transferência de dados para o destinatário falhar completamente após várias tentativas, o back end do CUPS, como usb ou soquete, reportará um erro ao sistema de impressão (ao cupsd). O back end decide se e quantas tentativas devem ser feitas até que a transferência de dados seja reportada como impossível. Como tentativas posteriores podem ser inúteis, o cupsd desabilita a impressão da fila respectiva. Após eliminar a causa do problema, o administrador do sistema deve reabilitar a impressão com o comando /usr/bin/enable.

11.7.7. Navegação no CUPS: apagando tarefas de impressão

Se um servidor de rede CUPS transmitir suas filas aos hosts de clientes via navegação e um cupsd local adequado estiver ativo nos hosts de clientes, o cupsd cliente aceitará tarefas de impressão de aplicativos e as encaminhará para o cupsd no servidor. Quando o cupsd aceita uma tarefa de impressão, esta recebe um novo número. Portanto, o número da tarefa no host cliente é diferente do número da tarefa no servidor. Como geralmente a tarefa de impressão é encaminhada de imediato, não pode ser apagada com o número de tarefa do host cliente, porque o cupsd cliente considera a tarefa como concluída assim que ela é encaminhada ao cupsd do servidor.

Para apagar a tarefa de impressão no servidor, use um comando como lpstat -h print-server -o para determinar o número da tarefa no servidor, contanto que o servidor não tenha concluído a tarefa de impressão (isto é, enviado para a impressora). Usando este número, a tarefa de impressão pode ser apagada no servidor:

 
cancel -h servidor-de-impressão fila-nr_tarefa

11.7.8. Tarefas de impressão defeituosas e erros de transferência de dados

As tarefas de impressão permanecerão nas filas e a impressão recomeçará se você desligar e ligar a impressora ou desligar e reinicializar o computador durante o processo de impressão. As tarefas de impressão defeituosas devem ser removidas da fila com cancel.

Se a tarefa de impressão apresentar defeito ou se ocorrer um erro na comunicação entre o host e a impressora, a impressora imprimirá várias folhas de papel com caracteres ininteligíveis porque não conseguiu processar os dados corretamente. Para solucionar esse problema, siga este procedimento:

  1. Para interromper a impressão, remova todo o papel das bandejas da impressora jato de tinta ou laser. Impressoras de alta qualidade têm um botão de cancelamento da impressão.

  2. A tarefa de impressão pode ainda estar na fila, já que as tarefas são removidas somente depois de enviadas completamente à impressora. Use lpstat -o ou lpstat -h servidor-de-impressão -o para verificar a fila que está sendo impressa. Apague a tarefa com cancelfila-númerodatarefa ou cancel -hservidor-de-impressão fila-númerodatarefa.

  3. Alguns dados podem ainda ser transferidos à impressora mesmo que a tarefa seja apagada da fila. Verifique se há um processo back end do CUPS em execução para a fila respectiva e termine-o. Por exemplo, para uma impressora conectada à porta paralela, o comando fuser -k /dev/lp0 pode ser usado para terminar todos os processos que ainda estão acessando a impressora (mais precisamente: a porta paralela).

  4. Reinicialize a impressora completamente deixando-a desligada por um tempo. Em seguida, insira o papel e ligue a impressora.

11.7.9. Depuração do sistema de impressão do CUPS

Use o seguinte procedimento genérico para localizar problemas no sistema de impressão do CUPS:

  1. Defina LogLevel debug em /etc/cups/cupsd.conf.

  2. Pare o cupsd.

  3. Remova /var/log/cups/error_log* para não precisar procurar em arquivos de registro muito grandes.

  4. Inicie o cupsd.

  5. Repita a ação que causou o problema.

  6. Verifique as mensagens em /var/log/cups/error_log* para identificar a causa do problema.

11.7.10. Mais informações

Soluções para vários problemas específicos são apresentadas no Banco de Dados de Suporte do SUSE (http://portal.suse.com/). Localize os artigos relevantes com pesquisas de palavras-chave.