AirPrint可能なプリンタ共有にしておく
iOS4.2.1がリリースされ、iPadもいよいよマルチタスキングに対応して、その使い勝手が向上してきた。追加された機能の詳細は、以下のページが詳しい。
最大のウリであるAirPlayと並んで、気になる機能にAirPrintがある。これは、iPadやiPhoneから無線LAN経由で印刷する機能。個人的には、iPadは紙に代わるメディア(写真のアルバムや電子書籍、PDFビューア等)として存在しているのに、今さら紙に印刷するのは流れに逆行するように思えてしまう。しかし今後、iPadでの作業が主流になり、MacBookなどは家庭内のサーバー的な役割になってくると、いずれは紙に印刷機能も必要になってくるのかもしれない。いくら薄く安価になっても、iPadが完全に紙の代替になることはあり得ず、どうしても紙に印刷する需要は残ってしまう。(例えば、そろそろ気になってくる年賀状だろうか)
ところが、このAirPrint、現状ではヒューレッド・パッカードのプリンタしか対応していない。当初はOSXでプリンタ共有されたプリンタからも印刷できたらしいのだが、OSX 10.6.5が正式リリースされた時に、その機能は削除されてしまったらしい。理由は分からないが、非常に残念ことだ。
でも、世界は広い。そして、どこかで誰かが同じように残念に思って、どうにかAirPlay対応のプリンタ共有を復活できないかと試行錯誤し、優秀な人達は、遂に復活させてしまった!その情報には、東の端っこの島国に住む自分でも簡単にアクセスできる。Webの力って凄い。
あるいは...
手順
- 作業前には、必ずバックアップして、いつでも元の環境に戻せるようにしておくべき。
- TimeMachineなら安全確実にマシン環境全体を復元できるので、気兼ねなく作業できる。
MacBookでの作業
- OSX 10.6.5にアップデートしておく。
- 必要なファイルAirPrintFix-ChuckG.zipをダウンロードして、解凍する。
- 上記ファイルを必要な場所にコピーする。(管理者権限が必要)
$ sudo cp ~/Downloads/AirPrintFix-ChuckG/urftopdf /usr/libexec/cups/filter/ $ sudo cp ~/Downloads/AirPrintFix-ChuckG/mime/* /usr/share/cups/mime/
- システム環境設定 >> プリントとファックス を開いて、AirPrint対応なプリンタ共有にするプリンタを一旦取り除く。(−ボタンを押す)
- MacBookを再起動。
- システム環境設定 >> プリントとファックス を開いて、追加ボタンを押して、プリンタを追加した。(+ボタンを押す)
- 「ネットワークでこのプリンタを共有」にチェック入りにする。
専用アプリ
- 上記のコマンド部分の操作を、簡潔に実行してくれるアプリケーションもリリースされていた。(素晴らしい!)
- アプリケーションの中には、AppleScriptとurftopdf、apple.convs、apple.typesが入っていた。
- おそらく、上記のコマンドと同等のことをAppleScriptが実行してくれるのだと思う。
仕組み
apple.convs・apple.typesの差分
- OSX 10.6.5のapple.convs・apple.typesと、ダウンロードしたAirPrintFix-ChuckGのapple.convs・apple.typesの差分は以下のようになった。
- image/urf形式のデータを、PDFに変換する処理が追加されているようだ。
$ diff -u /usr/share/cups/mime/apple.convs ~/Downloads/AirPrintHacktivator.app/Contents/Resources/apple.convs --- /usr/share/cups/mime/apple.convs 2009-06-23 16:53:27.000000000 +0900 +++ ~/Downloads/AirPrintHacktivator.app/Contents/Resources/apple.convs 2010-11-22 09:17:19.000000000 +0900 @@ -30,6 +30,7 @@ # tries to mimic the Preview application (and actually respects embedded # ColorSync profiles, etc...) image/* application/pdf 25 cgimagetopdf +image/urf application/pdf 0 urftopdf # For pdf to pdf conversion with features applied application/pdf application/vnd.apple-pdf 25 cgpdftopdf
- +image/urf application/pdf 0 urftopdf
- image/urf形式を、application/pdf形式に変換するには、コスト0で、urftopdfフィルタ(実行コード)を使う、という設定。
- では、image/urf形式とは何か?と言えば、apple.typesに以下のように定義されている。
$ diff -u /usr/share/cups/mime/apple.types ~/Downloads/AirPrintHacktivator.app/Contents/Resources/apple.types --- /usr/share/cups/mime/apple.types 2009-06-23 16:53:27.000000000 +0900 +++ ~/Downloads/AirPrintHacktivator.app/Contents/Resources/apple.types 2010-11-22 09:17:19.000000000 +0900 @@ -4,6 +4,8 @@ # Copyright 2002-2009 Apple Inc. All rights reserved. # +image/urf urf string(0,UNIRAST<00>) + application/pictwps pictwps string(0,<726244470001>) text/rtf rtf string(0,"{\rtf") priority(200)
- +image/urf urf string(0,UNIRAST<00>)
- image/urf形式とは、urf拡張子を持ち、ファイルの先頭が UNIRAST<00> という文字列で始まるファイル。
- しかし、image/urf形式の中身や利用される状況というのは、結局のところ分からなかった...。
- /usr/libexec/cups/filter/urftopdfについては、新規の追加ファイルである。urfをpdfに変換するフィルタ。
コストとは
- 世の中には様々なプリンタがあり、印刷するためには、それぞれのプリンタに適合するデータに変換する必要がある。
- その処理を行うのが /usr/libexec/cups/filter/ 以下にある実行ファイルのようだ。
- 目指すデータ形式に変換するまでに、通常、複数のフィルタが組み合わされる。
- その組み合わせをフィルタの経路と言い、もしかしたらその経路は複数存在するかもしれない。
- その中から最適な経路を決定するために、コストが判断材料になるようだ。
- なるべく少ないコストの経路が選択されるのだ。
- コストが0ということは、最も優先されるフィルタ、と言うことになる。
AirPrintの使い心地
- Numbersでは、A4サイズは固定だが、用紙の縦・横と拡大・縮小の調整は出来た。
- 横方向に切り替えてみた。
- スライダーを動かせば、拡大・縮小できる。
- 用紙切れなど何らかのエラーで印刷が停止すると、アラートが表示された。
- キャンセル ボタンを押すと、残りの印刷ジョブは削除された。
- 用紙を追加するなどしてエラーの要因を取り除けば、アラートは消え、自動的に印刷は再開される。
- 続ける ボタンを押すと、アラートは消えるが、エラーの要因を解消するまでは印刷できない。
CUPS管理ページ
- http://localhost:631/
- 上記ページにアクセスすることで、CUPSの様々な設定が出来る。
- 続ける ボタンを押したけども、やっぱり途中で印刷をキャンセルしたい時などは、ジョブの管理ページから削除できた。
- AirPrint中にキャンセルする方法 - ザリガニが見ていた...。
- ちなみに、AirPrint中であっても、MacBookのプリントキューにはジョブは表示されない。
- エラーが発生すると、エラーの状態だけは表示された。
所感
参考ページ
- Chapter 22. CUPS印刷環境のサポート(感謝です!)