FreeBSD で Canon PIXUS TS8630 プリンターを CUPS で使う

世の FreeBSD ユーザーよ

Canon のプリンタ―はやめて EPSON を使おう

CanonLinux で CUPS から印刷できるように Linux 用のソフトウェアを配布している(i386X86_64 と arm と mips64el)。 それは Linux ユーザーには良いことであろう。 しかし、嘆かわしいことに「Linux版のプリンター用ソフトウェアを配布している」ということをもって、 FreeBSD ユーザー向けに Canon のプリンターを薦める向きが存在する。

FreeBSD には Linux エミュレーション機能があるから Linux 用のソフトウェアを使えるし良いじゃないか? EPSON を見よ。エプソンは CUPS 用のフィルタのソースコードを公開していて、FreeBSD native でフィルターをビルドして使えるのである。 USB接続であれば、スキャナーだって SANE 機能を使って使えるのである。 FreeBSD のような弱小 OS のユーザーが応援すべきは、このようにソースコードを公開して使えるようにしてくれている EPSON のような企業である。

何々? Canon だって CUPS 用ソフトウェアの「ソースコード」を公開しているよ?

馬鹿者、その tarball の中身をよく見ろ。 プリンターとのやり取りを行う部分のライブラリがバイナリでしか提供されていないではないか。 結局、FreeBSD native にそのソフトウェアをビルドしては使えないのだ。 そういうのは「ソースコードを公開している」などとは言わない。覚えておくように。

こういうところ、Canon 本体では「環境問題に貢献」とかいってその手の賞を取ったりして、 さもそういうことに気を使っていそうに宣伝しているのに、 関連会社のキヤノングローバル戦略研究所では大々的に温暖化否定論を流布するばかりか、 その流布している人物を政府の委員会に押し込んで政策に影響を与えようとしているという狡い振る舞いをしている企業らしさが現れていると言うべきである。

繰り返すが、FreeBSD ユーザーならプリンターは EPSON を買って使うようにしよう。

まあ、EPSON もスキャナーをネットワーク越しに使うソフトウェアはソースコードを公開していないんだけどね。

しかし、うっかり Canon のプリンターを買ってしまった

私はちゃんと確認しない馬鹿なので、Canon の web でプリンタードライバーの「ソースコード」が配布されているということだけを見て、それならソースに手を入れる必要はあるかもしれないが FreeBSD でも使えるぞと思って Canon PIXUS TS8630 を買ってしまった。まったくけしからんことである。 しかし、買ったからには使いたいので、FreeBSDLinux エミュレーション機能があるのを良いことに、FreeBSD からも印刷できるように設定を行おうと思う。

TS8630 で CUPS から印刷する

プリンターの設定

以下の手順でプリンター前面のパネルから IPP を有効にする。

設定(歯車アイコン)→本体設定→LAN設定→Wi-Fi→詳細設定(右下のボタン)→IPP設定→有効をタッチ

Canon の配布する Linux 版ソフトウェアの入手

CanonHome からサポートのページを介して PIXUS TS8630機種別サポート詳細 ページへ行き、 そこから、ソフトウェアダウンロード→OS選択でLinuxを選択 で、 PIXUS TS8630Linuxソフトウエア選択 のページになる。 FreeBSD ports の提供する Linux 環境は現時点では CentOS 7 ベースなので、 「IJ Printer Driver Ver. 6.50 (rpmパッケージアーカイブ)」を選んでダウンロードする。

ダウンロードした cnijfilter2-6.50-1-rpm.tar.gz を展開すると、packages ディレクトリ内に i386x86_64、aarch64、mips64el それぞれの rpm があるので適したものを使うこと。 他のプラットフォームの方は残念でした。

依存するソフトウェアの導入

FreeBSD版の CUPS のほか、IJ Printer Driver Ver. 6.50 が依存する Linux ライブラリをパッケージから導入する。

# pkg install cups
# pkg install linux_base-c7
# pkg install linux-c7-cups-libs
# pkg install linux-c7-libxml2

/etc/rc.conf に次の行を追加して Linux エミュレーションを有効にする。

linux_enable="YES"

エミュレーションを開始する。

# service linux start

IJ Printer Driver Ver. 6.50 の導入

/compat/linux 以下に rpm を展開し(私の場合は FreeBSD/amd64 を使っているので x86_64 を選択)、 実行ファイルとライブラリに brandelf でラベルをつける。

# cd /compat/linux
# tar xvf /どっか/cnijfilter2-6.50-1.x86_64.rpm
# brandelf -t Linux usr/bin/cnijlgmon3
# brandelf -t Linux usr/bin/tocanonij
# brandelf -t Linux usr/bin/tocnpwg
…
# brandelf -t Linux usr/lib/cups/filter/cmdtocanonij3
# brandelf -t Linux usr/lib/cups/filter/rastertocanonij
…
# brandelf -t Linux usr/lib/libcnbpnet30.so.1.0.0
# brandelf -t Linux usr/lib/libcnnet2.so.1.2.5

brandelf -t Linux を重ね掛けしても問題ないので、面倒なら以下で十分かもしれない。

# brandelf -t Linux /compat/linux/usr/bin/*
# brandelf -t Linux /compat/linux/usr/lib/*
# brandelf -t Linux /compat/linux/usr/lib/cups/backend/*
# brandelf -t Linux /compat/linux/usr/lib/cups/filter/*

次に、FreeBSD 版の CUPS のフィルターフォルダにシンボリックリンクを作成して FreeBSD 版の CUPS から使えるようにする。

# cd /usr/local/libexec/cups/filter
# ln -s /compat/linux/usr/bin/tocanonij tocanonij
# ln -s /compat/linux/usr/bin/tocnpwg tocnpwg
# ln -s /compat/linux/lib/cups/filter/cmdtocanonij3 cmdtocanonij3
# ln -s /compat/linux/lib/cups/filter/rastertocanonij rastertocanonij

CUPS の設定

/etc/rc.conf に cupsd と(お好みで) avahi-daemon の設定を入れて、サービスを開始する。

cupsd_enable="YES"
avahi_daemon_enable="yes"
# service cupsd start
# service avahi-daemon start

localhost:631 で cupsd の管理ページに入れるので、「管理」タブを選択する。 アクセス制限がかかっているが、wheel グループに入っているユーザーのユーザーIDとパスワードで入れる。

「プリンターの追加」を選択し、「発見されたネットワークプリンター」に出ていればそれを、 出ていなければ「インターネット印刷プロトコル (ipps)」を選択し「続ける」を押す。 後者の場合は URL の入力が求められるので、設定してあればホスト名を、なければ IPアドレスを入力する。例えば、

ipps://192.168.0.100/

プリンター名、説明、場所を入力する。プリンター名は -P オプションに指定する名称になる。例えば

  • プリンター名: TS8630
  • 説明: Canon PIXUS TS8630 Series
  • 場所: Cugel の部屋

という感じで。最後に、このPCを経由してほかのPCから印刷したい場合 (ほかの FreeBSD マシンで同じ手間を踏みたくないとか)は、「このプリンターを共有する」をチェックする。

「続ける」で機種を選択する画面になるが、ここでは「または PPDファイルを提供」の「ファイルを選択」を選択し、 /compat/linux/usr/share/cups/model/canonts8630.ppd を選択し、 「プリンターの追加」を押す。

「プリンター TS8630 は正しく追加されました」と出てくればOK。

テスト印刷

% lpr-cups -P TS8630 なんかてきとーなファイル

で印刷されれば成功です。お疲れさまでした。 失敗したら、/usr/local/etc/cups/cupsd.conf でログレベルを LogLevel debug に設定して、 service cupsd restart して、 /var/log/cups/error_log を見ながら解決しましょう。頑張って。