ついにCUPSやってみた
自宅サーバーはLinuxだ。USBのプリンターは普通Windows用だ(極論)。家で使っているCanonのiP4600はネットで色々情報を漁るとなんかむつかしそう。rawという設定をすればクライアントでごにょごにょすればいけるというのは分かったがそれもむつかしそう。という事で今まではWindows XPとかでプリンタ共有したりして、LANDISKを買ってからはnet.USBという機能を使ってLANDISKでプリンタ共有を行っていたのだが、こないだ大掃除の時にLANDISKを棚から床にぶち落としてしまってからこのnet.USBが使えなくなってしまったみたい。進退ここに窮まれりという事でしぶしぶCUPSのrawを試す事に。
結論から言えばセキュリティーもへったくれもなければそんなに難しい話ではなかった。セキュリティ上お勧めなのから3つの方法を示す。OSはCentOS 5.5 x86_64。
方法1:公開鍵をちゃんと作ってHTTPSで管理する。
# openssl req -new -nodes -x509 -keyout /etc/cups/ssl/server.key -out /etc/cups/ssl/server.crt -days 3650
これで10年持つサーバー鍵が生成される。質問の答え方はこんなブログに来てくれるような人には釈迦に説法だろう。
方法2:管理はlocalhostからのみ行う。
/etc/cups/cupsd.confというファイルで<Location /admin>なところのEncryption RequiredをEncryption Neverに変更すると、/adminに関してもHTTPで接続できるようになるのだが、127.0.0.1以外から接続しようとするとHTTP 426でエラーになる。細かいことは検証していないが、逆に言えば127.0.0.1からならHTTPで管理できるという事だ。自宅サーバーはXサーバーを立ち上げていないので、Xを転送するか、Xvncとか使ってリモートXするか、sshでトンネル作ってとにかくCUPSにlocalhostからの接続だと判断させればHTTPSを使わなくっても管理ができる。
方法3:リモートからもHTTPでアドミンできるようにする(Danger!!!)
/etc/cups/cupsd.confのグローバルエリアとでも言うのか、よく分からなければDefaultAuthType Basicとか書いてある行の下にDefaultEncryption Neverという行を入れて再起動すると、アクセスできる場所からは全てHTTPでアドミンできるようになってしまう。セキュリティもへったくれもないがうちではこれでいくことにしよう。もちろん最低限/adminのAllowをチーズバーガーパソコンのIPアドレスのみにしておく。
上のどれかを行ったら、同じく/etc/cupsd.confの
Listen localhost:631をListen 0.0.0.0:631に書き換える(*.631に変えるとIPv6もリッスンする)。後は各LocationをAllowで適切にパーミッション切ってやる。
次に、/etc/cups/mime.typesでapplication/octet-streamがコメントアウトされていない事を確認。/etc/cups/mime.convsの最後の方にapplication/octet-stream application/vnd.cups-raw 0 -という行がコメントアウトされているので外す。それでCUPS再起動だ。
後はUSBでiP4600をぶっさし、プリンターの電源を入れる。http://hostname:631にアクセスし、管理→新しいプリンターの検索→Canon_iP4600_series_USB1とかそんなのが見つかるのでrawのRaw Queue(en)でさくさく追加。
最後に印刷したいプリンターからネットワークプリンターを追加でhttp://hostname:631/printers/Canon_iP4600_seriesと打ち込んでドライバーを選んでOKだ! すっげー。Linux君はここまで進化していたであります。こんなのがこんなカンタンにできるだなんて。