Debian ARM と Brother DCP195C と CUPS

Debian ARM と Brother DCP195C と CUPS

DCP 195C プリンター (Brother) に LAN 経由でアクセスしたいと考えています。このために、Raspberry Pi を購入し、CUPS をインストールしました。CUPS は正常に動作し、他のすべてもスムーズに動作しています。問題は、Brother が提供しているドライバー (x86 および x64 のみ) を Pi にインストールできないことです。Pi にドライバーをインストールするために見逃したオプションはありますか?

答え1

要約: Linuxドライバからppdファイルを抽出する必要があります

長さ:

初め

  • Goto Brothers DriverのWebサイトにアクセスし、DCP195を検索してください。http://support.brother.com
  • 「Linux debバージョンをダウンロード」CUPSwrapper プリンター ドライバー (deb パッケージ)
  • 圧縮ツールで deb ファイルを開き、パスをたどって「dcp195ccupswrapper-1.1.3-1.i386/opt/brother/Printers/dcp195c/cupswrapper」まで進みます。
  • 「brother_dcp195c_printer_en.ppd」ファイルを抽出します。

2番

  • https://192.168.1.2:631/admin [IPをpiのIPに置き換えてください]でcupsのウェブインターフェースを開きます
  • 「プリンターの追加」をクリックし、「Brother DCP-195C (Brother DCP-195C)」を選択して「続行」を押します
  • 必要に応じて今後の情報を編集し、「プリンターの共有」をチェックして「続行」を押します。
  • 「またはPPDファイルを提供する」で、抽出した「brother_dcp195c_printer_en.ppd」ファイルを参照してアップロードします。次の手順に従います...完了

その後、プリンターは使用可能になりましたが、エラーが発生していました: 「ファイル "/usr/lib/cups/filter/brlpdwrapperdcp195c" は利用できません」 Ubuntu ラップトップにドライバーをインストールしたので、ラップトップの /usr/lib/cups/filter/ にあるファイルを pi にコピーするだけで済みました。

その後、私のノートパソコンはプリンターを見つけることができました

答え2

命令セットが異なっていても、エミュレーションによって Raspberry Pi 上で i386 ドライバーを動作させることができます。非常に遅く、プリントアウトが届くまで数分かかりますが、動作します。

このフォーラムの投稿でヒントを見つけました: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=15526&start=25#p708038

ステップ1: Brotherのマニュアルの指示に従ってドライバーをインストールします

/opt/brother/Printers/dcp195c/lpdフィルタ バイナリのようなディレクトリが必要です。このバイナリは、同じディレクトリ内のすぐ隣にあるシェル スクリプトbrdcp195cfilterによって呼び出されます。filterdcp195c

現在はインストール スクリプトが提供されていると思いますが、私はそれなしで実行しました。事前にインストールする必要があるものに関する指示がどこかにあります。

ステップ2: i386エミュレーションを動作させる

これは、以下の手順に従います。https://wiki.debian.org/QemuUserEmulation

ステップ2の最後に、通常のバイナリと同じようにi386バイナリを実行できるはずです。ではps ax、次のように表示されます。

Qemuをインストールする

パッケージqemubinfmt-supportおよびをインストールしますqemu-user-static

実行してupdate-binfmts --display、サポートされているバイナリ形式を確認します。Raspbian および Debian では、自動的に有効になるはずです。

x86サポートライブラリをインストールする

Raspbian では、次のような行を追加します/etc/apt/sources.list:

## Debian i386
deb [arch=i386] http://http.debian.net/debian stable main contrib non-free

別の Debian リポジトリでも構いません。

Raspbian リポジトリには x86 バイナリがないため、[arch=armhf]で始まる既存の行に 1 行追加しますdeb。 で始まる行はdeb-srcそのままにしておくことができます。

Raspbian に、i386 パッケージを含むマルチアーキテクチャ システムが必要であることを伝え、i386 libc を取得します。このupdate手順を実行するには、パッケージ管理用の Debian GPG キーをインポートして信頼する必要があります。

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386

brdcp195cfilterこの時点で、ドライバーに付属するバイナリを実行できるはずです。

$ ./brdcp195cfilter 
ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
Error: invalid option !!

この出力が表示されれば、成功です。このError: invalid option !!行はbrdcp195cfilter、引数を渡す必要があることを警告しています。

オプション:ld.soエラーメッセージを削除する

Raspbian は、ライブラリをすべてのプロセスに/etc/ld.so.preloadプリロードするために使用しますlibarmmem。ライブラリは、一部の高価なメモリ ルーチンを ARM アセンブリで記述されたより高速なルーチンに置き換えますが、Raspbian を実行するために厳密に必要というわけではありません。

この警告は無視しても問題ありませんが、 からその行を削除またはコメントアウトしても問題ありません/etc/ld.so.preload。無効にされていない場合は、CUPS エラー ログに警告が表示されます。

ステップ3: CUPSで動作させる

Brother の Web サイトの指示に従って CUPS をインストールする必要があります。

不安定なUSB接続

私の Raspberry では、dmesgログにはある時点で次の行が交互に表示されていました。

[58981.586842] usblp0: removed
[59222.794260] usblp 1-1.3:1.0: usblp0: USB Bidirectional printer dev 8 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0222

私の場合、この問題を修正したのは、(CUPS Web インターフェイス) にアクセスしlocalhost:631、「プリンター」セクションでプリンターを変更して、デバイスではなく CUPS が認識する USB デバイスを使用するようにしたことですusb://dev/usb/lp0

プリンターが通常の速度でデータを受信できるようにします

brdcp195cfilter印刷プロセスにおけるステップで、巨大な入力ビットマップを受け取り、それを後でプリンタ デバイスにパイプされるものに変換します。ページ上部の単純な「Hello world」メッセージの入力サイズを測定したところ、約 90 MB でした。

Raspberry のエミュレーションは、プリンタにデータを送るのに追いつくほど速くありません。印刷は機能しますが、データを待っている間、プリンタのモーターが作動して不快な音が聞こえます。

spongeこれを修正するには、パッケージからユーティリティをインストールしmoreutils、(別名)filterdcp195cの出力が にパイプされるように編集します。ファイルの末尾の "PostScript"、"PDF"、および "*" ケース内に 3 つの行があり、 で終わる必要があります。$BRCONV $BRCONV_OPbrdcp195cfiltersponge... | $BRCONV $BRCONV_OP | sponge

これは、長時間実行されるコンバータ プロセスからの出力をすべて取り込み、コンバータが完了したときにのみ、それを一度にプリンタに送信するというものです。この方法では、印刷が開始されるまでに時間がかかりますが、プリンタは通常のペースでデータを受信します。

(spongeバッファリングしたデータは一時ディレクトリに保存されるため、Raspberry Pi の RAM に制限されません)

答え3

ギュンターの答えとても役に立ちました。これは部分的に私自身の経験と情報に基づいたフォローアップです。

カーネル モジュールに問題は見られませんでした。おそらく、これは過去 6 年間で修正されたのでしょう。

まず、Raspberry Pi 3 でこれをテストしました。印刷速度は遅いですが (1 ページあたり約 3 分)、プリンターをほとんど使用しないので、許容範囲です。

エラー メッセージを回避するにはld.so、パッケージを削除しますraspi-copies-and-fills

libc6:i386Debian のと をインストールする必要があることがわかりましたlibc6:armhf。これらのパッケージはバージョンが完全に一致する必要があり、Raspbian バージョンには、たとえば が含まれているためです+rpi1。Debian の armhf パッケージは、Raspberry Pi 3 で適切に動作するようです。Raspberry Pi 2 (armv7) 以降、および新しい Raspberry Pi Zero 2 W では動作するはずですが、Raspberry Pi 1 または Zero/W (armv6) では動作しないと思います。ディストリビューションを混在させる場合は、 を確認する必要がありますman apt_preferences

私は、Raspberry Pi Zero W をプリント サーバーとして使用したいと考えていました。これはさらに遅く (1 ページあたり約 5 分)、Debian の armhf パッケージを使用できません。多くの資料を読み、試行錯誤した結果、libc6:i386ソースから Raspbian の「ブートストラップ」パッケージを構築することができました。

ソースコードの入手は簡単です:

apt-get source glibc
cd glibc-N.NN

次のステップはビルド プロファイルを選択することです。

https://wiki.debian.org/ビルドプロファイルスペック

  • crossクロスコンパイルしているからです
  • stage2glibcをブートストラップする必要があるため
  • nobiarchamd64/x32 パッケージのビルドを回避する
  • nocheckビルド依存性を排除する

ビルド依存関係は次のようにインストールできるはずだと思いました。

sudo apt-get -a i386 --build-profiles=cross,stage2,nobiarch,nocheck build-dep glibc

しかし、 などの一部のパッケージが利用できないために失敗しましたperl:i386。何か間違っているのでしょうか? Debian パッケージングに関する私の理解が非常に限られているため、その可能性は高いようです。代わりに、次の操作を実行しました。

sudo apt-get build-dep glibc

次に、必要なdebian/controlのバージョンを確認しgcc、次の操作を行います。

sudo apt install dpkg-cross gcc-10-i686-linux-gnu g++-10-i686-linux-gnu 

これは多くの場合、 をインストールすることと同等ですcrossbuild-essential-i386

これで構築できます。

dpkg-buildpackage --no-sign -b -a i386 --build-profiles=cross,stage2,nobiarch,nocheck -d

ノート:

  • シングルコアの armv6 Raspberry Pi では、ビルド プロセスに非常に長い時間がかかります。パッケージをビルドするには、より高速な Raspberry Pi を使用することをお勧めします。
  • この「ブートストラップ」パッケージは私のニーズには十分でした。機能上の制限があるかどうかはわかりません。
  • パッケージをインストールしようとしたところ、 Raspbian が提供するlibc6:i386既存のファイルと競合しました。既存のファイルの名前を変更したところ、パッケージは正しくインストールされました。changelog.Debian.gzlibc6:armhf

関連情報