我正在尝试让 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 传输。
答案1
我在使用 Brother HL-L2320D 时遇到了这个问题。我做错了一些事情。这篇文章帮助:
.ppd
我太聪明了,尝试使用文件和 CUPS 过滤器直接通过 CUPS Web 界面安装打印机。 CUPS 过滤器实际上调用了 LPD 过滤器,因此两者都是必要的。我最终只安装了 Brother 提供的 Debian 软件包 (hll2320dlpr-3.2.0-1.i386.deb
和hll2320dcupswrapper-3.2.0-1.i386.deb
)。- 我需要 32 位二进制文件的支持。建议这里Ubuntu 软件包
gcc-multilib
对我有用。
至于导致静默故障模式的原因,我认为是过滤器管道的各个部分发生故障而没有正确地将故障报告回 CUPS;打印机收到空文件或无效文件,并且 CUPS 认为成功。顶级过滤器是 Perl 脚本,它们使用以下命令调用其他脚本和二进制文件系统函数或反引号,而不检查退出代码。
答案2
扩展 Shivaram Lingamneni 的答案......
从 Brother 网站安装驱动程序成功了。据我从日志中可以看出,如果您使用完美的 PCL 以外的任何方式将数据通过电线发送到 Brother 打印机,打印机将不会执行任何操作。非常令人恼火。
答案3
只是为了澄清@Shivaram Lingamneni 上面的答案:因为 Brother 打印机的 Linux 驱动程序是 i386,所以它们需要 32 位库才能运行。如果是 CentOS,只需安装glibc.i686
.