SmallStyle


2010-12-19

_ QNAP TS-219p で CUPS-PDF を利用した AirPrint 環境を構築しようとしてあきらめた記録

バックアップに利用していた USB HDD の容量が少ないし NAS でも買うか,ということで QNAP TS-219p を先日購入.2 ベイのストレージサーバーで,ソフトウエアも必要なものがそろってる.どうしても気に入らなければ,Debian にのせかえることもできるので,のちのちでも使えそう.HDD には値段も手ごろになってきた 2TB の HDD を.これで当面ストレージに困ることはないだろう.TimeMachine に 1TB の容量を割り当てて,残りは適当に利用できるスペースに.ギガビットで構築された LAN 環境ではネットワーク越しでのファイルのコピーもなかなか快適.

もともとの目的だったストレージとしては買ってきてすぐにできあがってしまったわけで,それ以外にも遊べそうなこと…ということで,QPKG ソフトウエアパッケージを利用して,もう少し機能追加してみることにした.QNAP を選択した理由の一つは標準でこうしたパッケージシステムを利用できるから.そんなわけで,CUPS と CUPS-PDF を利用した PDF 印刷サーバーを構築して AirPrint に対応させてみることにした.先に結論だけ書いておくと,タイトル通り AirPrint で印刷までは実現できていない.まぁ,Mac や Linux なマシンがあれば,簡単に同じような仕組みは作れます.とはいうものの,PC が立ち上がっているということは,印刷するのは PC 使ってしまった方がよっぽど楽だろうというわけで,NAS のように常時稼働している環境なら,こうした仕組みがあると便利なことがあるかもしれない.

前置きが長くなったけど,TS-219p で PDF プリントサーバーを構築した記録へ.

Optware のインストール

まずは QNAP の管理画面から QKPG プラグインのインストールで Optware IPKG(Itsy Package Management System) をインストールします.組み込み向けのパッケジ管理システムで,/opt 以下に導入したアプリケーションがインストールされます.

CUPS,CUPS-PDF のインストール

基本は QNAP NAS Community Forum の [Basic HOW-TO] use CUPS & CUPS-PDF on TS-x09 & x19 series を参照.ただ,この通りに進めても自分の環境ではうまく動作しなかったので,その辺りの記録も含めて.

まずは,先にインストールした Optware を利用して,CUPS と CUPS-PDF をインストール.CUPS の管理画面を日本語で表示する場合は,日本語化のパッケージもインストールしておく.

# ipkg update
# ipkg install cups
# ipkg install cups-doc
# ipkg install cups-pdf

インストールすると /opt/etc/cups 以下に設定ファイルができるので編集する.

# cd /opt/etc/cups
# mv cupsd.conf cupsd.conf.orig
# cp cupsd.conf.default cupsd.conf

cupsd.conf は Port 631 を追加し,SystemGroup administrators に変更したり,Allow @LOCAL を追加したりします.のちのち Bonjour でネットワーク PDF プリントサーバーとかにする場合は,ServerAlias ホスト名.local も追加しておく必要あり.

cups-pdf.conf は AnonUser admin,Grp administrators を追記します.AnonUser は普通は guest ユーザーとかにするんでしょうが,この環境では admin ユーザー以外は PDF 作成後の permission の設定でエラーになってしまい,どうにもよくわからなかったので,ひとまず admin で出力するようにしています.どっちにしても個人で利用する分にはこれで問題なですけど.

さらに cups-pdf の実行権限を変更します.

# ls -l /opt/lib/cups/backend/cups-pdf 
-rwxr-xr-x    1 admin    administ    22888 Nov 30 08:57 /opt/lib/cups/backend/cups-pdf*
# chmod 700 /opt/lib/cups/backend/cups-pdf
# ls -l /opt/lib/cups/backend/cups-pdf     
-rwx------    1 admin    administ    22888 Nov 30 08:57 /opt/lib/cups/backend/cups-pdf*

標準の状態では実行権限がおかしいとかなって印刷実行時にエラーログが出力され動作しません.permission の設定を上記のように指定すると問題なく生成されました.

CUPS の実行とプリンタの追加

とりあえずここまで設定できたら cupsd を実行してみる.

# killall cupsd
# cupsd

http://<QNAP>:631/ にアクセスして CUPS の Web 画面が表示されれば問題なし.まずは Administration でサーバーの設定を変更します."Share printers connected to this system" と "Allow printing from the Internet" にチェックをいれて設定しておく.

そして CUPS-PDF をプリンタとして追加します.Local Printers に CUPS-PDF があるので選択,名前や説明などを入力し,Sharing にチェックをいれる.Generic を選択し,Model は Generic CUPS-PDF Printer にしてプリンタを追加.デフォルト設定は A4 にして 300DPI を選択してみます.試しにテスト印刷をしてみると,テストページが admin の spool に出力されます.

# ls -l /opt/var/spool/cups-pdf/admin
-rw-------    1 admin    administ    26886 Dec 19 18:22 Test_Page.pdf

AirPrint を利用してこの PDF プリンターの存在を通知するには Bonjour を利用することになる.QNAP TS-219p では mDNSResponderPosix を利用できるわけで,これを利用してみる.AirPrint で必要な内容は,AirPrint with Ubuntu 10.10 に記載されている内容と同じような感じで設定する.実際,VMware 上の Ubuntu で同じようにやってみると,確かに iPhone,iPad から VMware 上の CUPS-PDF プリンタを参照できる.QNAP TS-219p 上でも以下のように実行してみたけど,iMac からは見ることができても,iPhone,iPad からは見つからない.原因は subtype の _universal がついていないから,ということはわかったけど,mDNSResponderPosix において subtype の指定方法がわからない.type にカンマ区切りで続けてみてもエラーとなるし.

# /usr/sbin/mDNSResponderPosix -n "QNAP-219p(AirPrint)" -t _ipp._tcp. -p 631 -x URF=none pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf Transparent=T printer-type=0x801046 printer-state=3 product=virtualprinter priority=0 note=QNAP-219p  ty=CUPS-PDF rp=printers/CUPS-PDF qtotal=1 txtver=1

と,ここまでやっていい加減調べるのがしんどくなってきたので終了.ipkg で Avahi もインストールできるっぽいからそっちも試してみてもいいんだろうけど,もともと mDNSResponderPosix で動いているものと共存できるのかよくわからないのでこっちは試していない.さらっと記録としては終わってしまってるけど,CUPS-PDF で結構はまった.はじめは cups-pdf そのものがうまく動作しなかったこと.テストページの印刷指示を出すと,job 自体は完了するけど何も出力されない….ログを見ても何でていないので何が問題なのかさっぱりわからない.フォーラムに記述されているようにスティッキービットをつけると,

E [19/Dec/2010:00:00:00 +0900] Unable to execute /opt/lib/cups/backend/cups-pdf: insecure file permissions (0104755)

といった具合でエラーになる.そんなわけで,ふと思い立って permission を admin のみに実行権限を与えてやったらうまくいったというわけ.これで,管理画面やコマンドラインからの admin での印刷はうまくいくことが確認できた.で,guest ユーザーやら登録済みのユーザーとかでも印刷できるかと試してみたら,

Sun Dec 19 00:00:00 2010  [DEBUG] GID set for current user
Sun Dec 19 00:00:00 2010  [DEBUG] UID set for current user (guest)
Sun Dec 19 00:00:00 2010  [DEBUG] ghostscript has finished (256)
Sun Dec 19 00:00:00 2010  [ERROR] failed to set file mode for PDF file (non fatal) (/opt/var/spool/cups-pdf/ANONYMOUS/210.pdf)

これがまたよくわからなかった.こっちは結局 AnonUser を admin ユーザーとすることで回避できた.

結果としては,結局,AirPrint として利用できる環境までは作れなかったけど,CUPS と CUPS-PDF を利用した仕組みについて知ることができたのはおもしろかったけどね.


最近の日記