Debian(Linux)にプリンタをインストール
プリンタドライバーがWindows用だから無理だと決めつけて手付かずだったDebianからの印刷。伝聞でなんとなくできそうだとは認識していていつかチャレンジしようと思っていたのですが、その「いつか」が来ました。
プリンタをインストールする環境はDebianは11(bulleseye)のCUI版で、Windows11のChromeブラウザからリモート設定をしました。
以前までは、すべてのユーザーにリモート設定を許可する暫定的な対応をしていましたが、管理ユーザーを作成して設定する方法の紹介に変えました。
CUPSのバージョンは2.3.3op2です。
CUPSのインストールと設定ファイル
Debian(Linux)での印刷はCUPS(Common Unix Printing System)を使うのが一般的です。
CUPS は、macOS® およびその他の UNIX ® 系 OS のために、Apple Inc. によって開発された標準ベースのオープンソース印刷システムです。
Internet Printing Protocol(IPP)を使用して印刷をします。またプリンタ固有の機能はPostScript Printer Description(PPD)ファイルにより定義されます。
CUPSのインストール自体はAPT経由で可能になっています。
$ su ... # apt update ... # apt install cups
ブラウザ経由で設定をするのが楽だという事でそれを可能にさせます。「 cupsctl --remote-admin 」を実行すると、設定ファイルである /etc/cups/cupsd.conf にリモートアクセス用の設定が追記されます。
この状態で、同じネットワークにある他のPCのブラウザから、CUPSをインストールしたPCにブラウザでアクセスできるようになります。
その際はポート631を指定する必要があります。たとえばCUPSがインストールされたPCのIPアドレスが 192.168.1.1 なら http://192.168.1.1:631 といった具合です。
このままではまだプリンタのインストールはできません。それらの制限が cupsd.confファイルに書かれているので、内容を確認します。
cupsd.confの中身は、apacheに似たディレクティブ構造なっています。Locationディレクティブ(<Location />)がいくつか並んだ後に、Policyディレクティブが続いていると思います。
まず、<Location />の部分を見てみます。これは後で紹介するCUPSのWeb設定画面のトップページへのアクセス権を設定する内容となっていて、初期状態では次のようになっていると思います。
Order allow,deny Allow @LOCAL
「 Order allow, deny 」は許可(Allow)リストを評価した後、該当しなかったら拒否します。
「 Order deny, allow 」は拒否リスト(Deny)を評価した後、該当しなかったら許可します。
Allowに続く記述は、上記の例では @LOCAL という”指定子”になっています。これはローカルネットワーク上のホストを指します。
指定子は先頭に@がつきます。ここで利用できる他の指定子には @IF(name) があります。これは name で指定した特定のインターフェースに接続されたホストを表すことができます。
指定子を使わない場合は、なら192.168.1.2という風にIPアドレスを指定したり、192.168.2.0/24という風にネットワークアドレスを指定できます。IPv6での指定も可能です。
さらにワイルドカードを含んだドメイン指定 *.domain.jp といった指定の仕方や、すべてを意味する all 、無を意味する none などが指定できます。
この場合Allowが1行しかありませんが複数行設定することができ、いずれにも該当しなかったら拒否となります。
上記の例では、Locationの後に / が設定されているので、トップページを意味しますが、他には、プリンタの管理ページのルートである /admin 、設定ファイルへアクセスするページである /admin/conf 、ログへのアクセス用に /admin/log のアクセス権が設定されています。
今度は Location /admin/conf となっている部分を見てみます。
AuthType Default Require user @SYSTEM Order allow,deny Allow @LOCAL
AuthTypeはこのぺージの表示では認証が必要であることを示します。ここではDefault指定しています。他に有効な値は Basic(ベーシック認証)や None(無し)があります。
「 Require user @SYSTEM 」の部分では @SYSTEM 指定子で表されるユーザーであることが求められます。@SYSTEMが示すユーザーは /etc/cups/cups-files.confファイル内の SystemGroup に設定されているグループに所属するユーザーです。筆者の環境では対象のグループは lpadmin となっていました。
Require user の他に Require group としてグループ名を指定する方法や Require valid-user とすることで認証できたユーザーすべてという制限の方法があります。
リモートメンテナンスの準備
設定ファイルの仕組みが分かったところで、今度はリモートメンテができるようにします。
自身の環境に応じた設定になるように cupsd.conf ファイルを修正してください。たとえば同一ネットワーク外でも可能にしたかったら、Allow の行に192.168.0.0/16,172.16.0.0/12,10.0.0.0/8 を加えたり、パスワードレスにするなら AuthTypeの行を外すか none を設定します。
ここではプリンタ管理者用にユーザーを作成して、CUPSをインストールしたPCと同じネットワーク内からならどのPCからでも管理者IDとパスワードを持つ人はブラウザを通して設定できるようにします。
この条件はデフォルト設定のままで、OSにユーザーを作成することでで実現できます。
まず、管理用のユーザーをCUPSをインストールしたPCに作成します。
ホームディレクトリや(-M)、グループ(-N)を作成せずに、シェルへのログインも不可能(-s /bin/false)にします。
ユーザー名は printer-manager としました。
Require user @SYSTEM に適合するように、ユーザーを lpadmin グループに所属させます
最後にパスワードを指定します。ブラウザから認証する際はここで設定したパスワードを入力します。
# passwd printer-manager 新しい パスワード: xxxxx 新しい パスワードを再入力してください: xxxx passwd: パスワードは正しく更新されました
これでリモートでプリンタを設定するための準備は終了です。
ネットワークを経由した印刷の方法
あとはブラウザが使えるPCからアクセスして設定していきます。ブラウザからCUPSをインストールしたPCの631番ポートにアクセスします。その際のURLの指定は、もし対象のPCのIPアドレスが 192.168.1.1 なら https://192.168.1.1:631 となります。
プリンタを設定する前に、ネットワーク経由でプリンタにデータを送る方法はひとつではないので、その説明を先にします。後からどの方法でデータを送るのか選択しなければいけません。
USBやシリアルでの接続を考えている場合は読み飛ばしてください。
- ipp(ipps)
ipp(Internet Printing Protocol)はLinuxでの印刷の主流になっている方法だと思います。基本的にポートの631番を使いますが、80番を使う場合もあります。
ippsのsはhttpsのsと同じでデータ通信をセキュアにしたものです。ポートもhttps同様に443番を使います。
ippはHTTP/1.1プロトコルをベースにしています。
通常は aplication/ipp という MIMEタイプのXMLドキュメントデータを送信しますが、RAW(生のデータ)も送ることができます。
- LPR
LPR(Line Printer Remote)はLPD(Line Printer Daemon)プロトコルを使って通信します。印刷データはプロトコルにしたがって変換(テキスト化)され送信されます。
この通信にはポートの515番が割り当てらています。
- RAW
Windowsのプリンタの設定には先に紹介した LPR と RAW という区別があると思います。
RAWの文字通り、印刷データの内容はドライバーが出力したままストリームとしてプリンタに送られます。
この通信で用いられるポートが 9100番なので、現在の多くのネットワークプリンタは9100番で印刷データストリームを待ち受けるようになっています。
Windowsでは、標準TCP/IPポート(Standard TCP/IP Port)を指定すると、RAW+9100番ポートが利用されます。
RAWのURIは 「 socket://192.168.1.1 」となったり「 socket://192.168.1.1:9100 」となったりします。socketがRAWを意味するようです。
Windows機にドライバーをインストールして印刷をする場合は、この方法であることが多いです。近年はWSDやippでの接続することも増えてきましたが、ドライバ―経由で複雑な印刷設定が必要な場合は依然としてこの手法に分があります。
- AppSocket/HP JetDirect
JetDirectはHPが開発したネットワーク印刷のための機能です。これはTCP/IP以外でも使うことが可能ですが、TCP/IPではRAWと同様にポートの9100番が用いられることが多いようです。
- dnssd
こちらは印刷の方法ではないのですが、dnssd://... で始まる接続が選択される場合があります。これはDNS-SDという、ネットワーク上のサービスをmDNS経由で解決する方法です。これを用いて、ネットワーク上のアクティブな印刷サービス(プリンタ)を探してその情報を得て印刷指示を送る流れになります。
- WSD
WSD(Web Services on Devices)も印刷の方法ではありません。ネットワーク内のプリンタ(や他のデバイス)を自動設定する仕組みですが、自動設定の結果ippが採用されたりします。
プリンタのインストール
方法を理解したところで、プリンタのインストールしていきます。基本的な操作はGUIなので分かりやすいと思います。
まず、管理タブを開きます。
httpで接続している場合はhttpsにリダイレクトされます。また、初回の接続ではhttpsにおける証明書が信頼できない件も指摘されますが、無視してhttpsで接続します。
さらに、Basic認証によるログインを求められますので、先ほど設定したユーザーとパスワードでログインします。
画面から「 プリンターの追加 」を押します。
ネットワーク上に利用可能なプリンタがある場合、「 発見されたネットワークプリンタ 」に出力されます。これは cups-browsed の働きによるものです。
またUSBに接続されている場合はローカルプリンタ側に出力されると思います。この設定の方法は、印刷方法がusb://一択になること以外、この後紹介するネットワークプリンタの登録方法と一緒です。
先に紹介したようにネットワーク経由では印刷の方法がいくつかあります。プリンタが複数の方法に対応していた場合は、それ別に同じプリンタが複数行出力されます。
プリンタを選択して「 続ける 」ボタンを押して以降の作業をするのですが、発見された場合で複数の印刷方法があった場合それが何なのか判別するのはできない場合があります。その際は一旦ボタンを押して次のページに進みます。
「 続ける 」ボタンを押した後のページでは「 接続先 」のURIが表示されます。たとえばこれが「 lpd:// 」で始まっていたらLPRだといった具合に判断します。
プリンタ名が変更できるページからさらに「 続ける 」を押して進むと今度は、ドライバーのインストールになります。指定したプリンタのドライバー(または使えそうなドライバ―)が モデル にリストされますので、それを選択するか、PPD(PostScript Printer Description) ファイルを渡します。PPDファイルはプリンタドライバー(の一部)だと考えてもらればいいと思います。
これでプリンタのインストールは終了です。
ドライバーレスプリンター
従来は、利用しているプリンタ用のPPD(ドライバ―)が見つからない際、各メーカーがホームページなどで提供されていないかを探したり、OpenPrintingでも配布していないか探したり、似た型番のもので試してみたりするのがセオリーでしたが、近年はスマホからの印刷要望に応えるために、ippを使ったドライバーレスプリンターが増えているのでそれを試してみるというのも一つの選択肢です。
このリストは、先のOpenPrinting:「Driverlessプリンタリスト」にも、掲載されています。
ただリストを確認しにいかなくても、これらのプリンターは「 発見されたネットワークプリンタ 」のリスト上に(driverless)の表示があると思います。
このプリンタを選択して進めたあと、モデルに「 IPP Everywhere 」の表記のあるドライバーがされたらそれを選択します。
それがなければ「 メーカー 」を「 Generic 」に変更し、「 モデル 」を「 Generic IPP Everywhere Printer 」にしてください。
プリンタによっては Generic だと動かないこともあるようです(筆者も遭遇しました)が、ドライバーが見つからない、という人は一度トライしてみるといいと思います。
コマンドラインからの印刷
印刷の実行は lp コマンドを使います。
プリンタ名には先ほどインストール時に設定したプリンタ名を指定します。デフォルトプリンタの指定がしてある場合は、-dオプションを省略でき、その際はデフォルトプリンタで印刷します。詳細はmanより確認してください。
以下は、参考にさせていただいたサイトです。ありがとうございました。