Epson PM with lpd on pipsその2
filter???の書き換え
前回の設定でPSファイルは印刷できるようになりました。プレインテキストを印刷するための設定を進めましょう。ひとつの方法としては、printcapに別のプリンタエントリとして例えばtextprnなどを加え、別のフィルタを設定するというものです。これは面倒なので今回取り入れた手法としては、前回設定したフィルタfilter760の書き換えです。これによって、ひとつのプリンタエントリでPSファイルかプレインテキストかどうか自動的に処理をわけてくれる仕様になりました。
これはシェルスクリプトとなっていて、内部でgsconfig760を呼び出しているだけです。要は、シェルスクリプト内でPSファイルかプレインテキストかどうかの条件分岐を行い、PSファイルならgsconfig | pipsの標準出力をlprに返し、プレインテキストならその前段にtext->psの変換を加えればOKです。簡単ですね。
PSファイルの最初の2文字は%!であるので、ジョブの最初の2文字がこれで始まっている場合、PSファイルの処理をし、そうでない場合はプレインテキストとみなして適当なプログラムでPSファイルに変換します。ここではa2ps-jを利用しました。以下にfilter760を書き換えた結果を紹介します(書き換え済みfilter760)。ここで、a2psとgsconfigをパイプでつなぐ処理も考えられますが、gsconfigはパイプからの標準入力を許可していません。そこでテンポラリファイルを用いてこの実装を実現しています。
#!/bin/sh
#
# filter760
PRINTER_NUMBER=760
PRINTER_MODEL=PM${PRINTER_NUMBER}C
PRINTER_MODEL_LOW=pm${PRINTER_NUMBER}c
TMP_FILE=/var/tmp/pips-pstmp.`date +%Y%m%d-%H%M%S`
PATH=${PATH}:/usr/bin:/usr/local/bin
# locale set
LANGPATH=/usr/local/etc/pips760/lang
if [ -s $LANGPATH ]; then
read LANG < $LANGPATH
export LANG
fi
GSCONF=/usr/local/libexec/pips760/gsconfig760
PIPS=/usr/local/bin/pips760
read first_line
first_two_chars=`expr "$first_line" : '\(..\)'`
if [ "$first_two_chars" = "%!" ]; then
#
# PostScript job, print it.
#
${GSCONF} | ${PIPS} -ui C && exit 0
exit 2
else
#
# Plain text, convert it, then print it.
#
/usr/local/bin/a2ps-j -p -nt -nh -ns > ${TMP_FILE}
${GSCONF} < ${TMP_FILE} | ${PIPS} -ui C && rm ${TMP_FILE}
&& exit 0
exit 2
fi
以上でFreeBSDからpipsを用いてEpson PMシリーズのプリンタに出力する方法の紹介を終わります。
