我正在尝试让 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 传输。
我在 Brother HL-L2320D 上遇到了这个问题。我做错了一些事情。这篇文章有帮助:
回复:打印机品牌推荐 | list.debian.org
.ppd
文件和 CUPS 过滤器。CUPS 过滤器实际上调用了 LPD 过滤器,因此两者都是必需的。我最终只安装了兄弟提供的 Debian 软件包(hll2320dlpr-3.2.0-1.i386.deb
和hll2320dcupswrapper-3.2.0-1.i386.deb
)。gcc-multilib
对我有用。至于导致静默故障模式的原因,我认为是过滤器管道的各个部分发生故障,而没有正确地将故障报告给 CUPS;打印机收到空文件或无效文件,CUPS 看到成功。顶级过滤器是 Perl 脚本,它们使用系统函数或反引号调用其他脚本和二进制文件,而不检查退出代码。
扩展 Shivaram Lingamneni 的答案......
从 Brother 网站安装驱动程序有效。我可以从日志中追踪到,如果您将数据通过线路发送到 Brother 打印机,而不是完美的 PCL,打印机将什么也不做。很烦人。
只是为了澄清@Shivaram Lingamneni 上面的回答:因为 Brother 打印机的 Linux 驱动程序是 i386,所以它们需要 32 位库才能运行。在 CentOS 的情况下,安装
glibc.i686
.