国道一号、多摩川を渡って環八との交差点。左ウィンカーを出している車が 何故か左に曲がらずによろよろと直進してゆく。もしや…、
とおもったら、案の定対向車レーンに侵入! ここは日本アルヨ。
職場机のとなりに置いてある Canon LASER SHOT LBP2660 が使いたい。 とりあえず、 LIPS &ESC/Page &NPDL 対応 Ghostscript デバイスドライバ を持って来る。こいつを込にしたgsを作っておく。
で、標準入力に来たPSを gs を利用してLIPS4に変換するフィルタを作る。 たとえば /usr/local/etc/canonif としておこう。こんな感じ。
#!/bin/sh
#
case "$0" in
*color) bpp=8 ;;
*) bpp=24 ;;
esac
#
# Read first two characters of the file
#
read first_line
first_two_chars=`expr "$first_line" : '\(..\)'`
if [ "$first_two_chars" = "%!" ]; then
#
# It is PostScript; use Ghostscript to scan-convert and print it
#
/usr/local/bin/gs -dBitsPerPixel=$bpp -dSAFER -dNOPAUSE \
-q -sDEVICE=lips4 -sOutputFile=- - | lpr -Pcreal
else
echo $first_line && cat & printf "\f" && exit 2
fi
exit 2
このフィルタが動くように /etc/printcap に以下を追加。
creal|CanonLBP real:\
:lp=:rp=canon:rm=lbp2260:sh:\
:sd=/var/spool/lpd/creal:\
:lf=/var/log/lpd-errs:\
:mx#0:
canon|lbp2260|Canon LBP2260:\
:lp=/dev/null:sh:sd=/var/spool/lpd/lbp2260:\
:if=/usr/local/etc/canonif:\
:lf=/var/log/lpd-errs:\
:mx#0:
ここで、printcap中の spool directory を掘っておこう。
# mkdir /var/spool/lpd/{creal,lbp2260}
ちなみにcrealというエントリは、/usr/local/etc/canonif からダイレクト に呼んでいる点にちうい。こういう風に if を動かす部分と、リモートプリンタ に投げる部分を分離しないとフィルタが動かないのだ。知らなんだ。