ネットワーク上の有線USBプリンタを共有する旅


私は、安価で買われて、安く動くプリンターのために市場にいました.私は色で印刷しなかったので、私はドットマトリックスレーザープリンターが良い選択であると結論しました.
私は2、3ドルの単位を見て、それが8ドルのために実行している交換トンで100ドルのために販売中であったので、DCP - 1510に決めました.悪いことではない.これは、1つの警告-イーサネットポートがない、WiFiサポート、およびInternet Printing Protocolなし.

私はすべての機能を必要としませんでしたが、イーサネットポートは良いです
Courtesy of XKCD
それは私を置かなかった.私はずっと印刷していないし、ケーブルで暮らすことができる.また、私はCUPSなどの印刷サーバに接続し、ネットワーク障害のプリンタにネットワーク機能を追加できることを知っていました.私はラズベリーパイゼロを座っていた、私はそれを使用することを躊躇しない.このポストは私がそれを設定した経験の旅についての話です.

運転者の支持または欠如


私はRPIにArch Linux ARMをフラッシュして、ドライバー狩りに行きました.メーカーはアームアーキテクチャをサポートしていないことが分かった.
DDGの検索のカップルの後、私はbrlaser -コミュニティ駆動ブラザードライバーを見つけました.
パーフェクト!私はカップをインストールし、ドライバをコンパイルし、ネットワーク上でプリンタを共有しました.

ドライバ選択プロンプトで見られるようにBRLaser.
私は印刷ボタンをクリックしました.

なぜ1ページを印刷するのに45秒かかります


私の目はすぐに現れるために紙の最初のシートを予想しているプリンターの方へ向きました、しかし、何も起こりませんでした.SSHをPIにしようとしてデバッグを開始するまで.数秒後、私はBRRRプリンターの音を聞いていました.私はいくつかのプライミングを必要と思ったとして、2番目のものを印刷しようとしましたが、それも十分に半分分かかった.
私は再びプリントをクリックし、カップインターフェイスを観察し始めた.処理ページの状態を通過するには30秒かかりました.何かあった.
それが判明すると、ラズベリーパイゼロは、強力ではありません.ドライバは、CPU使用率を100 %にしたghostscriptを使用します.描画ボードに戻る.

ネットワーク上の任意のUSBデバイスを共有できますか?確かに私はできる!


私は当時のCUPでのrawキューモードに気づいていませんでしたが、私は問題に対して魅力的な解決策のように聞こえたusbipについて聞きました.
私は大きなArch Wiki tutorial on usbipに従いました、そして、確かに、私は私のプリンターを付けました.
カーネルモジュールをロードする必要は少し不安でしたが、私はドライバをインストールし、うまくカップを使ってプリンタを設定しました.
私は印刷をヒットし、ほとんどすぐにページが便利だった.おっと、予想以上に簡単だった!

すべてのバラではない🌹


私は次の日私のラップトップを再起動し、再度、実際の文書を印刷しようとしました.
それは動作しませんでした-デバイスがなくなった-私はデバイスを分離できませんでした、私は新しいものを取り付けることができませんでした.
その時点で、私は私がmisbehasしているカーネルモジュールを走らせることに賛成しないと結論しました
私はまた、全体のアーキテクチャの周りにいくつかのセキュリティ懸念を持っていたので、私はそれをアンインストールします.

rawキューの学習


私は2、3日後に問題に戻って来ました、しかし、現在、私は私のベルトの下で強力なツールを持っていました:カップの生のキューに関する知識.
生のキューは

[...] a queue where the filtering system is not involved and the print job goes directly to a printer or another queue:
https://wiki.debian.org/CUPSPrintQueues"


これは私のユースケースに期待していた.アイデアは、パイの生のキューを設定し、重い強力なリフティング(フィルタリング)を大幅に強力なユーザーマシンです.
.----------------.         .--------------.        .---------.
|       PC       |         | Raspberry PI |        .         .
|   (filtering)  +-------->|  (raw queue) +------->| Printer |
| (brlaser + gs) |         |(no filtering)|        '         .
'----------------'         '--------------'        '---------'

私はすぐにこのセットアップをコンパイルし、それが完全に働いた.
注意: CUPは将来的にドライバとrawキューを廃止する予定です.私はこれは大きな問題であるとは思わない、あなたは常にカップのバージョンをピンすることができます.そこにまだ古いハードウェアのトンがあります、そして、それは速く変わりません.

SDカードは諦める


数週間後に、Cup Serverを実行しているSDカードはあきらめました.
私は新しいものを買って、すぐにすべてを再インストールしようとしました、しかし、その間、Arch Linux ARM abandoned armv6 architecture.私はRaspberry Pi OSを使用し、セットアップを自動化することを決めた.

ビルドプロセスの自動化


私は私のインフラストラクチャをコードで定義し、私のサーバーを制御するために多くの可用性のプレイブックや地形のワークスペースを維持したい.
Packerは、仕事のための完璧なツールのようでした.
私は前にそれを使用して、ツールに精通したいと思った.
それは箱から腕支持で来ません、しかし、there are two community projects to fill that niche.
私は最初にpacker-builder-armを試みました、しかし、それはa bugのために私の不可解な脚本を走らせることができませんでした.私はパッチを適用したが、すぐに他の問題に出くわした.
その時点で、私は代わりにpacker-plugin-arm-imageを使用することを決めた.セットアップは箱からうまくいきませんでした、しかし、simple PRの後、それは私の最初の空のイメージを構築して、ローカルイメージを構築することが可能であることを証明しました.

目標の定義


エンドツーエンドのセットアップを次のような機能にしました.
  • OSインストール(ラズベリーパイOS )
  • 無線LANセットアップ
  • MDNSとDNSSD経由で
  • 自動発見
  • カップインストール
  • プリンタ構成
  • 私はそれを達成するために2つのわかりやすい脚本を開発しました.私はテクニックを飛ばして、多分別の時に詳細について書きます.

    それを自分で実行!


    包括的なREADMEによる最終的な解決は、maciekmm/printer-rpi-image github repoの下で見つかります.
    ビル、フラッシュ、そして自分でイメージを走らせるのは実行中と同じくらい簡単です.
    # build the base image
    WIFI_SSID=<SSID> WIFI_PASSWORD=<PASSWORD> SSH_PUBLIC_KEY=$(cat ~/.ssh/id_ed25519.pub) vagrant up
    # flash the image onto the sd card
    dd bs=4M if=./output-raspberry_pi_os.img of=<sdcarddevice> && sync
    # NOTE: this runs on the live Pi. Connect it first with printers attached!
    # configure the printer and firewalls
    ansible-playbook -i hosts live.yaml
    
    残っているのはドライバの設定とプリンタのローカル検出です.これは、ローカルにカップをインストールし、ウィザードを実行して行うことができます.

    閉鎖思考


    私はいくつかのことを成し遂げた.
  • 私はワイヤードプリンタワイヤレス、
  • を作った
  • 私はパッカーを使用する方法を学びました、
  • 私はカップ待ち行列について少し学びました、
  • 私はan open source projectあなたのために同じことを行うことができると発表した.
  • 全体的に、これは面白いプロジェクトであり、私はこの話を共有して満足している.