64bit Windows はまり道

64bit 版の Windows で、具体的に何が問題になるかというと、デバイスドライバーやプラグインなど、「プログラムから呼ばれるプログラム」の類です。アプリケーション自体は、32bit 用のソフトでも 64bit 版の Windows 上でほとんど動かせるのですが、

  • 古いハードウェアを使いたい場合。
  • プラグインの仕組を持っているソフトで、標準以外のプラグインを使う場合。

は要注意です。

後者は、Flash Player が未だに 64bit 版がリリースされていない*1から、ブラウザは 32 bit のまま、というのが有名です。

前者は、32 bit、64 bit の区別なく、OS を新しくする時には要注意で、メジャーなハードウェアなら、新しい OS で標準ドライバになっている可能性がありますが、マイナーなハードウェアの場合、対応デバイスドライバが無い、という事は、結構あります。

という事は分かっていたのですが...

我が家に、LBP3200 という、モノクロレーザープリンタがあります。「モノクロのドキュメント印刷は、やっぱりレーザープリンタ!」という思いがあって、一般家庭ではあまりお目にかかる物ではありませんが、下手なインクジェットプリンタよりも起動や印刷も早いので、カラーである必要が無い場合には、結構、重宝してました。

ただ、この LBP3200。正直言って、ハズレです(^^;

そもそも、LBP3200 の前に HP 製のレーザープリンタを 10 年以上使っていて、これが壊れたときに、慌てて買ったのがこの LBP3200 なのですが、当時、知らなかったんですよ、CAPT なるものの存在を。

廉価な GDI プリンタが出てきて、こいつが Windows しか使えないことは、その名が表す通りだったので、引っかからなかったのですが、CAPT がその進化の延長線上にあるとはつゆ知らず...。

昔は、プリンタというのは何らかのページ記述言語を搭載していて、そのデータを作ることさえできれば、とりあえず印刷はできるもので、OS との依存性も低かった、などと言っている時点で、年ですね(^^;

悪あがき

近いドライバを使って何とかならないか...

64bit 版のドライバが提供されているもので、LBP3210 というのがあります。先にも書いたように、昔はプリンタドライバが多少違っていても、使えるデバイス(たとえば、トレイの数とか、両面印刷ユニットの有無とか)が違ってくるだけで、結構、使えた物ですが、実際に試したところダメでした。

直接 USB でつないだら、プリンタステータスを取得するような、「プリンタ→ PC」の通信の関係で、機種が違えばダメ、となりそうなので、最初っから、おうちサーバの CUPS 経由で試していたのですが、これでもダメ。

Postscript プリンタに見せかけて...

もともと、UNIX 系 OS で CUPS 経由で印刷する場合、Postscript で記述されたデータを受け取って、CUPS に登録されているフィルタがプリンタにあわせた変換をする、というのが基本です。なので、Windows からも Postscript で CUPS サーバへデータを送れば、CUPS 側で Postscript を変換してプリンタに送り出すことができそうに思えます。

で、この作戦。なかなかうまくいきません。

CANON の CUPS サポート

CAPT プリンタを CUPS で使うためのパッケージが、CANON のウェブサイトからダウンロードでき、実際、これまでもそれを使って印刷していました。

Postscript 作戦がうまくいかないことから、この CANON のパッケージがどのように使われているかを調べて、いくつか気がついたことがあります。

パッケージに含まれる ppd ファイルを見ると、CAPT プリンタの CUPS 対応といっても、世代によっていろいろな事がわかります。 LBP3200 は第一世代で、Postscript の処理に関しては、pstocapt というフィルタプログラムを使っています*2

pstocapt に関してはソースファイルが提供されているので確認してみると、ghostscript で pgmraw という形式に変換し、そのデータを captfilter*3 というプログラムを通して、ccpd という、CAPT プリンタとの会話を行うバックエンドへ流している事がわかります。

もうちょっと...

で、問題になっている箇所がどこなのかを探ると、どうも、ghostscript が pgmraw に変換する時点でエラーになっています。pgmraw 自体は CANON 固有の形式ではないので、ここを乗り越えられると印刷できそうです。

で、PPD ファイルをいじって、ps2ps という、Postscript データを単純化するフィルタを通してから、pstocapt に渡るようにしたシェルスクリプトを使うようにすると、一応、印刷はできました。

ただ、ps2ps を通す前と後で中身を比べると、かなり単純化された雰囲気があります。Postscript 自体を良くは知らないので、具体的にどんな単純化なのかはわかりませんが、どんな印刷でも大丈夫なのか、不安が残ります。

いくつか、Windows 用の Postscript プリンタドライバを試していますが、今のところ、ghostscript が耐えられる Postscript データをはき出す物には出会ってません。

もう少しなんだけどなぁ...。

*1:Ver 11 で 64bit 版がリリースされる予定。

*2:第二世代以降では、ghostscript の opvp というインタフェース用のライブラリとして提供しているようです。

*3:これはソース非公開。CAPT の CUPS 対応パッケージは、ソースが公開されている部分と公開されていない部分がまだら模様になっている。