Oct 24 1996


非ポストスクリプト・ネットワークプリンタの使い方


最近はネットワーク(TCP/IPプロトコル)対応のプリンタが多く発売されるよう になりました.UN*Xから非ポストスクリプトプリンタへ出力する場合,なにかフィ ルタを通さなければなりません.しかし,/etc/printcapのエントリに「if=(フィ ルタ)」の項が入るとlpdの仕様上ローカルのデバイスファイルへの出力に限 定され,ネットワークを介する出力が普通の方法では不可能となります. そこで,これを実現させるための方法を紹介します.


/usr/share/doc/handbook中の「7.6.3.2. Printers with Networked Data Stream Interfaces」でperlスクリプトnetprintを用いる方法が紹介されていま す.しかし,この方法が使えるのはFreeBSDからプリンターへの片方向のやり取り だけで出力できるプリンタのみです.ただし,hanndbookには
  many network printers support two-way communication, and you might
  want to take advantage of that (to get printer status, perform
  accounting, etc.).
とあります.どなたか作ってみてはいかがでしょうか.


次に双方向のやり取りをしながら出力する非ポストスクリプト・ネットワークプ リンタの使用方法を説明します.例えば,/etc/printcapに次のように書きます.
       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
とすることで出力できます.


(最後に一言)
ネットワークを使ったときとパラレルポートを使ってときのプリンタへの出力の 速さですが,差はありませんでした.また,6MBのポストスクリプトファイルを 出力した時は,gsが作ったラスタイメージが60MBになり(使っているプリンタは 600dpiです),パラレルポートの方が安定して出力してくれました.プリンタに も原因があるのでしょうが,ネットワークでは出力できませんでした.もし,仮 に出力できたとしても60MBのイメージを書き/読みしなければならないので出力 速度がかなり落ちるでしょう(handbookにあるnetprintを使った方法ならばまだ ましかも).結局,現在はパラレルポートを使って出力してい ます.

参考文献:Grant Taylor, , "The Linux Printing HOWTO: 9.8. Running an if for remote printers", v3.7, 25 June 1996 (これはNetNewsのcomp.os.linux.answersに投稿されています)


FreeBSDの広場へ