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

2011年12月21日水曜日

ターミナルでwordファイルを読みたい

1. 前置き
FreeBSDで暮らしているところに、WordやExcelの事務書類がメールの添付ファイルで届くことがよくある。
しかし、OpenOfficeを立ち上げるのも面倒で、lessと同じくらいの気楽さで読めればいいと思っていた。

数ヶ月前に、lessdocというshellscript を書いて(私の過去の記事「wordファイル(.docファイル)をtxtに変換する方法 -> wvWare」http://quantum-public-diary.blogspot.com/2011/08/worddoctxt-wvware.html)、Wordファイルはターミナルで内容確認できるようにした。
それを拡張して、Excelファイルにも対応したので、ここに報告する。

2. install しておくべきもの
(1) textproc/wv
word形式のファイルをhtml形式やpdf形式などに変換するライブラリ。本家はこちらhttp://wvware.sourceforge.net/。portsから入れればよい。
(2) textproc/xlhtml
excel形式のファイルをhtml形式に変換するプログラム。本家はこちらhttp://chicago.sourceforge.net/xlhtml/。portsから入れればよい。
(3) japanese/w3m-img
コンソール(ターミナル)用のWeb browser。ここではhtml->txt変換に使う。軽いので普段もssh越しにブラウザを使いたいときなどに利用している。それから、うっかりXorgを壊してしまったときに、kon(japanese/kon2-16bit)と組み合わせて、最後のとりでとして検索するのに使う。
www/w3m-imgを入れてしまうと、文字エンコーディングなどのオプションが少なくて、日本語を使うときに困ると思う。
(4) 日本語を表示できるターミナル
私は gnome-terminal派だが、ktermでももちろんよい。lvの-Oオプションと、ターミナルの入力エンコーディングを合わせないと文字化けする。

3.原理
やることは、wvWareでhoge.docをhoge.htmlに変換し、w3mのdump機能を利用してtxtにし、lvでターミナルに表示する。

script はこれだ!!!

#!/bin/sh
# lessoffice.sh
export LV=-Ojis; 
for i; do
    TMPDIR=`mktemp -d /tmp/tmp_lessdocXXXX` || exit 1 
# for Word 
#    if file $i |grep Word; then
    if [ ${i##*.} = doc ]; then
        if ! wvHtml $i $TMPDIR/tmp.html; then
            echo "You need to install textproc/wv !!!"
        else
            w3m -dump $TMPDIR/tmp.html |lv 
        fi
# for Excel
#    elif file $i |grep Excel; then
    elif [ ${i##*.} = xls ]; then
        if ! xlhtml $i > $TMPDIR/tmp.html; then
            echo "You need to install textproc/xlhtml !!!"
        else
            w3m -dump $TMPDIR/tmp.html |lv 
        fi
# for other format
    else
        lv $i;
    fi
#  else
    rm -r $TMPDIR;
done
4.いいところ
(1) lvのincremental searchを使ったり、grep に流し込んだりできる。
(2) Xがいらない。ssh先で実行するときに、とくに快適。

5.追記
ファイルの種類の識別をファイル名に頼っているのは格好悪いのだけれど、file(1) を使うと、word(excel)のバージョンによっては、識別に失敗するので、この方法にしている。