Ubuntu Weekly Recipe

第271回 WindowsをPostScriptプリンターにしてUbuntuから快適印刷

この記事を読むのに必要な時間:およそ 7 分

こんにちは。流れのプリンター愛好家ことおがさわらなるひこと申します。プリンターのことしかわからない変わり者ですが,どうぞよろしくお願いします。

新年度も始まり,新しい環境での生活をスタートされた方も多いかと思います。配属先や研究室などで楽しいUbuntu生活を送るためには,所属先にあるいろいろな機器,例えばプリンターなどを使えるようにしたいですよね。……という書き出しは第218回からのコピペです。

さて,1年前のRecipeではUbuntuで最初からサポートされているPostScriptやその他Ghostscriptが標準でサポートしているプリンターの使い方を説明しました。今回は,そうでないプリンターしか手元にない,けれどもUbuntuから印刷したい場合,Windowsを踏み台にして「まるでそのプリンターがPostScriptプリンターであるかのように」Ubuntuから印刷する方法をご紹介します。第218回の知識と補完する形になるので,できれば両方お読みいただけると幸いです。

なお筆者の所有するWindows環境はWindows 7 Home Premium 64bit版になります。エディション違いや32bit版,Vistaでも多分同様の操作で実現できると思います。残念ながらWindows 8での操作は確認できませんでしたので,各自お試しになって結果をお知らせください。

用語の確認

ここは第218回の復習になりますが,念のためもう一度ご説明しましょう。

Ubuntuの印刷システムがCUPSというソフトウェアを中心にしているのは,みなさまもご存知かと思います。ここで詳しくは説明はしませんが,次のことを抑えておきましょう。

  • CUPSベースの印刷システムはAdobe社のPostScriptやPDFを内部データとして使っている
  • CUPSはそれぞれのプリンターごとに,⁠PPD」「印刷データフィルター」の組を管理している。併せてプリンタードライバーと呼ぶ(こともある)
    • PPDとはプリンターごとに,印刷について設定する項目と,それぞれの項目の選択肢を記述するファイル
    • 印刷データフィルターはCUPSの内部データから,プリンターが解釈することができる画像を示すデータ(PDL)に変換するモジュール

システムメニューから「システム設定」を選んで,⁠プリンター」をクリックすると表示されるダイアログ「プリンター - localhost」は,system-config-printer(通称SCP)という名前のプログラムです注1)⁠プリンターを追加したり設定したりするときにはSCPを活用することになります。

注1)
実はUbuntuの上流であるGNOME 3では,プリンターの設定を行うプログラムを新たに再設計しています。しかしUbuntuではSCPに色々と手を加えていることもあって,当面SCPを利用し続けることになっています。本稿執筆時点で追い込みに入っている13.04でも,当初は機能のいくつかをGNOME側に移植してGNOMEの印刷設定モジュールを使おうという議論もあったのですが,結局SCPを継続して利用することに決まりました。

図1 system-config-printerを起動した画面

図1 system-config-printerを起動した画面

それから,ちょっとややこしいのですが,先に述べた「PPD」「印刷データフィルター」の組である「プリンタードライバー」というソフトウェアをインストールすることと,それらを使ってプリンターを利用できるようにすることは,厳密にいえば異なる操作です。この記事では前者を「ドライバーのインストール」⁠後者を「プリンターの追加」と呼びます。

また,今回はWindows側を踏み台にして印刷を行うことになるので,そちらのほうも確認しておきましょう。

Windowsの場合はCUPSベースの印刷システムと違い,アプリケーションからの描画指定に対して,GDIというモジュールを介して「プリンタードライバー」注2)⁠ が呼ばれ,プリンターが解釈可能なデータが生成されます。

注2)
厳密には「プリンタードライバー」の2つのコアモジュールのうち1つ,⁠グラフィックスドライバー」ですが,ここでは詳しく踏み込みません。

生成したデータを実際にプリンターに届けるために,Windowsスプーラーでは「ポート」という概念を用意しています。通常は,1つのポートは1つの物理的なプリンターに対応します注3)⁠いくつかあるポートは,その「種類」によって「ポートモニター」と呼ばれるモジュールが管理します。例えば「標準TCP/IPポート」などはWindows標準のポートモニターですし,特別な種類のポートを作成・管理するために,専用のポートモニターを自前でインストールすることもできます(今回はこの操作を行います)⁠

注3)
古典的には,ポートはプリンターにではなく「プリンターに情報を流すPC側の出口」に対応していました。具体的にいえば,IEEE 1284ポート(俗にいうパラレルポートとかセントロ,セントロニクスと呼ばれるもの)です。これらは先にどんなデバイスつながっているかを関知せず,データの受け渡しだけを標準化しています。今でもWindowsはソフトウェア的にはこれらを標準でサポートしており,LPT1などといった「ポート名」が存在しています。USBなどが「つながっている物理的な場所」ではなく「つながっているデバイス」で認識されているのとは大きく異なります。

ここで注意したいのは,異なるOSのプリンター共有においては,クライアント側ですべての印刷データを作成し,サーバー側のプリンタードライバーは使われない(プリンターポートからの出力だけ用いられる)ということです。つまり,例えばUbuntuからWindowsのプリンターに印刷する場合は,Windows側で使われるのはスプーラーとポートモニター(とその管理下にあるポート)だけということになります。

ちょっと言葉だとわかりにくいので簡単な説明図を描いてみました。

図2 Windowsの印刷システムにおけるポートモニターとポート

図2 Windowsの印刷システムにおけるポートモニターとポート

今回やりたいことの確認

今回のRecipeでやりたいことをもう一度,いままで説明してきた概念を用いて振り返ってみます。

  • ある程度自由にできるWindowsマシンを1台用意します。そのWindowsマシンは印刷可能なプリンターアイコンを持っていなければなりません。
  • Windows版のGhostscriptをインストールし,そのWindowsマシンでPostScriptをレンダリングして印刷可能にします。
  • 特別なポートモニターRedirection Port Monitor(RedMon)をインストールします。名前のとおり,⁠ポートモニターとして印刷データを受け取って,それを何か別のものにリダイレクトする」ポートモニターです。今回はこれを使ってGhostscriptを動かすことを狙っています。
  • RedMonをポートとする適当なプリンターアイコンを1個作り,それを適当な共有名をつけて登録します。
  • Ubuntuからの作業は,このプリンターを共有して,WindowsにPostScriptの印刷データを流せるように設定するだけです。

実はWindowsの作業のほうが長くなってしまうのですが,一度共有プリンターを作ってしまえばネットワーク内のすべてのUbuntuから印刷が可能になるので効果は大きいです。

この方法は実のところ,比較的古くから知られていたのですが,鍵となるモジュールであるRedMonの開発がしばらくの間,停止しており,そのために64bit環境とVista以降のOSでは利用できない状態が続いていました。2012年6月に長い空白を破ってRedMonがバージョンアップしたので,今回ご紹介できるようになったというわけです。

著者プロフィール

おがさわらなるひこ

流離のプリンター愛好家。(株)ミライト情報システム所属。印刷技術を中心に,フリーでオープンなデスクトップ環境の向上のためにあちこちに顔を出しています。

Twitter@naru0ga

コメント

  • Win7の設定について

    『Windows の機能のオン/オフ』で、『LDP の印刷サービス』をONにしないと印刷出来ないような気がしますが。

    Commented : #1   (2014/10/19, 14:10)

コメントの記入