Cups

CUPS 報告全部成功,但 Brother HL-2240 系列 USB 列印機無任何列印

  • July 20, 2020

我正在嘗試讓 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

  1. 我太聰明了,試圖通過 CUPS Web 界面直接安裝列印機,使用.ppd文件和 CUPS 過濾器。CUPS 過濾器實際上呼叫了 LPD 過濾器,因此兩者都是必需的。我最終只安裝了兄弟提供的 Debian 軟體包(hll2320dlpr-3.2.0-1.i386.debhll2320dcupswrapper-3.2.0-1.i386.deb)。
  2. 我需要對 32 位二進製文件的支持。Ubuntu軟體包建議gcc-multilib對我有用。

至於導致靜默故障模式的原因,我認為是過濾器管道的各個部分發生故障而沒有正確地將故障報告給 CUPS;列印機收到空文件或無效文件,CUPS 看到成功。頂級過濾器是 Perl 腳本,它們使用系統函式或反引號呼叫其他腳本和二進製文件,而不檢查退出程式碼。

引用自:https://unix.stackexchange.com/questions/407432