Linuxを日常的に使う実験ブログ

Void Linuxでプリンタにネットワーク接続してドライバーレス印刷する

 2024-12-19

 Void Linux

Linuxでもプリンターが手軽に使えるようになった

10年ほど前はLinuxデスクトップからプリンターを使うのは少し面倒なことでした。CUPSの登場によりドライバーの作成が非常に簡易化されたとは言え、Linux向けのドライバーを提供しているメーカーや機種を選ぶ必要がありましたし、メーカーの提供するドライバーを手動でインストールするなどの手間がありました。Linuxに対応したプリンターを持っていないため、印刷だけはWindowsを使ったという経験のある方もいるのではないでしょうか?

しかし、スマートフォンが普及したことでプリンターはPCに接続し印刷するものという常識が変わってきました。もはやスマートフォンから直接プリンターにアクセスして印刷できることは当たり前になり、現代的なプリンターの標準機能となっています。このことはLinuxを使う人にとっても非常に楽にプリンターを扱える状況を作り出しました。もはやスマートフォンからダイレクトにプリンアウトができるのが当たり前のように、Linuxの入ったPCからも手軽に印刷ができるようになったのです。

筆者の環境

今回の記事を書く際に検証した筆者の環境です。

項目
OSVoid Linux
PrinterBrother DCP-J926N
接続ネットワーク接続

ドライバーレス印刷に対応したプリンターか調べる

まずはプリンターがドライバーレスに対応しているか調べましょう。

OpenPrintingにてプリンターがドライバーレスに対応したモデルか確認してください。IPP EverywhereかAir Printに対応していればドライバーレス印刷に対応しています。これらのプリンターは多くの場合MopiraやWifi Directにも対応しています。筆者が使っているBrother製のDCP-J926NはAir Printをサポートしているためドライバーレス印刷に対応していました。

コマンドを使って調べたい場合はipptoolを使って以下のようなコマンドで調べます。

ipptool -tv ipp://<ip_address_or_hostname>:631/ipp/print get-printer-attributes.test | grep -E "ipp-versions-supported|document-format-supported|get-printer-attributes"

Brother DCP-J926Nでの出力例です。

"/usr/share/cups/ipptool/get-printer-attributes.test":
    Get printer attributes using get-printer-attributes                  [PASS]
        ipp-versions-supported (1setOf keyword) = 1.0,1.1,2.0
        document-format-supported (1setOf mimeMediaType) = application/octet-stream,image/urf,image/jpeg,image/pwg-raster,application/vnd.brother-hbp

以下の3点を満たしていればドライバーレス印刷に対応しています。

  • get-printer-attributesテストがPASSを返す
  • IPPのバージョンが2.0以上をサポートする
  • application/pdf, image/urf, image/pwg-rasterのいずれかをサポートする

カラーの場合は加えてimage/jpegをサポートするかもチェックします。

CUPSの導入

Linuxでプリンターを扱う場合はCUPSがほぼ必須という状況です。まずはCUPSを導入しましょう。CUPSを使用する際にcups-filtersパッケージは必ずしも必要ではないのですが、今回はcups-filtersも導入しておきます。 

root権限で以下のコマンドを実行します。

xbps-install cups cups-filters
ln -s /etc/sv/cupsd /var/service/

管理者アカウントをlpadminグループに追加

CUPSを管理できるように管理者権限のあるユーザーをlpadminグループに追加しておきましょう。

gpasswd -a <username> lpadmin

手動でプリンターを追加する

まずは手動でプリンターを追加する方法を見ていきましょう。自動でプリンターを検知して追加する方法については後述します。

lpadminコマンドで追加する場合

ネットワーク経由でドライバーレスで印刷をするBrother製プリンターをCUPSに追加する方法は以下のコマンドです。Brother製プリンターの場合はipp://<hostname>/ipp/port1という形式のURIを使います。

lpadmin -p <printer_name> -E -v ipp://<hostname>/ipp/port1 -m everywhere 

これだけでドライバーを導入することなくプリンターを使用することができます。

CUPSのWEBインターフェースから追加する場合

lpadminを使用することに抵抗がある方はWEB画面から追加することもできます。http://localhost:631/adminにアクセスし、lpadminグループに追加してあるアカウントでログインします。

「プリンターの追加」を選択します。

fig.1

今回はプロトコルはippを選択します。Brotherプリンターの場合はipp://<hostname>/ipp/port1という形式で入力します。

fig.2

説明や場所を記入して「続ける」を押します。

fig.3

ドライバーはGenericのIPP Everywhereを選択します。

fig.4

問題なくプリンターが追加されればOKです。

fig.5

自動でプリンターを認識させる

Avahiとcups-browsedを用いることでIPP Everywhereに対応したプリンターを自動でCUPSに追加することができます。Avahiがネットワーク上のプリンターを検出し、cups-browsedが適当なプリンターをCUPSに追加します。これによりIPP Everywhereに対応したプリンターであれば特別な操作を必要とせずにプリンターをネットワークに接続するだけで済みます。

必要なパッケージの導入

CUPSが使用可能な前提で以下のパッケージを導入します。Ubuntu, Arch, Voidでは以下のパッケージ名です。

  • avahi
  • nss-mdns
  • cups-browsed

ディストリビューションによってはパッケージ名が異なるかも知れません。

cups-browsedの設定

/etc/cups/cups-browsed.confを以下のように編集します。コメントアウトを外すだけす。

CreateIPPPrinterQueues All

avahi-daemonとcups-browsedの有効化

ルート権限で以下のコマンドを実行します。

ln -s /etc/sv/avahi-daemon /var/service/
ln -s /etc/sv/cups-browsed /var/service/

これでavahi-daemoncups-browsedのサービスが立ち上がり、自動的にドライバーレス印刷に対応したプリンターが追加されると思います。avahiがプリンターを検知できているかを知りたい場合は以下のコマンドで調べます。

avahi-browse -art

CUPSにプリンターが追加されているか調べたい場合は以下のコマンドで調べます。

lpstat -v

出力例

device for Brother_DCP_J926N: implicitclass://Brother_DCP_J926N/

”implicticlass”と表示されているプリンターはcups-browsedによって管理されているプリンターを表しています。

おわりに

これまでドライバーレスに非対応の古いプリンターを使ってきたために、プリンターをLinuxで使用する際にはメーカーからダウンロードしたドライバーをいろいろ工夫してインストールするものと思い込んでいました。新しいプリンターを購入したところ多くのプリンターがドライバーレス印刷に対応していることを知り、Linuxをデスクトップ用途で使う上での一つの懸念事項であるプリンターの接続問題が大きく前進したことを実感しました。

参考資料