CUPS 报告所有成功,但在 Brother HL-2240 系列 USB 打印机上没有打印任何内容

dsp*_*yer 7 cups

我正在尝试让 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"
Run Code Online (Sandbox Code Playgroud)

这与 中的序列号相同dmesg

另外,当我直接调用 /usb 时:

export DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940
/usr/lib/cups/backend/usb 25 dspeyer hello 1 "" < /etc/hosts
Run Code Online (Sandbox Code Playgroud)

我得到

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...
Run Code Online (Sandbox Code Playgroud)

(如果我使用 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
Run Code Online (Sandbox Code Playgroud)

这很清楚地表明数据正在通过 USB 传输。

Shi*_*eni 5

我在 Brother HL-L2320D 上遇到了这个问题。我做错了几件事。这篇文章帮助:

回复:打印机品牌推荐 | list.debian.org

  1. 我太聪明了,尝试使用.ppd文件和 CUPS 过滤器直接通过 CUPS Web 界面安装打印机。CUPS 过滤器实际上调用了 LPD 过滤器,因此两者都是必需的。我最终只安装了 Brother 提供的 Debian 软件包(hll2320dlpr-3.2.0-1.i386.debhll2320dcupswrapper-3.2.0-1.i386.deb)。
  2. 我需要支持 32 位二进制文​​件。建议在这里Ubuntu的软件包gcc-multilib为我工作。

至于导致静默故障模式的原因,我认为是过滤器管道的各个部分出现故障,而没有将故障正确报告给 CUPS;打印机被发送一个空文件或一个无效文件,并且 CUPS 看到成功。顶级过滤器是 Perl 脚本,它们使用系统函数或反引号调用其他脚本和二进制文件,而不检查退出代码。

  • 2号帮我解决了这个问题,非常感谢!如果有人在 Arch 上遇到这个问题:按照 Wiki 中的说明如何启用 multilib 存储库并安装 `multilib-devel` 组。 (2认同)