AirPrintでPDFをDropboxに送る

AirPrintは、ヒューレッド・パッカード製の限られた対応プリンタでしか印刷できない仕様で登場して、最初はガッカリした。しかし、前回の日記でやったように設定すれば、MacBookでプリンタ共有しているプリンタからも印刷可能になる。これでCanonでも、EPSONでも、その他どんなメーカーのプリンタでも、プリンタ共有さえ出来れば、そこから出力されるようになったのだ。
しかし、出力先は所詮、紙...。今やお金を払ってまでも書籍を懸命に自炊(PDF化)する時代に、さらに紙代・インク代にお金をかけて、印刷するのは馬鹿げている。もしかしたら、どこかで誰かがその印刷された紙をスキャンして、せっせとPDF化することになるかもしれない。AirPrint、便利かもしれないけど、でも結局使わない、ということになってしまうと思った。
ところが、このAirPrint、実は素晴らしい可能性を秘めていた。UNIX環境には、CUPS-PDFというプリンタ設定がある。これは、印刷する時のプリンタにCUPS-PDFを選択すると、PDFを出力してくれる。言わばドライバだけの仮想プリンタのようなものである。大変便利そうなのだが、OSX環境においてはQuartzがPDFベースの描画エンジンで、画面に見えているものすべては簡単にPDF化できる。だから、CUPS-PDFを使うまでもなく、今までほとんど使っていなかった。
そこに、AirPrintが登場した。今や自分のMacBookでは、プリンタ共有さえ出来れば、どんなプリンタからも出力できるはず。どんなプリンタでも...そう、CUPS-PDFからもきっと出力できるはずだ!そのことに気付いて、早速やってみた。

CUPS-PDF

インストール
  • ダウンロードした CUPS-PDF 2.5.0 Installer.zip を解凍し、CUPS-PDF.mpkg をダブルクリック、手順に従ってインストールした。
システム環境設定
  • システム環境設定 >> プリントとファックス で+ボタンを押すと、プリンタの追加 ウィンドウには CUPS-PDF が表示されている。

  • CUPS-PDF を選択して、追加ボタンを押した。

  • 「ネットワークでこのプリンタを共有」にもチェックを入れた。
印刷
  • さっそく、MacBookからプリンタにCUPS-PDFを指定して印刷してみる。

  • 印刷結果として生成されたPDFは、/ユーザ/共有/CUPS-PDF/ からアクセスできるようになっていた。
  • 上記はエイリアスで、その実体は、/var/spool/cups-pdf/ というFinderからは不可視な階層になっていた。
  • そのCUPS-PDFフォルダの中に、印刷者であるログインユーザ名のフォルダが生成されて、そこにPDFファイルが追加されていくようだ。
  • PDFのファイル名には、ジョブ番号が付番されていた。
  • ジョブ番号は、CUPS-PDFで印刷する度に+1されて行く。
  • PDFを開いてみると、さっき印刷した内容がちゃんと表示された。


満足、満足。

AirPrint
  • 次に、iPhoneiPadからAirPrintで印刷してみた。

  • AirPrintの場合、ログインユーザ名はどうなるのだろうと思っていたら、guest ユーザとなった。
  • プリンタ共有しているMacBookで /var/spool/cups-pdf/guest フォルダが生成され、その中に印刷結果のPDFが追加されていく。
  • ところで、/var/spool/cups-pdf/guest フォルダには、guest ユーザしかアクセスできない権限が設定されていた。
  • よって、guestユーザでログインした時だけ、Finderで自由にアクセスできるようになる。
  • いつも使っているユーザでアクセスできないのは、ちょっと不便だ。どうにかしたい...。

Dropbox

  • 今やAirPrintによって、/var/spool/cups-pdf/guest フォルダにPDFが保存されるようになったことについては大満足。
  • しかし、このままではguestユーザしかアクセスできない、秘密のPDFになってしまう...。
  • 印刷結果は、自分が望む人に自由に渡せるようになって初めて、その利用価値が高まる。
  • 紙の場合は、手渡し、FAX、郵送など、手間はかかるが確実に渡せる方法を知っている。
  • それでは、guestユーザしか閲覧できないPDFファイルの場合は、どうするべきか?


そんな時こそ、Dropboxが大活躍する!

  • もはや、あまりにも便利、かつ有名になってしまったDropboxについての説明は、ここでは省略。
シンボリックリンク
  • Dropboxの素晴らしいところは、ファイルの実体をコピーしなくても、シンボリックリンクさえ入れておけば、そこにリンクされるファイルが同期されるところ。
  • フォルダのシンボリックリンクであれば、そのフォルダ以下のすべてのファイルとフォルダが同期される。
  • つまり、/var/spool/cups-pdf/ のシンボリックリンクDropboxに入れておけば、CUPS-PDFの印刷結果が自動的に同期されることになるのだ!
  • 具体的には、ターミナル.appを起動して、以下のコマンドを実行すればOK。
ln -s /var/spool/cups-pdf ~/Dropbox/
  • ~/Dropbox/cups-pdf というシンボリックリンクが追加され、/var/spool/cups-pdf/ 以下のファイルとフォルダが同期されるようになった。

/var/spool/cups-pdf/guestのアクセス権の変更

  • これでAirPrintしたすべてのPDFが同期されるようになったかと思えば、そうではなかった。
  • そう、アクセス権のない /var/spool/cups-pdf/guest 以下のファイルやフォルダは、同期されないのであった。(アクセス権がないのだから当然の結果なのだ)
  • どうしようかと暫し悩んで、/var/spool/cups-pdf/guest のアクセス権 everyone=読み出しのみ を追加してしまった。
  • 内包している項目にも適用して、現状のすべてのファイルは同期されるようになった。

CUPS-PDFの設定ファイルの変更

  • 今度こそAirPrintしたPDFがDropboxと同期されるようになったかと思いきや、まだ問題があった。
  • /var/spool/cups-pdf/guestと、その中に既に存在するPDFにはアクセスできるようになったが、
  • 新規にAirPrintしたPDFにはアクセスできない状態。
  • 新規生成されるPDFのアクセス権は相変わらず everyone=アクセス不可 で、guestしかアクセスできないのであった...。
  • ファイルは見えているのに開くことが出来ないという、もどかしいことになっている。
  • 生成されるPDFのアクセス権はCUPS-PDFが決めているはず。では、どうすればいいのか?
  • 調べてみると、CUPS-PDFには設定ファイルがあった。
    • /etc/cups/cups-pdf.conf
  • その中の Key: UserUMask を設定することで、PDF生成時のアクセス権を変更できた。
    • コメントマーク#を外して「UserUMask 0022」とすることで、GroupとEveryoneのアクセス権に「読み出しのみ」が追加された。
...(中略)...
###########################################################################
#									  #
# Security Settings							  #
#									  #
###########################################################################

### Key: AnonUMask
##  umask for anonymous output
##  these are the _inverse_ permissions to be granted
### Default: 0000

#AnonUMask 0000

### Key: UserUMask
##  umask for user output of known users
##  changing this can introduce security leaks if confidential
##  information is processed!
### Default: 0077

UserUMask 0022

### Key: Grp
##  group cups-pdf is supposed to run as - this will also be the gid for all
##  created directories and log files
### Default: lp

Grp staff
...(中略)...

ちなみに、設定の意味は以下のように理解している。

  • UserUMask 1234 となっていた場合、
    1. 不明(何の権限だろう?)
    2. 所有者の権限を制限
    3. グループの権限を制限
    4. 全員の権限を制限
  • 上記は権限を制限する設定なので、それぞれの権限は以下のように設定されるようだ。
    • 7だと、すべての権限が制限される。(つまり、アクセス権なしの状態)
    • 0だと、権限の制限なし。(つまり、フルアクセスな状態)
    • 2(2進数で 010)だと、読み・書き・実行の書き込み権限が制限される状態。(つまり、読み出しのみ可能な状態)
  • つまり、chmodコマンドとは反対の意味になるのだ。

共有

  • 一旦Dropboxで同期できれば、そのPDFは素晴らしい使い勝手になる。
  • リンクアイコンにタッチして、Email Linkを選択すれば、PDFにアクセス可能なURLを書き込んでメールを起動してくれる。

  • 共有したい人宛にそのメールを送信すれば、印刷したPDFを確認できる。(URLだけなので、メールはとっても軽いのだ)
  • 誰もが自由に閲覧するためには、シンボリックな cups-pdf を Public フォルダに入れておく必要があった。


あとは創意工夫でDropboxの機能をフル活用して、さらなる便利な使い方が見つかるかもしれない。

Printopia

  • 以上のことは、Printopiaというアプリケーションによって、ものすごくシンプルに実現できたのであった...。
  • 但し、9.95ドルの有料アプリケーションである。(デモ版は1週間だけ自由に試用できる)


お金を払って機能を買うか、お金を払わずに知恵を付けるか、それが問題だ。