おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

2013年のLinux印刷事情をまとめてみたよ

本当は年末に書くつもりだったのですが、ずるずると遅れてしまいました。どうもすんません。
でも2013年はあんまり面白い出来事がなかったというのが正直なとこなんですよねえ。どうにも書きにくいな。困ったな。

CUPS 1.7 リリース

OS Xがリリースされるとき、それはCUPSがリリースされるときでもあります。ということでOS X Marvericksのリリースと同時にCUPS 1.7もリリースされました。聞いてないと思いますが日本語の翻訳をやったのは私です。

なお、何度か書いていることではありますがAppleという会社はOSその他のリリーススケジュールをいかなる形でも明らかにしない会社であります。そしてCUPSはOS Xでリリースされるものが最初のstableになるので、Ubuntu 13.10のリリース前に「いつ正式版出るの?」「それはね、明らかにできないんだよ」というやりとりがあり、結果不幸にして間に合わずにバージョンとしては cups_1.7.0~rc1-0ubuntu5 (2014.1.9現在)となっているわけですな。こういうところがAppleの好きくないところ。まあ、いいけど。

変更点についてはCUPSのサイトを見れば分かるのですが、ユーザーに目で見えて分かる変更というのはあんまりないです。一応、IPP (Internet Printing Protocol)によって規定されたPaid Printing(課金印刷*1)とかPIN(個人認証番号*2)とかそういう機能拡張はあって、エンタープライズには重要なことは重要なのですが、今のところCUPS側がサポートしたとしても周囲のエコシステム(例えばアプリケーション/GTK-Printとかsystem-config-printerとか)がサポートしてないとねえって感じだし、そもそもプリンター側がIPPのExtensionをサポートしてないと意味がない気がするのですよね。サポートするのかなあ。ここらへん、Marveriks はトータルの印刷システムとしてサポートしとるんじゃろうか。ちょいと気になる。

あと小さな変更としてはippfindっていうIPP対応のプリンターを検索するツールが追加されたりとか、逆に、今まで同梱されてたipptoolっていうIPPのテストツールが別パッケージに別れたというのはあります。ipptoolについては、IPP自体の相互接続性検証(Self Certification)で使うことを考えて、もし相互接続試験がipptoolのバグで落ちたとしたら、そのバグをfixするためにCUPSのバージョン上げるのってイヤじゃね? という議論が春のPrinting Summitであったので、そのためにパッケージが別れたんでしょう。

CUPS サーバーダウンと復活

CUPSのサーバーはCUPSがAppleの持ち物となってからも、旧ESP*3 でホストされてたそうなんですが、昨年の春ぐらいに物理的にサーバーがお亡くなりになり、サーバーがホストしてた:

が全部止まるという大惨事になりました。アナウンス手段すら止まっちゃったんでCUPS 1.7β1のリリースには誰も気づいてなかったという……

Appleさんさすがに資源は山ほど持ってるようで配布サーバーと静的コンテンツはすぐに復旧したんですが、人手が足りなかったせいか各種サービス類がまったく復旧せず。「バグレポートについてはAppleのバグレポかdownstreamに通知してくれ」ってぺろっと書いてあるだけというのはいろいろ困ったんじゃないかなあ*4

Marvericksリリース後、人的リソースが投入されたのかふと見たらニュースヘッドラインとメーリングリスト兼バグレポートシステムは復活してたんだけど(Webフォーラムは廃止された)、ソースコードリポジトリはどっかにいっちゃった。まあ、今までもApple内部リポジトリで原則開発は進んでて、定期的にtrunkに入れるってスタイルだったみたいなので、それがtar玉ベースになっただけといえばいえます。一応、SubversionからGitに移行してリポジトリ公開はするつもりはあるらしい(こんなリンクがあるので)。

いやいや、ひとまずよかったよかった。

cups-filters の改善その他

これについてはUbuntu 13.10のリリースノート見るのが早いですわね。

私のブログを読んでるような人ならご存知のとおり、元々cups-filtersに入ってるのはOS Xから要らない子扱いされたフィルター群(バックエンドも含む)に、Debian/Ubuntuで投入されていたPDF印刷パスのフィルター群を合体させたものであって、CUPS本体がPostScript印刷パスのサポートを切り捨てた(というより、OS Xで使ってるQuartz PDF印刷パスしか考慮してない)現状、Red HatSUSEもPDF印刷パスを使うことになったということが非常に大きい。で、ユーザーが増えることはFLOSSにおいては正義でして、PDF印刷パスのモジュール群はRHパワーでガシガシ修正されて、かなりバグが減ったと。よかったよかった。

も一つ、今までは主にPoppler側のカラーマッチングの機能不足とか互換性の関係で、PDF印刷パスは内部でGhostscriptをガンガン呼んでたんですよね。Popplerの進化などもあってこれをほぼ追放して、昔のエントリーで書いたPDF印刷パスのびみょいところがかなり解消された。アプリがPDFで出力してPSで印刷する、というパスの場合が顕著で、Ubuntuでいえば13.04まではちょっとした印刷でプリンター側のPSインタプリターが死ぬという有り様だったのが、13.10からは素直に印刷できるようになった。これは大きい進化ですね。

Android 4.4 (KitKat) の印刷機能

これいつの間にか入ってて、ぜんぜん追えてないので、またいずれ。使ってる技術は多分PWGで策定しているドライバレス印刷であるIPP Everywhereだと思うんですが、HPのプリンターのみに絞ってる理由がわかんない……。別途フォローアップできるといいな。

Ubuntu Touchの印刷機能

これはまだ影も形もないのでなんともいえないけど、うぶんちゅ! まがじん ざっぱ〜ん♪ vol.1にコラム書いたのでよかったら読んでね。まあ、このブログに過去に書いた内容、例えばこのエントリーにぺたんこ貼ったスライドとかも参考になるかもです。

その他

OpenPrinting Japanの活動としてアプリケーションサイドの印刷指定のUI制約をなんとかしたいねえという活動をちょっとやりました。

印刷指定のUI制約というのは、「印刷に対するある指示に依って、別の指示が不能になったり、制限されたりする」のをUIでどう表現するかって話です。すごく簡単な例でいうと「厚紙は両面の搬送パスが通れないので両面禁止」とかそういう奴。この例でいうと、ユーザーが用紙種類で「厚紙」を選んだとき:

  • ユーザーが厚紙を選んだところで、両面設定そのものを隠す
  • ユーザーが厚紙を選んだところで、両面設定そのものをグレーアウトする
  • ユーザーが厚紙を選んだところで、両面設定を「しない」にして、それ以外の選択肢を隠す
  • ユーザーが厚紙を選んでも両面設定は操作できるが、「しない」以外にした途端に「その組み合わせはダメ」とポップアップで怒る
  • ユーザーが厚紙を選んでも両面設定は操作できるが、「しない」以外の選択肢を選んで、印刷または設定保存などを選ぶと、ポップアップで怒る
  • ユーザーが厚紙を選んでも両面設定は操作でき、「しない」以外にしたところで「厚紙」設定をキャンセルする

などなどなどなど、バリエーションは山のようにあるわけです。
で、「隠す」は「選択肢が存在することそのものがわからなくなる」「なぜ選択肢が消えたのかわかりにくい」ということでユーザーに嫌われます。グレーアウトはA11y的にNGだったかな。なので、矛盾する設定があってもそのまま設定させて、最後ポップアップで弾くのがなんだかんだいって一番親切だったりしますが、ここらへんはアプリケーションサイドとの思惑もあって一概にはいえないですね。でも、プリンターベンダーとしては「存在する機能を、今使えないからといって隠すのは不味い」と思うわけです。

はてさて、CUPS印刷システムにおいてはベンダーが供給するのはPPD*5 だけで、UIはアプリケーションの責務だということは以前から述べてきました。ということで、上のような動きが今アプリに依ってまちまちなのが問題なんですね。これをうまいこと統一しましょうということで、手始めに「存在する機能を、今使えないからといって隠す」動きをしているLibreOfficeにバグレポ投げたのですが、ちょっちロジックが破綻してるみたいで華麗にスルーされてしまいました(バグレポ苦手 ><;)。LibreOfficeは印刷ダイアログ直すみたいな話をちょろっと聞いたのですが4.2でも変わってないようなので、また進め方を考えたいと思います。


こんなもんかな。
本年もダラダラとLinux印刷事情を追っかけてみようと思ってます(Printing Summitには行かない予定ですが)。よろしくです。

*1:アカウントやコインラック、プリペイドカードなどと紐付けて一枚いくらで印刷するサービス。

*2:例えば共有プリンターで印刷結果を間違って持って行かれるなどという事故を防ぐため、プリンター内に印刷ジョブをプールしておいて、認証番号を入力したら自分のジョブがその場で印刷されるとかのサービスがある。

*3:Easy Software Products。CUPS作者のMicheal Sweetが設立した会社。元々はCUPSもESPのプロダクトだった。

*4:私は翻訳の提出時にちょっと迷ったぐらいだけど、普段ならMLぼーっと眺めてれば大体の状況がわかったところ、downstreamに議論があったやつとかは拾えてないのがちょっと困りましたな。

*5:PostScript Printer Description。