Estou tentando fazer com que uma impressora Brother HL-2240 conectada por USB funcione no Linux (Ubuntu Xenial com cups 2.1.3-4ubuntu0.3).
Aumentei a depuração para o máximo e o log de erros do cups me disse muito detalhadamente que tudo foi bem-sucedido. 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 disse que foi bem-sucedido, sem erros aparentes nos ioctls (muitos USBDEVFS_REAPURBNDELAY
=> EAGAIN
, mas parece ser algum tipo de spinlock).
Mas nada imprime.
A impressora funciona fisicamente bem. Posso imprimir uma página de teste pressionando o botão "ir" na impressora.
Eu tentei isso com e sem usblp. Eu não tenho android-udev (uma fonte pensou que poderia ser relevante). Eu tentei reinstalar os copos.
Funcionou há séculos. Acho que poderia estar no Precise Pangolin na época. Sim, é muito tempo sem imprimir, e pode ter havido outras coisas relevantes nesse tempo também.
Não tenho certeza se os documentos PCL que estou gerando estão corretos. Existe uma maneira de testar isso? Ou uma fonte de documentos em boas condições para esta impressora?
Mas principalmente, alguém tem alguma ideia de como consertar isso?
(Eu ia postar o error_log e a saída do strace aqui, mas eles são muito longos. Eu os examinei bastante, mas se houver coisas estranhas para procurar, sugira-as.)
Edite para adicionar:
Tenho certeza de que está encontrando a impressora certa por causa de 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 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 recebo
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 longo.)
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 claramente que os dados estão passando por USB.