我正在尝试让 USB 连接的 Brother HL-2240 打印机在 Linux 上工作(Ubuntu Xenial with cups 2.1.3-4ubuntu0.3)。
我把调试调到最大,cups 错误日志非常详细地告诉我一切都成功了。页面日志只是将作业列为成功。
我手动生成了 PCL 文件,/usr/lib/cups/backend/usb
在 strace 下运行,它说它成功了,ioctls 中没有明显的错误(很多USBDEVFS_REAPURBNDELAY
=> EAGAIN
,但这似乎是某种自旋锁)。
但是没有打印出来。
打印机在物理上工作正常。我可以通过按住打印机上的“开始”按钮打印测试页。
我已经尝试过使用和不使用usblp。我没有 android-udev(一个认为可能相关的消息来源)。我尝试重新安装杯子。
它在很久以前就起作用了。我想我当时可能在 Precise Pangolin 上。是的,那是很长一段时间没有打印了,那个时候可能还有其他相关的事情。
我不确定我生成的 PCL 文档是否正确。有没有办法测试这些?或者这台打印机的已知良好文档的来源?
但大多数情况下,有没有人知道如何解决这个问题?
(我打算在这里同时发布 error_log 和 strace 输出,但它们太长了。我已经非常彻底地查看了它们,但如果有奇怪的东西要寻找,请提出建议。)
编辑添加:
我很确定它正在找到正确的打印机,因为日志中的行如下:
D [28/Nov/2017:00:06:11 -0500] [Job 19] envp[23]="DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940"
这与中的序列号相同dmesg
。
另外,当我直接调用 /usb 时:
export DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940
/usr/lib/cups/backend/usb 25 dspeyer hello 1 "" < /etc/hosts
我明白了
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...
(如果我使用 PCL 文件而不是文本文件,类似的事情,但更长。)
如果我使用任何其他 DEVICE_URI,我会收到错误消息。
usb 命令上的 strace 包含:
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
这非常清楚地表明数据正在通过 USB 传输。