古いCanon CAPTプリンタをWindows/Mac/Linuxで使う

こんなことやってる暇ないんですが、必要に迫られて、かつかなり面倒だったので記録を兼ねてブログに残しておきます。ネット上にも英語、日本語を問わずほとんど情報が上がってないです。

Canon CAPTプリンタは以前にキャノンが販売していた、専用のドライバが必要なぶん、安価なレーザープリンタで、自分の身近にはLBP-1210とLBP-1120の2台があります。プリンタ自体はまだまだ元気に動くのですが、いかんせん、ドライバのアップデートがない。64bitのWindowsでは動かないし、最近のMacOS向けのドライバもない。特にWindowsの場合、仮想マシンにWindowsXPを入れて動くようにしたところで、結局、クライアントマシンにドライバが無いと使えない。まー、にっちもさっちもいかないわけです。

この手の古いプリンタの場合、WindowsXP環境に仮想Postscriptプリンタをインストール&共有して、他のマシンからはPostscriptで印刷しようというのが定番です。これはWindowsのGeneric Postscript Printer経由で普通に印刷したデータを、RedMonという仮想プリンタポートを使ってghostscriptにリダイレクトし、改めて古いプリンタに送るという処理になります。「Windows RedMon ghostscript」あたりで検索すれば、色々と出てきます。

ただこれだと、どうもpostscriptの処理が怪しくて、たぶん、フォントがビットマップで処理されてたりするのかな、印字品質が低いのです。しかもWindowsXPのライセンスを用意して、実機か、仮想マシンを用意しないといけない。いまどきWindowsXPを用意するとか、たいへん面倒くさいですね。

全てを無料で簡単に済ませるのにいちばんいいのは、仮想マシンにLinux環境を作り、それで印刷することです。幸い、CAPTはLinux用のドライバがあります。Mac + VirtualBox + Ubuntu 12.04LTS + CAPT Linux Driver の組み合わせで、あっさり、Macから印刷出来るようになりました。以下サイトからCUPSドライバを入手し、普通にインストールすればOKです。インストール後は、CUPS管理ページからプリンタの共有を有効にするだけです。あとはMacからプリンタを追加しようとすれば、Bonjourで自動的に発見できます。

Canon CAPT Linux Printer Driver

ところが同じことをWindowsベースでやろうとすると、Windows10 + VirtualBox + Ubuntu 12.04LTS + CAPT Linux Driver はぜんぜん上手くいかない。インストールは普通に出来るものの、印刷が不安定で、出てきたり、来なかったりします。確証はないですが、どうもVirtualBoxのUSB周りのバグが怪しいと、睨んでいます。Windows10 + VMWare Workstation Playerに変えたら上手くいきました。。

さらに困るのが、上記の方法で作ったLinux仮想マシンは、理屈の上ではどんなPostscriptファイルでも処理出来るはずなのに、Windows Generic Postscript Printer (例えば MS Publisher Imagesetter)から印刷しようとすると、上手くいかない。これがくせ者で、色々調べて見たら、Canonのpstocaptという、PostscriptをCAPTに変換するコマンドにバグがあって、Microsoft Generic Postscript Printerが作るpsが読めないという。。。こいつが”[CAPTFILTER] Input File Error”というエラーを吐き出して止まります。

ロシアのプログラマの方がこのバグを直したCAPTドライバを配布しているのですが、ソースコードでの配布なので、自分の能力では、コンパイル環境を整えることが出来なかった。。

GitHub – Magister/cndrvcups-capt: Canon CAPT driver

で、ようやくこの投稿のポイントなのですが。要するにWindowsからLinux上のCAPTプリンタへの印刷を考えるとき、Windows Generic Postscript Printerの書き出すpsファイルが、お行儀の良いファイルになればいいわけです。だったら、そのお行儀の悪いpsファイルを、ghostscriptで再処理すればいい。これで上手くいきました。

  1. Linux環境での設定は全て済ませ、CUPSで普通に印刷出来るようにしておく。これを仮にプリンタAとする。
  2. Linux環境にsambaをインストールし、プリンタAがWindowsから見えるようにしておく。

  3. Windows環境にRedMonをインストールし、印刷ポートのリダイレクトを使えるようにしておく。なおインストール時には管理者権限が必要で、プリンタのプロパティでRedMon関係の設定をするときも管理者権限のコマンドプロンプトから rundll32 printui.dll,PrintUIEntry /p /n\machine\printer でプロパティを開く必要があります。

  4. 同じくWindows環境にghostscriptをインストールしておく。

  5. WindowsからLinuxのCAPTプリンタに接続する。ドライバはMS Publisher Imagesetterを選択。このプリンタはWindowsマシンからLinuxマシンにデータを送るためのもの。これを仮にプリンタBとする。

  6. Windowsにもうひとつ、MS Publisher Imagesetterのプリンタをインストールし、印刷先ポートをRedMonにする。こちらは、印刷を実行するためのもの。これを仮にプリンタCとする。

  7. プリンタCのポートの設定でRedirect this port to the program欄には、gswin64c.exeを設定する。また、Arguments for this program are欄に「-q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=ps2write -sOutputFile=“%printer%\仮想マシン名\プリンタB” -」 とする。最後のスペースとダッシュを忘れないこと。ダッシュの後にはスペースも改行も残さないこと。Outputについては、今回ghostscriptに直接スプールにデータを書き出させているので、Program handles outputでOK。

以上の設定により、以下の流れで印刷が可能になる。

WindowsプログラムからプリンタCに印刷指示
→ プリンタCにてMS Publisher Imagesetterが出力したpsデータをRedMonが受信
→ RedMonがghostscriptでps形式をクリーンに変換してプリンタBに送る
→ プリンタBがLinux側のプリンタAにsamba経由でデータを転送
→ Linux側のプリンタAでCUPSで印刷される

6、7に相当する画面をキャプチャして貼っておきます。

わかってしまえば、それほどたいしたことはやってなく、Linux環境のセットアップから含めても全部で1時間もあれば出来るのだけど、不具合の原因を辿って解明するのが大変だった。どこかの誰かの役に立つかもしれないので、ここに書き残しておきます。