子子子子子子(ねこのここねこ)はてブロ部

Macネタが主のIT記事と、興味ある展覧会リストや観覧感想などを書いてますよ。自転車ロードレースも好き。

FC3のファイルサーバをプリントサーバにしてみる

前書き

以前Fedora Core 3(もう古いですなぁ)で作ったファイルサーバが我が家では活躍している。なにせ、WinとMacが混在した環境で、さらにMacOS9OSXとが混在しているのだ。最近になり、ようやく安価なNASでもこんな変な環境に対応したものが出てきたが、そのころはさほど無かったようだし、しかも高かったし、さらに自分自身でLinuxの勉強をするために、ということで、ファイルサーバを作ったのだった。
先日、OS9用にプリンタを購入した。EPSONのPM-D600である。年賀状は未だにOS9Photoshop 5で作成しているのだが、以前から使っていたPM-780Cのインクヘッドが不調のために、新しいのを買うことにしたのだった。
#蛇足だが、先日発表されたEPSONの新製品は、OS9非対応となった。時代の流れか…。
このPM-D600もネットワークプリントできるように、EPSONPA-W11G2coregaCG-FPSU2BDSなどのプリントサーバを用意しようかと思った。しかし、やはりいずれも定価で2万円弱するため、なかなか気軽に手を出せない。そこで、いま機嫌良く動いているファイルサーバにプリントサーバ機能を追加しようと考えたのだった。
自分用のメモ書きだが、他の方にも役立てば、と思い、久しぶりに書き込むことにした。

ファイルサーバへのプリンタ登録など

ひとまず、Winから打ち出すならば、SAMBAを使えばよいのだろうと思い、その関係でググってみた。
まず役立ったのがこのページ。
���v�����^�T�[�o�[�̐ݒ聞���S�҂̂��߂�Linux�T�[�o�[�\�z�u��(CentOS �����T�[�o�[�Ή�)�����֗��T�[�o�[.com��
ひとまずこのページの手順でやっていくことにした。
まずはUSBにPM-D600を接続してみる。さらにファイルサーバにはsshでログインして

$ sudo su -

でrootになる。引き続き、

# printconf

というCUIのプリンタ設定を使ってPM-D600を登録した。登録時のポイントは、プリンタドライバを入れずに直接印刷(RAW)の設定にすること。
#上記のページでは日本語だったが、うちのFC3では英語だった。設定を英語のままにしていたのかな。ちょっと忘れた。
また、

# ntsysv

でCUPSが自動起動するように設定しておく。

SAMBAの設定

上記のページでは、SAMBAの設定はSWATで行うのだが、うちのファイルサーバのSWATのバージョンが低いのか、詳細な設定が行えなかった。このため、/etc/samba/smb.confを直接いじることにした。smb.confの末尾に以下を追加した。

[PM-D600]
        printer = PM-D600
        printable = yes
        path = /var/spool/samba
        allow hosts = 192.168.1.0/255.255.255.0

もちろん、allow hostsのところは自分のネットワークにあったサブネットにする必要がある。

Windows側にプリンタドライバを入れる

続いて、Windows XPにPM-D600のドライバをダウンロードしてきて、ドライバのインストールを行った。EPSONインストーラは、自らのUSBポートにプリンタを接続した状態である、という前提で動くので、大体のドライバファイルがインストールされた時点で接続認識を行う画面になるのだが、そのときに手動認識を選んで逃げるのがポイント。しかし勝手にポートがLPT1であるプリンタドライバが作成されてしまうので即刻削除する。

ネットワークプリンタのドライバ設定

上記のページの「WindowsOSクライアントへのプリンタドライバの導入」を参考にして、ひとまずファイルサーバに見える\\fileserver\PM-D600をダブルクリックすると、ドライバをインストールするダイアログが出るので、それに従って設定していく。XPがSP2であるためか、セキュリティの警告が出た後にドライバのインストール要求、それから機種選択という順番で設定を行っていく。

ユーザ設定

これでもう設定できたも同然、簡単なもんだ、と思ったのだが、そうは問屋が卸さない。
テストプリントしようとするも、アクセス拒否に遭う。上記のページでも「printer adminに記述されていないユーザからはプリントできないことがある」などの記載があるため、また/etc/samba/smb.confの末尾を若干変更した。

[PM-D600]
        printer = PM-D600
        printable = yes
        path = /var/spool/samba
        allow hosts = 192.168.1.0/255.255.255.0
        printer admin = rio,campos,@riocampos

ちなみにユーザが複数有る場合はカンマで区切っていき、グループを登録したい場合は@のあとにグループ名を入れるようである。グループは要らないと思うが、何となく設定してみた。もしかすると、グループだけでいけるかもしれない。

CUPS設定

これで大丈夫、と思ったら、アクセス拒否は無くなったのだが、やはり打ち出せない。
ものの本をぱらぱら見てみると、プリントサーバはSAMBAからCUPSに引き渡してプリントアウトするので、CUPSが動く設定にする必要がある、とのこと。
ということで、再度検索。
http://iaq.homeip.net/cups_printer.php
これに従い、まず /etc/cups/mime.typesの末尾にあるRaw Print関係でコメントアウトしてあるapplication/octet-streamを有効にする。

########################################################################
#
# Raw print file support...
#
# Uncomment the following type and the application/octet-stream
# filter line in mime.convs to allow raw file printing without the
# -oraw option.
#

application/octet-stream

また/etc/cups/mime.convsの、やはり末尾にあるRaw Print関係でコメントアウトしてある部分を有効にする。

########################################################################
#
# Raw filter...
#
# Uncomment the following filter and the application/octet-stream type
# in mime.types to allow printing of arbitrary files without the -oraw
# option.
#

application/octet-stream        application/vnd.cups-raw        0       -

さらに、おそらくここが勘所だと思うのだが、/etc/cups/cupsd.confでlocalhostだけが許可されているアクセス制限をLAN内に拡張する。なお、ここに関してはこのページが参考になった。CUPSの設定にはlocationという概念があることが分かったのは非常に有りがたかった。
CUPSでLinuxのプリンタ (PIXUS) を共有する | Netsphere Laboratories
まず1つ目。


Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From @LOCAL

これはルート(/)のlocationの設定変更、と思われる。つまり設定全般におけるアクセス許可。Allow From @LOCALを追加した。Allow From 192.168.1.0/24でも良いと思うのだが、@LOCALという簡単な記述法があったので使ってみた。
2つ目。


#
# You definitely will want to limit access to the administration functions.
# The default configuration requires a local connection from a user who
# is a member of the system group to do any admin tasks.  You can change
# the group name using the SystemGroup directive.
#

AuthType Basic
AuthClass System

## Restrict access to local domain
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From @LOCAL

#Encryption Required

こちらは/adminにおけるアクセス許可。やはりAllow From @LOCALを追加した。

CUPSが…動いてない(;_;)

この後にCUPSを再起動すれば、変更した設定が読み込まれて万々歳、のはずなのだが、問題がまだ残っていた。なぜかうちのファイルサーバでは、CUPSが動いていなかった。結果から言えば/etc/rc.d/init.d/cupsと/etc/rc.d/init.d/cups-config-daemonが実行可能になっていなかった。
ということでchmod 755として実行可能にして

# /etc/init.d/cups restart

とやれば、ちゃんとCUPSが起動してくれた。
#こうあっさり書いているが、どうすれば動いてくれるのか3時間ぐらい悩んだ。Linuxさわるのは久しぶりだったので。CUPSの再インストールもしようとしたのだが、makeに失敗したので中断した。ひとまず、かなりしんどかった。

プリントできた

ここまで設定して、ようやくSAMBAからCUPS経由で打ち出しが出来た。

CUPS直接で

しかし、SAMBAのネットワークプリンタだと、なぜかやたらと遅い。CUPSで直接打ち出せるならSAMBAを使う必要もない。ということで先ほどのCUPSでLinuxのプリンタ (PIXUS) を共有する | Netsphere Laboratoriesを参照しつつ、プリンタドライバの設定を行った。しかし、なんだか上手くいかなかったので、ちょっといじってみた。/etc/cups/cupsd.confの末尾に、自動的に作られた設定だと思われる記述があった。

# Lines below are automatically generated - DO NOT EDIT

Order Deny,Allow
Deny From All
Allow From 127.0.0.1
AuthType None

Browsing On
BrowseProtocols cups
BrowseOrder Deny,Allow
BrowseAllow from @LOCAL
Listen 127.0.0.1:631

この/printers/PM-D600のlocationにAllow From @LOCALを追加した。
また、/etc/cups/cupsd.confの中程に

######## Network Options
########

#
# Ports/addresses that we listen to.  The default port 631 is reserved
# for the Internet Printing Protocol (IPP) and is what we use here.
#
# You can have multiple Port/Listen lines to listen to more than one
# port or address, or to restrict access:
#
#    Port 80
#    Port 631
#    Listen hostname
#    Listen hostname:80
#    Listen hostname:631
#    Listen 1.2.3.4
#    Listen 1.2.3.4:631
#

というのがあったので、

Listen 192.168.1.xx:631

というのを追加してみた。(もちろんファイルサーバのIPアドレス)
これだとSAMBA経由に比べてやたら速い。ありがたい。

プリンタ電源切ったら設定が消えた

しかし。
やはり

# Lines below are automatically generated - DO NOT EDIT

と書いてあるところをいじって設定したためか、翌日にはAllow From @LOCALが消えていた。
#いや、もしかしたら/etc/rc.d/init.d/cups-config-daemonって何だろう、と思って実行したせいかな?よく分かりません。
ということで、以下のような場所に移し替えてみた。

#
#
# You may wish to limit access to printers and classes, either with Allow
# and Deny lines, or by requiring a username and password.
#

Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From @LOCAL
AuthType None
 
Browsing On
BrowseProtocols cups
BrowseOrder Deny,Allow
BrowseAllow from @LOCAL
Listen 127.0.0.1:631
Listen 192.168.1.xx:631

もちろん別の場所に書いていたListen 192.168.1.xx:631は削除した。

Macで打ち出したい

こうなると、WindowsだけでなくMac OSX (10.3.9)からも打ち出したくなるのが人の情というものであろう(意味不明)。
ということで、その方法も探ってみた。

ドライバ

まずはドライバ探し。Gimp-PrintというのでEPSONのプリンタへの出力が出来ることは知っていたので、Gimp-Printの最新版を探してみた。すると、名前が変わっていた。
Gutenprint - Top Quality Printer Drivers download | SourceForge.net
これをインストールすると、ちゃんとPM-D600のドライバも入っている。ありがたい。

プリンタ設定ユーティリティの設定

続いて、CUPSでの出力。ユーティリティのプリンタ設定ユーティリティを起動し、optionキーを押しながら「追加」ボタンをクリックする。そうすると「詳細」という項目が選択できる。
#内容は異なるが3/3 古いプリンタをMacで使う [Mac OSの使い方] All Aboutに「詳細」項目が表示されているので参考に。
ここで「装置名」から「Internet Printing Protocol(IPP使用)」または「Internet Printing Protocol(HTTP使用)」を選択し、装置名に「PM-D600」、装置のURIに「ipp://192.168.1.xx:631/printers/PM-D600」(IPPの場合。HTTPの場合には冒頭をhttp://に変更する)というように入力する。また、「プリンタの機種」はEPSONを選択し、さらにその下に出てくる名前から「Epson PM D600 - CUPS+Gutenprint v5.0.0」を選択した。

色ずれ

これでMac OSXからPM-D600へ印刷が出来るようになった。たしかにできる。
しかし。色ずれが生じている。PM-D600は4色インクなのだが、黒と青(シアン)は正しい位置に印刷されているが、赤(マゼンタ)はその1cmほど下、黄色はさらにその1cmほど下に印刷されている…。これでは使えん。



'08/12/25追記:
EPSON Stylus Photo R240を選択することで色ずれなく印刷できた!
Gutenprint 5.2.3でLeopardからSMB経由でプリンタPM-D600へ印刷 - 子子子子子子(ねこのここねこ)