Void Linuxでプリンタにネットワーク接続してドライバーレス印刷する
2024-12-19
Linuxでもプリンターが手軽に使えるようになった
10年ほど前はLinuxデスクトップからプリンターを使うのは少し面倒なことでした。CUPSの登場によりドライバーの作成が非常に簡易化されたとは言え、Linux向けのドライバーを提供しているメーカーや機種を選ぶ必要がありましたし、メーカーの提供するドライバーを手動でインストールするなどの手間がありました。Linuxに対応したプリンターを持っていないため、印刷だけはWindowsを使ったという経験のある方もいるのではないでしょうか?
しかし、スマートフォンが普及したことでプリンターはPCに接続し印刷するものという常識が変わってきました。もはやスマートフォンから直接プリンターにアクセスして印刷できることは当たり前になり、現代的なプリンターの標準機能となっています。このことはLinuxを使う人にとっても非常に楽にプリンターを扱える状況を作り出しました。もはやスマートフォンからダイレクトにプリンアウトができるのが当たり前のように、Linuxの入ったPCからも手軽に印刷ができるようになったのです。
筆者の環境
今回の記事を書く際に検証した筆者の環境です。
項目 | 値 |
---|---|
OS | Void Linux |
Printer | Brother 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グループに追加してあるアカウントでログインします。
「プリンターの追加」を選択します。
今回はプロトコルはipp
を選択します。Brotherプリンターの場合はipp://<hostname>/ipp/port1
という形式で入力します。
説明や場所を記入して「続ける」を押します。
ドライバーはGenericのIPP Everywhere
を選択します。
問題なくプリンターが追加されればOKです。
自動でプリンターを認識させる
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-daemon
とcups-browsed
のサービスが立ち上がり、自動的にドライバーレス印刷に対応したプリンターが追加されると思います。avahiがプリンターを検知できているかを知りたい場合は以下のコマンドで調べます。
avahi-browse -art
CUPSにプリンターが追加されているか調べたい場合は以下のコマンドで調べます。
lpstat -v
出力例
device for Brother_DCP_J926N: implicitclass://Brother_DCP_J926N/
”implicticlass”と表示されているプリンターはcups-browsedによって管理されているプリンターを表しています。
おわりに
これまでドライバーレスに非対応の古いプリンターを使ってきたために、プリンターをLinuxで使用する際にはメーカーからダウンロードしたドライバーをいろいろ工夫してインストールするものと思い込んでいました。新しいプリンターを購入したところ多くのプリンターがドライバーレス印刷に対応していることを知り、Linuxをデスクトップ用途で使う上での一つの懸念事項であるプリンターの接続問題が大きく前進したことを実感しました。