2011年12月27日火曜日

FreeBSDからCanon BJ S500で印刷できた

1. 前書き

諸事情により(インクジェットプリンタよりもマザーボードの方が寿命が短いらしい)、家マシンのプリンタ再設定をおこなった。ここに記録として残しておく。

注) マザーボード:AMD Duron 900MHzの載ったK7S5A(サムライの誘惑、2001年発売)で、2007年に全ての電解コンデンサを換装済み。それなのに、煙を出して死んでしまった。

2. 環境

マシン:FreeBSD 8.2-stable(amd64), portupgrade -N emulators/linux_base-f10/ 済み。
プリンタ:Canon BJ S500 バブルジェットプリンタ。2001年発売。2008年頃ヘッドを交換した。

3. マシンの設定

3.1 プリンタフィルタの配置、リンカの設定

http://cweb.canon.jp/drv-upd/ij-sfp/bjlinux201-s500.html から、bjfilterbjs500-2.0-1.i386.rpmをダウンロードする。rpmファイルの配布場所は変わるかもしれないが、canonのtopページから、ダウンロード→インクジェットプリンター→バブルジェットプリンター→BJ S500→Linuxでたどれたことも記しておく。うっかりソースファイルをダウンロードしてしまわないように注意。

手元の資料(参考文献)には、bjfilter-common-2.50-2.i386.rpmが必要との情報があるが、なくてもlprは問題なく動くので、見つからなくても大丈夫。

ダウンロードした、rpmを適当なところにおいて、sudo -sして
# tar xvf bjfilterbfs500-2.0-1.i386.rpm -C /compat/linux
# /compat/linux/sbin/ldconfig -r /compat/linux
する(tar でも.rpmを展開できるようになったみたい。便利!)。ldconfig をすることで、/compat/linux/bin/bjfilterが、*.soを見つけられるようにしてやる。
rpm(1)コマンドを使えば、ldconfig を手動でしなくても済むのだけれど、オプションが複雑なので、今回はこちらの方法で。

このままでは、/compat/linux/bin/bjfilterが、ライブラリが足りないよ、というので
# portupgrade -N graphics/linux-f10-png10
する。linux-base-fc4の人は、linux-png10だけれど、現在の標準のlinux emulatorはlinux-base-f10になっている。

これで、/compat/linux/bin/bjfilterが実行可能になった。

3.2 /etc/printcapの編集

以下を/etc/printcapに追記する。
lp|Canon BJ S500:\
:sh:\
:lp=/dev/ulpt0:\
:sd=/var/spool/output/lpd/:\
:if=/usr/local/libexec/canon:\
:lf=/var/log/lpd-errs:\
:mx#0:\
:sh:

3.3 /usr/local/libexec/canonの編集

以下の内容の/usr/local/libexec/canonを用意する。
#!/bin/sh
/usr/local/bin/gs \
-q -r600 -dNOPROMPT -dSAFER -sPAPERSIZE=a4 -sDEVICE=ppmraw \
-sOutputFile=- - quit.ps | \
/compat/linux/usr/local/bin/bjfilterbjs500 --full --imageres 600 --lgmon
exit 0

4. 印刷

あとは普通にlprで印刷すればできる。
linux-emulatorはまだ32bitなので、こういうときは便利だ。

参考文献

後藤大地著、FreeBSDビギナーズバイブル、ISBN978-4839918941、http://www.amazon.co.jp/FreeBSDビギナーズバイブル-MYCOM-UNIX-Books-後藤/dp/4839918945