2008/11/24(月)Canon CAPT プリンタ を Ubuntu/amd64 で使う

2008/11/21(金)Canon CAPT プリンタ を x64 Linux で使えない

※後日、印刷できるようになりました


レーザープリンタが欲しくて、モノクロレーザープリンタを買ったんですが、さんざんな目に合いました。

Canon CAPT プリンタ

CanonのレーザープリンタといえばLISP4とかですが、廉価品のプリンタは CAPT という規格になっています。サーバに付けようと思いまして。

  • Ubuntu Server 8.04 LTS (x64/amd64)
  • Canon LBP-33xx

「今時Linuxでも何の問題もなく使えるさ」と思ったのが運の尽き、CAPTドライバはx64版が提供されてない(汗) ppdファイルだけ送り込めばなんとかなるかなと思ったもののダメ。

色々調べてみるとドライバソースファイルが提供されていたため、コンパイル作業にいそしみました。エラー多発。

  1. automake 1.9以降が必要
  2. libgtk-1.2-devが必要
  3. cndrvcups-capt-1.70/statusui
    1. gettext.h*1 を include パスが通ったところに置く必要あり。
    2. Makevars.template を手動で Makevars としてコピーする必要あり。
    3. いくつかスクリプトミスがあり*2、各ディレクトリ以下で autogen.sh などしないとならない。
    4. gtkの include パスがなぜか src/Makefile に設定されないため、手動で Makefile を修正する必要あり。

gtkを入れる最中に X ライブラリを大量に放り込まれ微妙な気分に……。それでも挫けず、数時間以上かけて、上の謎な対応もしても statusui はコンパイルエラー(致命的エラー)。なおしようがないので statusui を除いてインストール。

*1 : /usr/share/gettext/gettext.h

*2 : Makefileがみつからないと怒られる

raw driver に逃げる

そもそも /dev/usb/lp0 = /dev/usblp0 としてデバイスのポートは見えているので、Windows上でプリンタ用データを生成して直接送り込めばいいということにしました。*3

CUPSをインストールして設定。これまたどうやっても印刷できず。USB認識のタイミングや、接続、デバイスなど何十回とテストしてもうまくいかない。そもそも、Windowsによって生成されたプリンタデータを

dd if=testdata of=/dev/usblp0

しても、20KB送り止まったり、そのあと1byteも送れなくなったり。何をどうやっても、raw プリンターとして認識出来ない。

*3 : サーバ上から必ずしも印刷できる必要はないので。

原因

もう八方ふさがりで十数時間を浪費したあと、さらに多くの情報を漁りながら考えたこと。

  • 少なくとも CUPS の filter は無事動作しているのに、印刷できないのはおかしい。
  • /dev/usblp0 がそもそもデータを受け付けないのはおかしい。

色々試行錯誤した結果、原因判明。

Canon CAPTプリンタを動作させるにはccpdと呼ばれるデーモンが必要で、これはコンパイル済の状態でしか配布されてない。

ccpd(Canon Common Printer Daemon)を起動することにより、/dev/usblp0 ではない専用の通信路(Canon Printer Deamon Port#x)が表示されます。ここに印刷データを出力することでCanon CAPTプリンタは使用できます。*4

*4 : ネットをみていると /dev/usblp0 に直接出力して印刷できないと困っている方が結構いるようです。ご注意ください。

感想

ccpd のソース配れ!*5 というか Canon いっぺん死んでくれ。

さて困ったどうしよう…(汗)

*5 : ccpd以外にもいくつか必要なツールやライブラリがバイナリでしか配布されていませんが、とりあえずccpdがあればrawとして印刷できると思われます。

追加調査 2008/11/22

ccpd を 32bitバイナリとして実行して(ia32-emulationな環境)みました。色々試行錯誤の上、「captmoncnab7」が起動するところまでこぎ着けましたが、そこで止まりました。

captmoncnab7 は ccpd が起動させているようです。CAPTというプリンタは内部に処理機能をほとんど持っていません。必要な処理はソフトウェア(ドライバ側)で実現しようという思想によるものです。このデーモンは、印刷データをプリンタと双方向通信して実際の印刷処理(プリンタの制御処理)を行うデーモンと予想されます。

どうやら、gs-esp*6との通信に問題があるのではないかと思うのですが……。クローズソース(プロプライエタリ)なドライバではどうにもこうにも。

EPSONとか

EPSONは公式にはLinuxドライバを提供していませんが、サードパーティーからCUPSの本来の形式に則った形でドライバが提供されています。しかもオープンソースで。

Canonはソースの秘匿のためにわざとややこしい仕組みを使っているとしか思えない。なんだかなあ。次買うときはEPSONかな。(ある人おすすめのブラザーもよさそう。……よく見るとトナーとドラムが分離しているので、ランニングコストが安くすみそう。ブラザーいいなあ。*7

Canonはダメだ

CanonはLinuxで使う分には終わってる気がする。ネットで検索してみると面白いようにトラブル事例がたくさん引っかかる。

後日

なんとか印刷できるようになりました

*6 : CUPSでの使用を前提としたGhostscriptの分岐プロジェクト

*7 : となると問題は今手元にあるCanonのプリンタなんだけども……

2008/11/18(火)デジタルオシロほしいなあ

掲示板

記事と無関係なコメントが付くことが多くなりました。たぶんこれは掲示板がほしいんだろうなあと思い、試しに設置してみました*1。サイドメニューにリンクを置いてあります。みなさん同士のフリートークにご利用くださいな。

*1 : 掲示板用に記事を作って開放するだけですけど

デジタルオシロほしい

アナログオシロは手元にあるのですが、単発現象観測のためにデジタルオシロが欲しくなってきました。ロジックアナライザでも良いのですが、まあどうせならデジタルオシロだよなあーと。

アナログオシロ持っているから安物デジタルオシロでも良いのですが(秋月の数万円代とか)、いつかの液晶ディスプレイしかり色々調べていると、1Gspsオーバーのものがほしくなる。10数万出せば秋月にもありますけど、ちょっと不安が拭えず。どうせならまともなもの買う方がいいかなあとか思ってたら、WaveJetシリーズ(の31x)が目に付いた。500kワード/chは魅力的。高いけどね……。

そんな感じで色々見ています。すぐにってつもりはないんですけどね。みなさんオススメとかあります?*2

*2 : 画面がないPCを接続しないと使えないタイプは却下で。

2008/11/08(土)祝50万ヒット

アクセスありがとうございます。おかげさまで50万ヒットを迎えることができました。1500~2000/dayなので2ヶ月ぐらいで10万アクセスになる計算ですね。……しばらく10万ごとに書くのはやめましょう……たぶん(^^

ぼちぼち更新していきますので、今後ともよろしくお願いします。

2008/11/04(火)今日の小細工

USB外付けHDDって古めのマシンだと安定しないですよね。主にバスパワーの電流が足りないのですけど。

USBバスはGNDは共通なのですが、+側に電流制限素子(電流検出素子)が入っています。その素子は抵抗を持つので電流を大きくとると(ケーブルの抵抗もあり)供給電圧が下がります。4.7Vぐらいまで電圧が下がると、外付けHDD等はまともに動作しません。

初め2つのUSBバスから電源を2つ束ねるという手を取ったのですが、それでも安定しません。計ってみるとHDD非アクセス時で4.8V。アクセスする度にHDDが瞬断されよくありません。

仕方がないので、USBバスにこんな小細工をしました。

usb-power.jpg

PC電源直結。ちなみにこんな状態で変なUSB機器を付けるとパソコンの電源が落ちます。危険です(笑)。ここまでして、やっと外付け2.5インチHDDか安定しました。

原因

それにしても「何かおかしくない?」と思いまして、外付けHDDであるIOデータのHDPG-SUを分解しました*1なんか5V1Aの東芝HDDが付いてるんですけど。

しかも外ケースには「定格5V0.5A」の表記が。嘘つき。

*1 : 販売時点でHDDが付いているシリーズです。