Chap-32. プリンターの設定

 従来、各ディストリのチャプタに書いていたことを、一つのチャプタにまとめました。
似たような内容になるので、各チャプタに書くより、こっちの方がわかりやすいと判断しました。
内容の時点修正等も、こっちの方がやりやすいし。
2021-09 初稿



Sec-1.プリンター設定の手順とか、プリンター設定に必要な事柄とか
Sec-2.ドライバー等を最初から備えている場合
Sec-3.プリンターメーカにドライバ等(バイナリーパッケージ)がアップされている場合
Sec-4.ドライバーパッケージが無い場合(ソースからドライバーをコンパイル・インストール)
Sec-5.プリンタ登録の問題、mdns の問題点
Sec-6.各ディストリの特徴など、諸々感じること




Sec-1.プリンター設定の手順とか、プリンター設定に必要な事柄とか

 手順ってほどではないですが、必要な事柄。
詳しく承知しているわけではありませんが・・・・



 まず最初に問題になるのはドライバー等を持っているかどうか、後で組み込めるかどうかってところです。そこの補足です。
 一般的にユーザフレンドリーとか、初級向けと言われているディストリは印刷設定について配慮されています。
つまり、最初から(何もしなくても)多くのプリンタードライバ等を備えている。ま、Windows ほどではないと思いますが・・・
ただし、Linuxの各ディストリがプリンタドライバ等を万全に備えているわけじゃないです。
そんな場合を含めて、以下、順に書いていきます。
以下、例として私の使っている Epson PX-048A って、安いヤツで話を進めます。安くても割合と良いです。
USB につないだプリンタも、LAN 接続も、Wifi 接続も、設定方法に大差ないと思います。私の設定例はすべて Wifi 接続のプリンタです。
以下、Sec-2 Sec-3 Sec-4 と進むに従ってややこしくなります、笑。

プリンタ登録のちょいとややこしい問題は、Sec-5. に書きますので、それを読んでください。面倒なら DE 付属の GUI ツールでプリンタを登録しても良いですけど・・・。

最後の Sec-6. は雑感みたいなもんです。





Sec-2.ドライバー等を最初から備えている場合

 インストールしただけの状態で既にドライバー等が入っているケースです。すごくラッキーなケース。
この場合は、cups、cups-browsed デーモンを起動した後、ただちに Sec-5. プリンタ登録に進めます。

ドライバ等を持っているかどうかは、プリンタ登録をやってみて、設定の途中でドライバの名前が出るかどうかで、判断できます。

このやり方の場合、smtp サーバがいるかどうかとか、何も考えなくても大丈夫だと思います。



Sec-3.プリンターメーカにドライバ等(バイナリーパッケージ)がアップされている場合

 インストールした状態ではドライバー等を持っていないケース。
その時、幸運にもドライバー等のパッケージがアップされていれば、それをダウンロードしてインストールするだけです。
それ以降、Sec-2. と同様にして Sec-5. へ進めます。

 例として Epson-PX-048A の場合は、

エプソン・ダウンロードサイト
http://download.ebz.epson.net/dsc/search/01/search/searchModule

パッケージ
epson-inkjet-printer-escpr-1.7.17-1lsb3.2.x86_64.rpm  (Redhat 系用)
epson-inkjet-printer-escpr_1.7.17-1lsb3.2_amd64.deb (Debian、Ubuntu 系用)

などをダウンロードして入れます。ダウンロードしながら同時にインストール出来る場合もありますが、先にダウンロードしておいて、後からインストールする方法もあります。
後からインストールする方法だと

# dnf install ./epson-inkjet-printer-escpr-1.7.17-1lsb3.2.x86_64.rpm
# apt install ./epson-inkjet-printer-escpr_1.7.17-1lsb3.2_amd64.deb
# zypper install ./epson-inkjet-printer-escpr-1.7.17-1lsb3.2.x86_64.rpm

というようにインストールします。./ を忘れないように。
この段階でエラーが出るようだと何かがおかしいです。 その場合、1)諦める。 2)ダメ元で Sec-4.に進む、のどっちかです。

ちなみに、たいてい rpm と deb 系ならパッケージがありますが、それ以外のパッケージ形式には対応していないプリンターメーカがほとんどです。なので Redhat 系、Debian 系、Ubuntu 系だと楽です。それ以外のパッケージ形式のディストリを使っているとちょっと面倒です。


この Sec-3. のやり方は LSB の関係で smtp サーバが必須になると思います。例えば postfix とか。
ドライバパッケージを入れれば、自動的に smtp サーバを入れるディストリもあります。(AlmaLinuxとか)
自動的に入らない場合は、たいてい、自分で事前に入れておかなければなりません。そうでないとプリンタが動かないと思います。



Sec-4.ドライバーパッケージが無い場合(ソースからドライバーをコンパイル・インストール)

 使っているディストリにあうバイナリーのパッケージがアップされていないけど、ソースはアップされている場合です。
PX-048A の場合は、ドライバーソースコードがアップされていますので、バイナリーのパッケージがないディストリにも対応出来ます。



1)まず、ドライバー等をコンパイルし、インストールします。
例によって、エプソンのサイトからドライバーソフトをダウンロードします。
2021-09 時点だと、ダウンロードするのは、epson-inkjet-printer-escpr-1.7.17-1lsb3.2.tar.gz というソースファイル。ダウンロードセンターは以下のとおり。

http://download.ebz.epson.net/dsc/search/01/search/searchModule

コンパイルするのは簡単です。ソースを展開し、そのディレクトリに入って、

$ ./configure    --prefix=/usr
$ make
# make   install

これで所定の場所にドライバー等が入ります。バイナリーパッケージをインストールしたのと、同じ状態になります。



 これ以降は、Sec-2. Sec-3. と同様にして Sec-5. プリンタ登録に進めます。



 一二年前は version 1.7.7 なんかを使っていました。あの頃はソフトにバグがあり、Debian 10.x のドライバを無理やりコピーしてインストールする必要がありました。
2021-09 時点の version 1.7.17 はバグがなおっています。もう、Debian のドライバーを無理やり持ってこなくても、良くなりました。
私はずっと version 1.7.7 を使っていたので、2021-09 時点になるまでバグがなおっているのに気がつきませんでした。本当はもっと早くなおっていたかもしれません。
「バグがある」・・・「バグがある」・・・「バグがある」・・・なんてネットで長く公開し続けてしまいました。エプソンさん、ごめんよ、汗。
 なお、この方法の場合 smtp サーバパッケージが必須なディストリと必須でないディストリがあります。
AlmaLinux は Sec-4. のやり方なら入ってなくてもプリンタが動きます。EndeavourOS は無いとプリンタが動きません。
smtp サーバ必須かどうか判断できないときは、事前に入れておきましょう。





Sec-5.プリンタ登録の問題、mdns の問題点

 個人の宅 UNIX ではそれほど問題にならないと思いますが、やや、重要な話。
私はこれまで、基本的に DE の印刷設定 GUI ツールを使ってプリンタをシステムに登録していました。
DE のツールを使うと、多くの場合(AlmaLinuxを除いて)mdns って仕組みを裏で使っています。multicast DNS。もう少し丁寧に言うと、mdns を使って名前からプリンタの場所を検索し、印刷しています。
そこ、mdns を使っていることに問題があるらしいです。

実は、mdns には以下のような特徴(ちょいと困った話)があることを、つい最近知りました。

ということらしいです。出典は以下のとおり。mdns の詳細については、あちこちネット検索して調べてください。


yohgaki's blog   「Linux のネットワークプリンタに印刷できない」

https://blog.ohgaki.net/hogehoge

著者さん、ありがとうございます。
hogehoge は日本語だったので文字化けするかもしれないし、貼り付けません。上の言葉で検索すれば出てくると思います。

なかなかに、困った話です。
mdns の利用状況について、各ディストリをチェックしてみました。以下のような具合です。

-- 最初から mdns が nsswitch.conf に入っているディストリ --
 Debian 11.0 Ubuntu 20.04LTS openSUSE(tw) Manjaro Gecko(RR) Fedora34 ArcoLinux

-- 最初はmdns が nsswitch.conf に入っていないが、mdns を追加しないと DE のツールでプリンタが動かないディストリ --
 EndeavourOS Slackware-current

-- mdns が nsswitch.conf に入っていなくて、しかも、そのまま DE のツールでプリンが動かせるディストリ --
 AlmaLinux

どうも、AlmaLinux が満点の対応で、後は多かれ少なかれ問題がありそうです。
我が家のシステムはすべて DE のツールでプリンタを登録していて、/etc/nsswitch.conf には mdns の記述が「ちゃんと?」あります。
また EndearvourOS や Slackware-current でプリンタを動かすときは /etc/nsswitch.conf に mdns の記述を追加し、DE の印刷設定ツールでプリンタ登録して、使っていました。
つい最近まで、mdns のリスクの存在を知らずに使っていたということです、汗。
一応、それをなんとかしようと考えました。

そこで、対応策を実行してみました。対応策としては、
1)/etc/nsswitch.conf から mdns の記述を削除する。(その後、リブート)
2)一旦 DE のツールで登録したプリンタを削除する。(名前で引いてしまうので)
3)新たに cups web interface でプリンタ登録をする。(IP address でプリンタを探すようにする)
これを、Ubuntu、Debian、SUSE(tw)、EndeavourOS、Slackware-current、Fedora34、ArcoLinux でやってみました。どうやらどのディストリでもうまくいきます。

以下に例をしめします。
既にプリンタが DE の設定ツールで登録されているなら、一旦削除しておきます。DEの設定ツールで登録したままだと mdns がないと印刷できないからです。
また、cups-browsed デーモンを動かしておきます。cups-browsed デーモンの設定はデフォルトのままでいけます。
まず、nsswitch.conf の修正例です。ArcoLinux の例で、上(# comment out)が当初、下が直した後です。私のところでは Windows と共存はしないので、wins もこの際消しておきます。

#hosts: files mymachines myhostname resolve [!UNAVAIL=return] dns mdns wins
hosts:  files mymachines myhostname resolve [!UNAVAIL=return] dns

この後リブートして、それから cups web interface を使います。
http://localhost:631/admin/ にアクセスします。


01


ここで「プリンターの追加」をクリックします。ID とパスワード入力画面が現れます。原則としてルートを入力。Ubuntu は sudo を使う関係で、自分ユーザを入力。すると、下の画面が現れます。

02


プリンタの名前があるけど、それはクリックしない。それをクリックしたら元も子もない。とりあえず ipp とかを適当にクリック。

03


ここで ipp は使わずに(笑) 「socket://192.168.0.hoge:9100」を入力。hoge はプリンタのアドレス。ようするに指定した IP アドレス(プリンタのアドレス)の 9100 TCP ポートにアクセスさせる。この後、下の名前などを入力する画面になる。あまりどうでも良い画面なので、適当に入力する。

04


続けるを押すと次の画面。

05


私の場合は、ここから Epson を選んで先に進む。次の画面になる。

06


ここでようやく本来のプリンタ名を指定(PX-048A)。すると次の画面になる。

07


私の場合、A4 なのでこれをデフォルトオプションにする。すべて登録が済んで次の画面となる。

08


メンテナンスからテストページ印刷が出来るので印刷すると、次のようなカラー1枚が出力されます。
これは Debian-11.0 と Slackware-current でテスト印刷したものです。

out

out2


 いかがでしたか?
初級の人にはいささかややこしい話になってしまい恐縮です。私が事態をややこしくしているわけではありません、汗。
実際にどうしたら良いか?って話です。考えられる手法は2つ。

天下の Ubuntu、Debian 等が mdns の記述をそのままにしているわけだし、案外と気にしなくても良いのかもしれません。でも敢えて言えば後者のやり方のほうがベターだと思います。


なお、/etc/nsswitch.conf から mdns の記述を削除した後は、リブートする必要があります。
cups web interface でプリンタを登録するのは、リブートした後です。





(2021-11-05) ********** mDNS について補足 *************
 特にわざわざ書くほどのことではないですが、mDNS について少しだけイメージを書きます。説明ってほどの内容じゃナイヨウ、笑。

こんな具合らしいです。簡単な仕組み。この仕組みの目的は内部的に DNS を動かすのは大変だろうから、それにかえて簡易手法で間に合わせようってことです。
狙いは悪くないですが、みんなが善意であることを前提にしています。相手方のどこかに自分を偽るヤツがいると容易に騙されます。
個人の宅サバ宅ネット程度なら良いですが、小規模会社のようなネットだと内部反乱分子もいるかもしれません、笑、いや笑い事じゃないか・・
例えば以下のようなことを企てます。

こんな仕組みを作れば、以後ずっと印刷命令をかすめ取ることができそうです、多分出来ますね。なおかつ誰かが新たに印刷設定をいじらない限りバレませんね。いや怖い、怖い。
なお、私はこんなこと断じてやりません。絶対です。信用できます。そもそもやれるだけの力量が無いし、宅サバで一人っきりなので関係ないし、笑。

こんなことがあり得ると認識しておいた方が良さそうです。
単に /etc/nsswitch.conf の設定を変え(mDNS を無効化し)印刷設定時に cups web interface を使うだけで、問題を回避できます。対策に頭を悩ますほどのことはありません。(暗にやったほうが良いと言ってるわけです、笑)

内部的なDNSについては、今どきのブロードバンドルータなら簡単な設定くらいは出来そうです。ルータにDNSをやらせる例として YAMAHA NVR500 の例を Chap-basic-1. Sec-4.4 に書いています。ルータに内部DNSをやらせれば mDNS を使う必要はなくなります。
もちろん、由緒正しき内部用の DNS をたてる手もあります。






Sec-6.各ディストリの特徴など、諸々感じること

 各ディストリについて気がついた点や感じたことです。ここで「一貫して」って言ってるのは私がディストリ試し始めたここ二年か三年のことです。超短い「一貫して」です、笑。

--- 全般的なこと(ドライバ導入) ---



--- 各ディストリのドライバ導入の状況について ---

Ubuntu ですが、2020-夏頃に試したときはドライバー等を持っていたように記憶しています。なのですぐに Sec-5. でプリンタが登録できました。2021-09 に試したら、ドライバー等を持っていませんでした。なので、こちらは Sec-3. で対応です。

Debian-stable ですが、ver 10.x では最初からドライバー等を持っていて、インストール後すぐに Sec-5. でプリンタが登録できました。
ver 11.0 になったらドライバー等が無くなっています。しかもパッケージをインストールしようとしたら、何故かエラーメッセージが出ました。パッケージが入りません。Sec-3.で対応出来ませんでした。このため、Sec-4.で対応しました。libcups2-dev を入れたような気がするけど、失念しています。

Debian 派生、Ubuntu 派生 は、たいてい派生元と同じようなやり方でいけると思います。

Redhat クローン(CentOS、AlmaLinux 等)及び Fedora は、いまのところ一貫して Sec-3. のやり方で安定してやれます。Sec-4. でも対応できます。

SUSE(tw)は、2020 頃は Sec-3. 4. で行けました。 2021-夏のお試しは Sec-3. だけにしました(面倒だし)。普通に動きます。

EndeavourOS はSec-4. で出来ます。

Manjaro は Sec-4. のやり方で、一貫して(安定して)印刷設定できます。

Gecko(RR) は 2020-夏頃試したときは、Sec-3. 4. のやり方で対応できました。
ところが、2021-09 に試すと、最初からドライバー等を持っていて、Sec-2. でやれます(すぐにプリンタ登録にとりかかれる)。超マイナーなディストリにしては、すごく印刷に配慮されていて、驚きました。2021-09 で天下の Ubuntu や Debian でもドライバー等が付属していないのに。
ひょっとすると、2020-夏頃もドライバー等を持っていて、Sec-2.で対応できていたのかもしれません。単に私が気が付かなかっただけどか・・・・

Slackware-current は Sec-4. でプリンタが使えます。仮に、少々リスクを気にせず DE の GUI を使うなら /etc/nsswitch.conf の中の
 hosts: files dns
の行を
 hosts: files mdns_minimal [NOTFOUND=return] dns
のように変えます。これで Sec-4. で wifi 経由のプリンタが使えるようになります。cups デーモンは当然必要。Xfce の GUI 印刷設定ツールで設定出来ます。
cups web interface でいくなら、上の mdns の追加記述なしでいけます。



--- その他 ---

無責任に適当にいい加減に調べただけですが、他のプリンターメーカ、例えばブラザーはどうやらソースコードをアップしていないようです。rpm と deb のバイナリーパッケージだけ。
キャノンは rpm と deb のバイナリーパッケージに加えて、ソースコードもアップしてあるようです。コンパイルしやすいものかどうかは、試してないので知りません。
私が使っている Epson も rpm と deb のバイナリーパッケージに加えて、ソースコードもアップしてあります。私のプリンター用のソースなら make 一発で簡単にコンパイル・インストール出来ます。



接続機器の中ではプリンターは大変なほうだと思います。プリンターに比べれば USB-DAC や Bluetooth(USB ドングル) なんて超簡単です。繋ぐだけ、笑。
一年とか二年ぶりぐらいにチェックしてみると、Ubuntu、Debian の両メジャーディストリにドライバ等が入っていなかったのが驚きです。前は入っていたのに、どうして?って・・・
その他のディストリでも、それなりに変わっています。



いろいろ書きましたが、一二年すると、また変わってしまう可能性が高いです、笑。