Estoy intentando que una impresora Brother HL-2240 conectada por USB funcione en Linux (Ubuntu Xenial con cups 2.1.3-4ubuntu0.3).
Subí la depuración al máximo y el registro de errores de cups me dice muy detalladamente que todo se realizó correctamente. El registro de la página simplemente enumera el trabajo como realizado correctamente.
Generé el archivo PCL manualmente, lo ejecuté /usr/lib/cups/backend/usb
en strace y dijo que había tenido éxito, sin errores aparentes en los ioctls (muchos USBDEVFS_REAPURBNDELAY
=> EAGAIN
, pero parece ser una especie de bloqueo de giro).
Pero no se imprime nada.
La impresora funciona físicamente bien. Puedo imprimir una página de prueba manteniendo presionado el botón "ir" en la impresora.
Probé esto con y sin usblp. No tengo Android-udev (una fuente pensó que podría ser relevante). Intenté reinstalar tazas.
Funcionó hace años. Creo que podría haber estado tomando Precise Pangolin en ese momento. Sí, es mucho tiempo sin imprimir, y es posible que también haya habido otras cosas relevantes en ese tiempo.
No estoy seguro de que los documentos PCL que estoy generando sean correctos. ¿Hay alguna manera de probarlos? ¿O una fuente de documentos en buen estado para esta impresora?
Pero sobre todo, ¿alguien tiene alguna idea de cómo solucionar este problema?
(Iba a publicar aquí tanto el resultado de error_log como el de strace, pero son demasiado largos. Los he examinado bastante detenidamente, pero si hay cosas extrañas que buscar, sugiérelas).
Editar para agregar:
Estoy bastante seguro de que está encontrando la impresora correcta debido a líneas en el registro como:
D [28/Nov/2017:00:06:11 -0500] [Job 19] envp[23]="DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940"
Es el mismo número de serie que en dmesg
.
Además, cuando invoco /usb directamente:
export DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940
/usr/lib/cups/backend/usb 25 dspeyer hello 1 "" < /etc/hosts
yo obtengo
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...
(Y cosas similares si uso un archivo PCL en lugar de un archivo de texto, pero más largo).
Si uso cualquier otro DEVICE_URI, recibo mensajes de error.
Y un fragmento del comando usb contiene:
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
Lo que indica con bastante claridad que los datos pasan por USB.
Respuesta1
Tuve este problema con un Brother HL-L2320D. Estaba haciendo algunas cosas incorrectamente. Esta publicación ayudó:
Re: Recomendaciones de marcas de impresoras | listas.debian.org
- Estaba siendo demasiado inteligente e intenté instalar la impresora directamente a través de la interfaz web de CUPS, usando el
.ppd
archivo y el filtro CUPS. El filtro CUPS en realidad invoca el filtro LPD, por lo que ambos son necesarios. Terminé instalando los paquetes de Debian que proporcionó Brother (hll2320dlpr-3.2.0-1.i386.deb
yhll2320dcupswrapper-3.2.0-1.i386.deb
). - Necesitaba soporte para binarios de 32 bits. La sugerenciaaquídel paquete Ubuntu
gcc-multilib
funcionó para mí.
En cuanto a las causas del modo de falla silenciosa, creo que varias piezas de la tubería del filtro fallan sin informar correctamente la falla a CUPS; a la impresora se le envía un archivo vacío o uno no válido, y CUPS ve el éxito. Los filtros de nivel superior son secuencias de comandos Perl que llaman a otras secuencias de comandos y archivos binarios con lasistemafunción o comillas invertidas, sin verificar los códigos de salida.
Respuesta2
Ampliando la respuesta de Shivaram Lingamneni...
La instalación de los controladores desde el sitio web de Brother funcionó. Lo más cerca que puedo rastrear de los registros, si envía datos por cable a una impresora Brother en algo que no sea PCL perfecto, la impresora simplemente no hará nada. Muy irritante.
Respuesta3
Solo para aclarar la respuesta anterior de @Shivaram Lingamneni: debido a que los controladores de Linux para impresoras Brother son i386, requieren bibliotecas de 32 bits para ejecutarse. En el caso de CentOS basta con instalar glibc.i686
.