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 ao máximo e o log de erros do cups me informa 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
o 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 fisicamente bem. Posso imprimir uma página de teste mantendo pressionado o botão "ir" da impressora.
Eu tentei isso com e sem usblp. Não tenho Android-udev (uma fonte achou que poderia ser relevante). Tentei reinstalar os copos.
Funcionou há muito tempo. Acho que talvez estivesse no Precise Pangolin na época. Sim, é muito tempo sem imprimir, e pode ter havido outras coisas relevantes nesse período também.
Não tenho certeza se os documentos PCL que estou gerando estão corretos. Existe uma maneira de testá-los? Ou uma fonte de documentos em bom estado para esta impressora?
Mas principalmente, alguém tem alguma idéia de como consertar isso?
(Eu ia postar a saída error_log e strace aqui, mas eles são muito longos. Eu os examinei bem, 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 do 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.
Responder1
Eu tive esse problema com um Brother HL-L2320D. Eu estava fazendo algumas coisas incorretamente. Esta postagem ajudou:
Re: Recomendações de marcas de impressoras | listas.debian.org
- Eu estava sendo muito esperto e tentando instalar a impressora diretamente pela interface web do CUPS, usando o
.ppd
arquivo e o filtro CUPS. O filtro CUPS, na verdade, invoca o filtro LPD, portanto ambos são necessários. Acabei instalando apenas os pacotes Debian fornecidos pela Brother (hll2320dlpr-3.2.0-1.i386.deb
ehll2320dcupswrapper-3.2.0-1.i386.deb
). - Eu precisava de suporte para binários de 32 bits. A sugestãoaquido 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 estão 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 osistemafunção ou backticks, sem verificar os códigos de saída.
Responder2
Expandindo a resposta de Shivaram Lingamneni...
A instalação dos drivers do site da Brother funcionou. Pelo que posso rastrear nos registros, se você enviar dados para uma impressora Brother em qualquer coisa que não seja PCL perfeito, a impressora simplesmente não fará nada. Muito irritante.
Responder3
Apenas para esclarecer a resposta de @Shivaram Lingamneni acima: como os drivers Linux para impressoras Brother são i386, eles exigem bibliotecas de 32 bits para serem executados. No caso do CentOS basta instalar o glibc.i686
.