こんなことやってる暇ないんですが、必要に迫られて、かつかなり面倒だったので記録を兼ねてブログに残しておきます。ネット上にも英語、日本語を問わずほとんど情報が上がってないです。
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で再処理すればいい。これで上手くいきました。
- Linux環境での設定は全て済ませ、CUPSで普通に印刷出来るようにしておく。これを仮にプリンタAとする。
-
Linux環境にsambaをインストールし、プリンタAがWindowsから見えるようにしておく。
-
Windows環境にRedMonをインストールし、印刷ポートのリダイレクトを使えるようにしておく。なおインストール時には管理者権限が必要で、プリンタのプロパティでRedMon関係の設定をするときも管理者権限のコマンドプロンプトから rundll32 printui.dll,PrintUIEntry /p /n\machine\printer でプロパティを開く必要があります。
-
同じくWindows環境にghostscriptをインストールしておく。
-
WindowsからLinuxのCAPTプリンタに接続する。ドライバはMS Publisher Imagesetterを選択。このプリンタはWindowsマシンからLinuxマシンにデータを送るためのもの。これを仮にプリンタBとする。
-
Windowsにもうひとつ、MS Publisher Imagesetterのプリンタをインストールし、印刷先ポートをRedMonにする。こちらは、印刷を実行するためのもの。これを仮にプリンタCとする。
-
プリンタ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時間もあれば出来るのだけど、不具合の原因を辿って解明するのが大変だった。どこかの誰かの役に立つかもしれないので、ここに書き残しておきます。