O CUPS relata tudo bem, mas nada é impresso na impressora USB Brother HL-2240 series

4

Estou tentando fazer com que uma impressora Brother HL-2240 conectada via USB funcione no Linux (Ubuntu Xenial com cups 2.1.3-4ubuntu0.3).

Eu mudei a depuração para o máximo e o log de erros das xícaras me disse muito sucintamente. O log da página simplesmente lista o trabalho como bem-sucedido.

Gerei o arquivo PCL manualmente, executei /usr/lib/cups/backend/usb sob strace e ele disse que foi bem-sucedido, sem erros aparentes nos ioctls (muitos USBDEVFS_REAPURBNDELAY = > EAGAIN , mas isso parece ser algum tipo de spinlock).

Mas nada é impresso.

A impressora funciona bem fisicamente. Eu posso imprimir uma página de teste pressionando o botão "go" na impressora.

Eu tentei isso com e sem usblp. Eu não tenho android-udev (uma fonte pensou que isso poderia ser relevante). Tentei reinstalar as xícaras.

Trabalhou há séculos atrás. Eu acho que eu poderia estar no Pangolin Preciso na época. Sim, é muito tempo para passar sem imprimir, e pode ter havido outras coisas relevantes também nesse período.

Não sei ao certo se os documentos PCL que estou gerando estão corretos. Existe uma maneira de testar isso? Ou uma fonte de documentos conhecidos para esta impressora?

Mas, na maioria das vezes, alguém tem alguma ideia de como corrigir isso?

(Eu ia postar tanto o error_log quanto o strace output aqui, mas eles são muito longos. Eu os examinei bastante bem, mas se houver coisas estranhas para procurar, por favor sugira-os.)

Editar para adicionar:

Tenho certeza que está encontrando a impressora certa por causa das linhas no log, como:

D [28/Nov/2017:00:06:11 -0500] [Job 19] envp[23]="DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940"

Esse é o mesmo número de série de dmesg .

Além disso, quando eu invoco / usb diretamente:

export DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940
/usr/lib/cups/backend/usb 25 dspeyer hello 1 "" < /etc/hosts

Eu obtenho

DEBUG: Loading USB quirks from "/usr/share/cups/usb".
DEBUG: Loaded 131 quirks.
DEBUG: Printing on printer with URI: usb://Brother/HL-2240%20series?serial=B3N746940
DEBUG: libusb_get_device_list=13
STATE: +connecting-to-device
STATE: -connecting-to-device
DEBUG2: Printer found with device ID: MFG:Brother;CMD:PJL,HBP;MDL:HL-2240 series;CLS:PRINTER;CID:Brother Laser Type1; Device URI: usb://Brother/HL-2240%20series?serial=B3N746940
DEBUG: Device protocol: 2
INFO: Sending data to printer.
DEBUG: Read 195 bytes of print data...
DEBUG: Wrote 195 bytes of print data...
DEBUG: Sent 195 bytes...
DEBUG: Waiting for read thread to exit...

(E coisas semelhantes, se eu usar um arquivo PCL em vez de um arquivo de texto, mas mais.)

Se eu usar qualquer outro DEVICE_URI, recebo mensagens de erro.

E um strace no comando usb contém:

ioctl(10, USBDEVFS_GET_CAPABILITIES, 0xe4c198) = 0
write(2, "STATE: +connecting-to-device\n", 29STATE: +connecting-to-device
) = 29
ioctl(10, USBDEVFS_GETDRIVER, 0xbf941308) = -1 ENODATA (No data available)
timerfd_settime(9, TFD_TIMER_ABSTIME, {it_interval={0, 0}, it_value={3607344, 967184000}}, NULL) = 0
ioctl(10, USBDEVFS_SUBMITURB, 0xe65ea0) = 0

O que indica que dados muito claros estão passando por USB.

    
por dspeyer 28.11.2017 / 08:32

2 respostas

3

Eu tive esse problema com uma Brother HL-L2320D. Eu estava fazendo algumas coisas incorretamente. Este post ajudou:

link

  1. Eu estava sendo inteligente demais e tentando instalar a impressora diretamente por meio da interface da web do CUPS, usando o arquivo .ppd e o filtro CUPS. O filtro CUPS na verdade invoca o filtro LPD, portanto ambos são necessários. Acabei de instalar apenas os pacotes fornecidos pela Brother ( hll2320dlpr-3.2.0-1.i386.deb e hll2320dcupswrapper-3.2.0-1.i386.deb ).
  2. Eu precisava de suporte para binários de 32 bits. A sugestão aqui do pacote Ubuntu gcc-multilib funcionou para mim.

Quanto ao que causa o modo de falha silenciosa, acho que várias partes do pipeline do filtro falharam sem relatar corretamente a falha de volta ao CUPS; a impressora é enviada como um arquivo vazio ou inválido, e o CUPS vê sucesso. Os filtros de nível superior são scripts Perl que chamam outros scripts e binários com a função sistema ou backticks, sem verificar a códigos de saída.

    
por 30.11.2017 / 12:44
0

Expandindo a resposta de Shivaram Lingamneni ...

Funcionando os drivers do site da Brother. Tão perto quanto eu posso rastrear a partir dos logs, se você enviar dados pelo fio para uma impressora Brother em algo diferente de PCL perfeita, a impressora não fará nada. Muito irritante.

    
por 12.12.2017 / 09:00

Tags