Ubuntu を Google Cloud Print のサーバーにしてみる
本当は Google Cloud Print の中を覗いてみたかったんですが、今日中に調べて記事をかけるとは思えなかったので、ただ使うだけ。スミマセン。
Google Cloud Print とは
これ読め、で終わってしまうんですが……。
要は、クラウドの向こう側にあるアプリケーション (例えば Google Docs とか) から、クラウドの向こうにあるサーバーに対して印刷リクエストを投げると、サーバーに登録してあるプリンターからネットワーク上で作られたデータが降ってくるというものです。
というと、パーソナルコンピューティングではイマイチよさがわかんないんですけど、モバイルとの組み合わせで強さを発揮するんですよね。
例えば、スマートフォンから印刷するってシチュエーションを考えたときに、スマートフォンでわざわざ印刷したいリッチなドキュメントを作ってそれを印刷するっていうより、クラウドの向こう側にあるドキュメントをスマートフォンの画面から覗き込んで印刷するってシチュエーションの方がずっとありえると思いますし、そのときに、資源が少ないモバイルデバイスで印刷データを作るより、そこよりはずっと豊富な資源があるネットワークの側で印刷データを作ったほうがいいですよね。
ということで、私自身は iOS や Android から直接印刷するソリューションはどっちかというとタブレット系端末向けで、スマートフォンについては Google Cloud Print の方が面白いんじゃないかと思ってます。そもそも Google 依存なのはどうなのよとか、それ以外にも面白くするためのアイディアもいくつかあるんですが、それはまたの機会に。
Google Cloud Print と Ubuntu のステキな関係
Apple AirPrint もそうなんですが、Google Cloud Print は本来、サポートしたプリンターを必要とします。ネットワークから降ってくる印刷データを受け取れる機能を持ってなきゃいけないんですね。
例えば我が愛用の HP Photosmart Wireless B110a
HP Photosmart Wireless B110a インターネット直接接続・無線対応・黒顔料・4色独立インク A4インクジェット複合機 CN248C#ABJ
- 出版社/メーカー: ヒューレット・パッカード
- 発売日: 2010/08/05
- メディア: Personal Computers
- 購入: 12人 クリック: 254回
- この商品を含むブログ (26件) を見る
もちろん Google さんも、プリンターベンダーがサポートしてくれないと自分たちのサービスが使えないってのは困るので、PC を「プロキシー」にして、PC に接続されたプリンターを使う仕組みを提供してます。これ、Google Chrome のプラグインとして提供されてるんですけど、Linux 版ではまだサポートされてないんですよねー。というか、サポートするかどうかも怪しい。
ですが、実のところ Google Cloud Print は REST API でサーバーとお話ができ、PDF を印刷データ形式として食えればいいので、技術的には Linux マシンをプロキシーにするのはさほど困難ではありません。といってたら 作っちゃった人 がいて、これは Ubuntu 11.10 のときに標準化されたんですよね。
ソース見れば分かりますけど Python スクリプトで書かれてて、一個は Python で REST をサポートする API を提供するスクリプトで、本体はそれほど難しくないです。ので、いつかは中を読みといてみようかと。今日は使うだけ。
使ってみよう
説明するまでもなく簡単です。
まずは apt-get でインストールして、
$ sudo apt-get install cloudprint
お試しで使うならデーモンモードでコマンドラインから起動。
$ cloudprint -d Google username: naruoga@gmail.com Password: Added Printer Ricoh-Aficio-MP-C4501A Added Printer Generic-PostScript-foomatic Added Printer Generic-PostScript Added Printer HP-Photosmart-B110-series Added Printer Ricoh-Aficio-SP-4100NL Added Printer Generic-PCL-6-PCL-XL $ started with pid 9176
ここで追加されてるプリンターたちは、CUPS で共有設定されてる奴です。それを Google Cloud Print のサーバーに登録してるというわけ。
んで Android から Google Docs アプリを開けて「Print...」を押すと、上記で登録したプリンターがぞろぞろって出てきて、それを選ぶとおもむろに CUPS にジョブが投入されて印刷されます。本来ならスクリーンキャプチャ撮って載せればよかったんですがめんどうだったので……あとで気が向いたら載せます。
投入された印刷ジョブを確認してみよう
d:id:naruoga:20120101:1325421043 のように foomatic のデバッグオプションを使って印刷ジョブの情報を確認してみましょう。
foomatic-rip version 4.0.9.241 running... called with arguments: '78', 'naruhiko', 'terms-new', '1', 'ColorModel=FromPrintoutMode Duplex=None InputSlot=Default PageRegion=A4 PageSize=A4 PrinterResolution=FromPrintoutMode PrintoutMode=Normal.Gray xsrf_token=AIp06Dhimkcn7TCoD4aOkLaZc_DT4ssThg:1326459650523 job-uuid=urn:uuid:deffe527-eaa0-3327-66d4-46399f5a8336 job-originating-host-name=localhost time-at-creation=1326459657 time-at-processing=1326459657'
あんまり大したことはわかりませんが(をい)、第三引数に Google Docs の文書名がそのまま渡されていること、用紙サイズなどのデータはオプションで引き渡されること、などは見て取れますね。PrintoutMode=Normal.Gray なのはなんでだっけな。