Oct 24 1996
最近はネットワーク(TCP/IPプロトコル)対応のプリンタが多く発売されるよう になりました.UN*Xから非ポストスクリプトプリンタへ出力する場合,なにかフィ ルタを通さなければなりません.しかし,/etc/printcapのエントリに「if=(フィ ルタ)」の項が入るとlpdの仕様上ローカルのデバイスファイルへの出力に限 定され,ネットワークを介する出力が普通の方法では不可能となります. そこで,これを実現させるための方法を紹介します.
many network printers support two-way communication, and you might want to take advantage of that (to get printer status, perform accounting, etc.).とあります.どなたか作ってみてはいかがでしょうか.
lj-5:remote-hplj:\ :lp=/dev/null:sh:mx#0\ :sd=/var/spool/lpd/lj-5:\ :if=/usr/local/sbin/filter-lj-5: lj-5-remote:\ :lp=/dev/null:sh:\ :rm=printer.name.com:\ :rp=raw:\ :sd=/var/spool/lpd/lj-5-raw:原因を追求してませんがFreeBSDではlj-5とlj-5-remoteのスプールディレクトリ を同じにした場合はうまく動きません.また,/var/spool/lpd/lj-5-rawを含む パーティションはラスタイメージが置かれるので十分空き容量がある場所にした 方が良いでしょう.
フィルタfilter-lj-5は
#!/bin/sh gs < options > -q -dSAFER -sOutputFile=- - | \ /usr/local/bin/lpr-raw -Plj-5-remoteなどとします.標準のlprコマンドを用いてバイナリファイルを出力する場合, /etc/printcapのエントリ(上記のlj-5-remote)に「mx#0」の項を入れても 「copy file is too large」というエラーを出します./usr/local/bin/lpr-raw はこれを回避するためにlprのソースを変更したコマンドです(もっとスマート な方法があるかも知れませんが)./usr/src/usr.sbin/lpr/lpr/lpr.cの (961014-SNAPでは) 412行あたりの
if (MX > 0 && nr > MX) { printf("%s: %s: copy file is too large\n", name, n); break; }を
/*if (MX > 0 && nr > MX) { printf("%s: %s: copy file is too large\n", name, n); break; }*/としてコンパイルし,
install -c -s -o root -g daemon -m 6555 lpr /usr/local/bin/lpr-rawでインストールします.以上の設定で
lpr -Plj-5 hoge.psとすることで出力できます.
参考文献:Grant Taylor,
FreeBSDの広場へ