![Debian ARM と Brother DCP195C と CUPS](https://rvso.com/image/1415041/Debian%20ARM%20%E3%81%A8%20Brother%20DCP195C%20%E3%81%A8%20CUPS.png)
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をインストールする
パッケージqemu
、binfmt-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_OP
brdcp195cfilter
sponge
... | $BRCONV $BRCONV_OP | sponge
これは、長時間実行されるコンバータ プロセスからの出力をすべて取り込み、コンバータが完了したときにのみ、それを一度にプリンタに送信するというものです。この方法では、印刷が開始されるまでに時間がかかりますが、プリンタは通常のペースでデータを受信します。
(sponge
バッファリングしたデータは一時ディレクトリに保存されるため、Raspberry Pi の RAM に制限されません)
答え3
ギュンターの答えとても役に立ちました。これは部分的に私自身の経験と情報に基づいたフォローアップです。
カーネル モジュールに問題は見られませんでした。おそらく、これは過去 6 年間で修正されたのでしょう。
まず、Raspberry Pi 3 でこれをテストしました。印刷速度は遅いですが (1 ページあたり約 3 分)、プリンターをほとんど使用しないので、許容範囲です。
エラー メッセージを回避するにはld.so
、パッケージを削除しますraspi-copies-and-fills
。
libc6:i386
Debian のと をインストールする必要があることがわかりました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
クロスコンパイルしているからですstage2
glibcをブートストラップする必要があるためnobiarch
amd64/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.gz
libc6:armhf