Canon CAPTプリンタを Ubuntu 10.04/amd64 で使う

はてブ数 2010/05/19Linux

CAPTプリンタをLinux@amd64で使う上での問題の詳細は以前の記事(@Ubuntu 8.04)をみてください。

amd64用パッケージ

再パッケージングしたファイルを置いておきます。うまく行ったら知らせて頂ければ幸いです。どうやら問題なさそうです。報告感謝。

このファイルをインストールしたら設定に進んでください。

最近は

Fedora用のみですが64bitドライバも配布しているようですので、こちらを流用したほうがいいかも知れません(未確認)。*1

もっともドライバが期待通り動いたところで、ccpdが起動している限り(印刷には必須)CUPSのジョブはすべてccpdに流れ込んでしまい、一度送信(印刷)したら最後、CUPSからは印刷ジョブを一切管理できない残念な仕様です。なので、Canonのプリンタは二度と買いません。

*1 : もう何年も経つというのに、この後に及んで64bit版はFedora用パッケージしか用意してないというのも大分終わってるわけですが。32bit版はUbuntu用がある。

ドライバのインストール

必要なライブラリを入れます。

# apt-get install ia32-libs

CanonのサイトからLinux用ドライバを2つダウンロードします。

  • cndrvcups-common_2.00-2_i386.deb
  • cndrvcups-capt_2.00-2_i386.deb

この2つのファイルを強制インストールします。

# dpkg -i --force-architecture cndrvcups-common_2.00-2_i386.deb
# dpkg -i --force-architecture cndrvcups-capt_2.00-2_i386.deb

これで必要な設定を行えばリモートからの印刷はできますが、Linux上からは印刷できません。

ドライバのコンパイル

Linux上から印刷するのに必要なライブラリをコンパイルします。

Canonのサイトから2つのソースファイルをダウンロードします。

  • cndrvcups-common-2.00-2.tar.gz
  • cndrvcups-capt-2.00-2.tar.gz

CUPSが入ってない場合はまず先にインストールします。

# apt-get install cupsys libcupsys2

コンパイル環境。

# apt-get install build-essential automake libtool libbuftool libcupsys2-dev

ファイルを解凍してコンパイルします。

# tar xvf cndrvcups-common-2.00-2.tar.gz
# cd cndrvcups-common-2.00/c3plmod_ipc
# make
# cp libcanonc3pl.so.1.0.0 /usr/lib
# cd ../../

2つめのファイル。

# tar xvf cndrvcups-capt-2.00-2.tar.gz
# cd cndrvcups-capt-2.00/driver
# ./autogen.sh
# make
# cp .libs/libcanoncapt.so.1.0.0 /usr/lib

ccpd自動起動

ccpdを起動します。

# /etc/init.d/ccpd start

ccpdは再起動時などに自動起動するように設定しましょう。

# update-rc.d ccpd start 99 2 3 4 5 .

CUPSよりも先に起動させるとジョブを送ったときにCPU負荷100%で無限ループするので注意*2

*2 : sysv-rc-confやupdate.rc-dで普通に設定するとS20ccpdとなり、S50cups より先に起動してしまう。

設定

ccpd(バッファリング/スプーラーデーモン)にプリンタを登録します。接続しているプリンタの型を正しく指定して登録してください。

# lpadmin -p LBP3xx0 -m CNCUPSLBP3xx0CAPTJ.ppd -v ccp://localhost:59687 -E
# ccpdadmin -p LBP3xx0 -o /dev/usb/lp0

lpadminで先にCUPSに登録しないとccpadminは動きません。

ccpadminで設定を変更したらccpdを再起動します。

# /etc/init.d/ccpd restart

なお cngplp というGUI設定ツールが付属しています。1度こいつで触ってあげるといいかも。

# cngplp

トラブったり、ccpdがCPU100%で無限ループしてるときは(topコマンドで確認)、ccpdを「kill -KILL」して再起動して、それでもだめならCUPS等のすべての登録を削除して lpadmin による登録からやり直してください。次項のudevによるプリンタ自動認識を先に止めた方がいいかも知れません。

間違の少ない手順。

  1. ccpdを止める
  2. cupsを再起動
  3. ccpdを動かす
  4. プリンタの電源を入れる

1度印刷されるようになれば、あとはうまく行くのですが。

lprコマンド

# apt-get install cmap-adobe-japan1 cmap-adobe-japan2
# apt-get install ttf-mona ttf-monapo ttf-ipafont-jisx0208
# apt-get install poppler-data

なかなかうまくいかなかったのですが、poppler-data というのがミソのようでした。

プリンタの自動認識を止める

これは別にしなくてもよいのですが、気分の問題です。

ccpd経由でしか印刷できないダメプリンタでも、Linuxは賢く自動認識してCUPS上で使える状態まで設定してくれます。とても有用ですがCanonプリンタにとってはありがた迷惑なこの機能を無効にします。

# echo -n /etc/udev/rules.d/70-printers.rules

udevによる自動認識(/lib/udev/rules.d/70-printers.rules) を抑制するため空ファイルを作ります。

しかしこのままだとCUPS再起動時にまた認識してくれるので、/etc/init.d/cups を編集します。

coldplug_usb_printers() {
    if false && type udevadm > /dev/null 2>&1 && [ -x /lib/udev/udev-configure-printer ]; then

(おまけ)amd64用パッケージの作り方

i386用パッケージをまず解凍します。

# dpkg -x        cndrvcups-common_2.00-2_i386.deb common64
# dpkg --control cndrvcups-common_2.00-2_i386.deb common64/DEBIAN
# dpkg -x        cndrvcups-capt_2.00-2_i386.deb capt64
# dpkg --control cndrvcups-capt_2.00-2_i386.deb capt64/DEBIAN

次の2つのファイルをamd64コンパイル済のものへ差し替え。

  • libcanonc3pl.so.1.0.0
  • libcanoncapt.so.1.0.0

DEBIAN/ 以下を書き換え。

$ dpkg -b common64 cndrvcups-common_2.00-2_amd64.deb
$ dpkg -b capt64   cndrvcups-capt_2.00-2_amd64.deb

update-rc.d やインストール後自動起動も設定してあります。

※パッケージ作成時のファイル所有者をrootにしておかないとインストール時に問題がおこるようでした。*3

全部コンパイルした時のメモ

# apt-get install libxml2-dev libgtk2.0-dev

cndrvcups-capt 側のallgen.shを書き換え(configure前に)。

elif [ -x /usr/bin/automake-1.6 ] ; then
	./autogen.sh
else
        ./autogen.sh
fi

*3 : たぶんもともとのパッケージ問題だと思うけど。

(原因究明)CUPSのテストページ印刷の文字化け

[Job 55] LANGUAGE = (unset),
[Job 55] LC_ALL = (unset),
[Job 55] LANG = "ja.UTF-8"
[Job 55] are supported and installed on your system.
[Job 55] perl: warning: Falling back to the standard locale ("C").

というdebugログがとれました。jobを送り込むときのCUPSの環境変数設定に問題があるので、/usr/lib/cups/filter/cpdftocps の最初の方に

export LANG="ja_JP.UTF8"

を追加しました。この警告は消えましたが文字化けは変わらず……。

/usr/lib/cups/filter/bannertops に問題があって、こいつが出力するPostScriptファイルの時点で文字化けしています*4。どうしょうもない上、困ってないので放置。

*4 : トラップして確認しました。日本語をa2psしたときと同じ症状で文字列を単純にASCII文字と同じように埋め込んでるようです。マルチバイト文字を全く考慮せず1byteずつ分解しているようです。