USB接続のBrother HL-2240プリンタをLinux(カップ2.1.3-4ubuntu0.3を含むUbuntu Xenial)で動作させようとしています。
デバッグを最大に設定し、カップエラーログにすべてが成功したことを詳しく説明しました。ページログには、操作が成功したものだけが一覧表示されます。
PCLファイルを手動で作成し、/usr/lib/cups/backend/usb
straceで実行しましたが、ioctlは明らかなエラーなしで成功したとマークされました(多くの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を使用すると、この問題が発生しました。私は何か間違っていた。この文書は次の点に役立ちます。
回答:プリンタブランドの推奨事項| list.debian.org
.ppd
私はとても賢いので、ファイルとCUPSフィルタを使用してCUPS Webインターフェイスを介して直接プリンタをインストールしようとしました。 CUPSフィルタは実際にLPDフィルタを呼び出すので、両方が必要です。結局、Brother(hll2320dlpr-3.2.0-1.i386.deb
および)から提供されたDebianパッケージのみがインストールされます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
。