カタカタブログ

SIerで働くITエンジニアがカタカタした記録を残す技術ブログ。Java, Oracle Database, Linuxが中心です。たまに数学やデータ分析なども。

Raspberry Pi 2 をプリントサーバ化しようとしたが失敗したときのメモ

Raspberry Piをホームネットワーク上のプリントサーバとして使うやり方がいろいろなところで解説されているので、試してみた。自宅のプリンタはUSBプリンタなので、いつもプリンタのある部屋に移動してUSBを接続して印刷しないといけないところが面倒だったが、Raspiberry Piとプリンタをつなげば、無線プリンタとして使えるという。

・・・結論から言うと、プリンタとの連携設定はうまくいったのだが、印刷しようとしても、プリンタのヘッダはガーと音を出すだけで全く印刷できなかった。しかしプリンタ上は「印刷が正常に完了」というステータスになっている。いろいろ試したが結局解消できなかった。

おそらくRaspberry Piとドライバもしくはプリンタとの相性の問題であり、Raspberry Piプリントサーバ化手順としては問題ないと信じて、調査ログの意味も兼ねて記事にしておく。

以下、参考にした記事。
https://blog.bartbania.com/linux-2/cups-raspberry-printer/?utm_source=feedly
http://deviceplus.jp/hobby/raspberrypi_entry_011/

プリンタとRaspberry Pi を接続する

プリンタの電源を入れて、USBで接続しておく。ちなみに我が家のプリンタはEPSONのPX-403Aという数年前に1万円くらいで買った機種。
f:id:osn_th:20150524184322j:plain

Linux用のプリントサーバソフトウェアであるCUPS(カップス)をインストール

apt-getでインストールする

pi@raspberrypi~ $sudo apt-get update
pi@raspberrypi~ $sudo apt-get install cups
pi@raspberrypi~ $service cups status
Status of Common Unix Printing System: cupsd is running.

CUPSが正常にインストールされ、起動していることを確認。

piユーザにlpadminグループを付与

pi@raspberrypi~ $sudo usermod -a -G lpadmin pi

CUPSの設定をする

設定ファイルはここにできているよう

pi@raspberrypi~ $ls /etc/cups/
cups-files.conf  cupsd.conf  cupsd.conf.default  ppd  raw.convs  raw.types  snmp.conf ssl

設定ファイルをいじるので、後の作業はrootユーザで。まずcuspsd.confのバックアップをとっておく。

pi@raspberrypi~ $sudo su -
root@raspberrypi:~# cp -p /etc/cups/cupsd.conf /etc/cups/cupsd.conf.org

cupsd.confのListenがlocalhostしか許可しないので、任意のサーバからアクセスできるように変更する。

root@raspberrypi:~# vi /etc/cups/cupsd.conf

変更箇所は

Listen localhost:631

となっているところを以下に直す。

Port 631

続いて、各Locationの設定に、以下の設定を追加する。

Allow @local

変更した結果、以下のようになる。

#
# "$Id: cupsd.conf.in 9407 2010-12-09 21:24:51Z mike $"
#
# Sample configuration file for the CUPS scheduler.  See "man cupsd.conf" for a
# complete description of this file.
#
# Log general information in error_log - change "warn" to "debug"
# for troubleshooting...
LogLevel warn
# Deactivate CUPS' internal logrotating, as we provide a better one, especially
# LogLevel debug2 gets usable now
MaxLogSize 0
# Only listen for connections from the local machine.Port 631
Listen /var/run/cups/cups.sock
# Show shared printers on the local network.
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseLocalProtocols CUPS dnssd
# Default authentication type, when authentication is required...
DefaultAuthType Basic
# Web interface setting...
WebInterface Yes
# Restrict access to the server...
<Location />
  Order allow,denyAllow @local
</Location>
# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
Allow @local
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
Allow @local
</Location>

設定変更を反映のため、CUPSを再起動する。

root@raspberrypi:~# service cups restart
[ ok] Restarting Common Unix Printing System: cupsd.

MacからCUPSの管理コンソールにログイン

以下のURLからログインできる。
http://[Raspiberry PiのIPアドレス]:631/

ちなみに接続元の/etc/hostsを適当なアドレスにして接続するとエラーになる。
Raspberry Piのhostnameはそのままなのに、クライアント側(Mac)の/etc/hostsだけに以下のような設定を入れて、

[Raspiberry PiのIPアドレス] raspi

URLにhostsで接続しても、「不正なリクエスト」となってしまう。
http://raspi:631/
f:id:osn_th:20150530155319p:plain
なので、私の環境の場合はRaspberry PiのIPは192.168.11.11なので以下のようにアクセスするとちゃんと見れる。
http://192.168.11.11:631/
f:id:osn_th:20150530213814j:plain
正しく管理画面にログインできた

CUPSにプリンタ追加

CUPSにプリンタを追加する。

プリンターとクラスの追加 > プリンターの追加

EPSONのプリンタがローカルプリンターに検知されているので、選択し「続ける」をクリック
f:id:osn_th:20150530155334p:plain

プリンタの名前や場所は適当に入力し、「続ける」をクリック
f:id:osn_th:20150530155317p:plain
ドライバを選択する。モデルは「PX-403A」がないので適当に近そうな「PX-404A」を選択し、「プリンターの追加」をクリック
f:id:osn_th:20150530155337p:plain
デフォルトオプションを指定し、「デフォルトオプションの設定」をクリック
f:id:osn_th:20150530155331p:plain
完了。
f:id:osn_th:20150530155314p:plain
これでCUPS側の設定は完了。CUPSからのテストページ印刷で印刷できることを確認する(うちはできませんでした)。

Macでプリンタ設定

Macからネットワークプリンタとして、設定を追加する。

「プリンタとスキャナ」から「+」アイコンをクリック
※以下のEPSON PX-403AはUSBをmacに直接つないだときの設定。
今回はネットワークプリンタとして設定を追加する。
f:id:osn_th:20150530155346p:plain

自動でraspberrypiと接続したプリンタが認識されるので、「追加」をクリック
f:id:osn_th:20150530155328p:plain
設定できたよう。
f:id:osn_th:20150530155343p:plain

追加したプリンタを開き、メニューバーの「プリンタ」から「テストページをプリント」を選択
f:id:osn_th:20150530155325p:plain

私の環境では、ここで正しく印刷できなかった。プリンタは印刷ジョブ依頼を検知してヘッダが動く音はするが印刷はされず。CUPS上は完了ステータスになる。CUPS画面上のテストページも試したが同様だった。

普通はここで正しく印刷できるはず。
f:id:osn_th:20150530155340p:plain

その後の調査メモ

結局原因分からずだが、いろいろ調査した場所をメモしておく。

デバッグログ確認

/etc/cups/cupsd.conf を編集

LogLevel warn

これを以下に変更する。

LogLevel debug

CUPSを再起動する。
エラーログ確認しつつテストページをプリントする

# less /var/log/cups/error_log

エラーログらしきものは特に出力されておらず、正常終了しているように見える。(まあ、プリントキュー上は「正常に完了」と見えるのだから、きっとCUPSはエラーと思っていないのだろう)

Raspberry Pi の画面からCUPSを使わずに印刷してみる

system-config-printerをインストール

root@raspberrypi:~# apt-get install system-config-printer

画面から「Menu」 > 「設定」 > 「印刷」からプリンタの「テストページの印刷」をやってみる。
やはりドキュメントの印刷ステータスは「完了しました」となり、プリンタは無反応のまま。つまり、CUPSは関係なく印刷ができない。これはもうRaspberry Piとドライバとプリンタの問題っぽい。

まとめ

その後、製品サイトから正しいLinuxドライバを入れて試したりしたが、結局分からず。エラーログとかも出ていないので、きっとプリンタとRaspberry Piの間の問題。CUPSの手順は問題ないと思われるので、今度は別のプリンタで試してみたいと思う。

ということで残念ながら我が家のRaspberry Piプリントサーバ化計画は失敗しました。