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