USB 接続の Brother HL-2240 プリンターを Linux (Ubuntu Xenial with cups 2.1.3-4ubuntu0.3) で動作させようとしています。
デバッグを最大にすると、cups エラー ログにはすべて成功したことが非常に詳細に表示されます。ページ ログには、ジョブが成功したとだけ表示されます。
PCL ファイルを手動で生成し、/usr/lib/cups/backend/usb
strace で実行したところ、ioctl に明らかなエラーはなく ( USBDEVFS_REAPURBNDELAY
=>がたくさんありますEAGAIN
が、これは何らかのスピンロックのようです)、成功したと表示されました。
しかし何も印刷されません。
プリンターは物理的には正常に動作します。プリンターの「実行」ボタンを押し続けると、テスト ページを印刷できます。
私はこれを usblp ありとなしで試しました。android-udev を持っていません (1 つのソースでは関連があると考えられていました)。cups を再インストールしてみました。
ずいぶん前までは機能していました。当時は 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 でこの問題が発生しました。いくつかの点を間違っていました。この投稿が役に立ちました:
Re: プリンタブランドの推奨 | lists.debian.org
- 私は賢くなりすぎて、ファイルと CUPS フィルターを使用して、CUPS Web インターフェイスから直接プリンターをインストールしようとしました
.ppd
。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 の Web サイトからドライバーをインストールすると、うまくいきました。ログから追跡できる限りでは、完全な PCL 以外の形式で Brother プリンターにデータを送信すると、プリンターは何も実行しません。非常にイライラします。
答え3
上記の @Shivaram Lingamneni の回答を明確にするために、Brother プリンターの Linux ドライバーは i386 であるため、実行するには 32 ビット ライブラリが必要です。CentOS の場合は、 をインストールするだけで十分ですglibc.i686
。