CUPSはすべてが成功したと報告していますが、Brother HL-2240シリーズUSBプリンタでは何も印刷しません。

CUPSはすべてが成功したと報告していますが、Brother HL-2240シリーズUSBプリンタでは何も印刷しません。

USB接続のBrother HL-2240プリンタをLinux(カップ2.1.3-4ubuntu0.3を含むUbuntu Xenial)で動作させようとしています。

デバッグを最大に設定し、カップエラーログにすべてが成功したことを詳しく説明しました。ページログには、操作が成功したものだけが一覧表示されます。

PCLファイルを手動で作成し、/usr/lib/cups/backend/usbstraceで実行しましたが、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

  1. .ppd私はとても賢いので、ファイルとCUPSフィルタを使用してCUPS Webインターフェイスを介して直接プリンタをインストールしようとしました。 CUPSフィルタは実際にLPDフィルタを呼び出すので、両方が必要です。結局、Brother(hll2320dlpr-3.2.0-1.i386.debおよび)から提供されたDebianパッケージのみがインストールされますhll2320dcupswrapper-3.2.0-1.i386.deb
  2. 32ビットバイナリのサポートが必要です。提案ここUbuntuパッケージはgcc-multilib私にとって効果的です。

自動失敗モードの原因は、フィルタパイプラインのさまざまな部分が失敗をCUPSに正しく報告せずに失敗するためだと思います。プリンタは空または無効なファイルを受け取り、CUPSはそれを成功したと見なします。トップレベルのフィルタは、次を使用して他のスクリプトとバイナリを呼び出すPerlスクリプトです。システム終了コードを確認せずに関数またはバックティックを使用します。

答え2

Shivaram Lingamneniの回答を拡張...

Brother Webサイトからドライバを正常にインストールしました。ログからわかる限り、完全なPCL以外のものを使用して有線経由でBrotherプリンタにデータを転送すると、プリンタは何もしません。とても迷惑です。

答え3

上記の@Shivaram Lingamneniの答えを明確にするために:Brotherプリンタ用のLinuxドライバはi386なので、実行するには32ビットライブラリが必要です。 CentOSの場合は、インストールしてくださいglibc.i686

関連情報