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.
Eu tive esse problema com um irmão HL-L2320D. Eu estava fazendo algumas coisas incorretamente. Esta postagem ajudou:
Re: Recomendações de marcas de impressoras | lists.debian.org
.ppd
arquivo e o filtro CUPS. O filtro CUPS realmente invoca o filtro LPD, então ambos são necessários. Acabei apenas instalando os pacotes Debian fornecidos pela Brother (hll2320dlpr-3.2.0-1.i386.deb
ehll2320dcupswrapper-3.2.0-1.i386.deb
).gcc-multilib
funcionou para mim.Quanto ao que causa o modo de falha silenciosa, acho que são várias partes do pipeline de filtro falhando sem relatar corretamente a falha ao CUPS; a impressora recebe um arquivo vazio ou inválido e o CUPS obtém sucesso. Os filtros de nível superior são scripts Perl que chamam outros scripts e binários com a função do sistema ou backticks, sem verificar os códigos de saída.
Expandindo a resposta de Shivaram Lingamneni...
A instalação dos drivers do site da Brother funcionou. Tanto quanto eu posso rastrear a partir dos logs, se você enviar dados para uma impressora Brother em algo diferente de PCL perfeito, a impressora simplesmente não fará nada. Muito irritante.
Apenas para esclarecer a resposta de @Shivaram Lingamneni acima: como os drivers Linux para impressoras Brother são i386, eles exigem que as bibliotecas de 32 bits sejam executadas. No caso do CentOS basta instalar
glibc.i686
.