FreeBSD では, ネットワーク越しの印字, すなわち, ジョブをリ モートプリンタに送ることをサポートしています. リモートプリンタ からの出力をするには, 一般に, 次の2つを参照してください.
LPD スプーリングシステムでは LPD (または LPD 互換のシス テム) が起動している他のホストへジョブを送る機能が始めからサポー トされています. この機能により, あるホストに接続されたプリンタ へ, 他のホストからアクセスできるようになります. また, LPD プ ロトコルを理解するネットワークインタフェースを持ったプリンタに 対しても, この機能は働きます.
リモートプリンタへの出力を許可するためには, 最初に, あるホスト (これを, プリンタホストと呼びます) にプリンタを接続します. そして, 「 プリンタ設定導入編 」に書かれた簡単なプリンタの設定をおこなってください. 必要ならば, 「 プリンタ設定上級編」にあ る, 更に進んだ設定をおこなってください. そして, そのプリンタをテス トしてうまく動作することを確認し, LPD に許可した機能がうまく働 くかどうかを見てください.
LPD 互換のネットワークインタフェースを持つプリンタを使用してい る場合は, そのプリンタ自身が以下で説明するプリンタホスト になります. そして, プリンタ名とは, そのプリンタに設定し た名前のことを指します. これについては, プリンタ, および (また は), プリンタのネットワークインタフェースに付属するドキュメン トを参照してください.
次に, そのプリンタにアクセスしたいと思っている他ホストにおいて,
そのホストの /etc/printcap
ファイルに次にあげるエント
リを作ります.
lp
項目で指定されるデバイスは明示的に空にす
る (:lp=:
とする).
sd
項目で
その位置を指定する. LPD では, プリンタホストにジョブ
を送信するまでの間, このディレクトリにジョブを格納しま
す.
rm
項目でプリンタホストの名前を指定します.
rp
項目でプリンタホストに接続したプリン
タ名を指定します. /etc/printcap
に加える必要はありません.
次に, リモートホストに接続されたプリンタで印字するための設定例
を示します. ホスト rose には2台のプリンタ bamboo
と
rattan
が接続されています. これらのプリンタをホスト
orchid のユーザが使えるようにしましょう. 最初に orchid の
/etc/printcap
を示します (このファイルは, 「
ヘッダペー ジの出力を許可する」で参照することができます). このファイルには,
既に, プリンタ teak
用のエントリがありました. 以下では,
これに, ホスト rose にある2台のプリンタ用のエントリが加えられ
ています.
<hr>
# # /etc/printcap for host orchid - added (remote) printers on rose # # # teak is local; it is connected directly to orchid: # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/ifhp:\ :vf=/usr/local/libexec/vfhp:\ :of=/usr/local/libexec/ofhp: # # rattan is connected to rose; send jobs for rattan to rose: # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: # # bamboo is connected to rose as well: # bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:<hr> orchid で必要となる作業はスプーリングディレクトリを作ることだ けです.
mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo
chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo
chown daemon.daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo
これで, orchid のユーザが rattan
と bamboo
で印字す
ることができるようになりました. 例えば, orchid のユーザが次の
ように入力したとします.
lpr -P bamboo -d sushi-review.dvi
すると, orchid の LPD システムは, ジョブをスプーリングディレ
クトリ /var/spool/lpd/bamboo
にコピーし, これが DVI
ファイルを印字するジョブであることを記録します. ホスト rose の
bamboo
用のスプーリングディレクトリに十分な容量が確保でき
次第, 両者の LPD は, ジョブのファイルを rose に転送します. こ
のファイルは, そのすべてが印字されるまで, rose のキューに留まり
ます. (bamboo は PostScript プリンタなので) DVI から PostScript
への変換は rose でおこなわれます.
プリンタのネットワークインタフェースカードは, 2種類に分 類することができます. 1つはスプーラをエミュレートするもの (高価) で, もう1つはシリアルやパラレルポートを使うようにプリンタにデー タを送ることができるだけのもの (安価) です. この節では, 後者の使 い方を説明します. 前者のプリンタは, 前節「 リモート ホストに接続されたプリンタ」 の方法が適用できます.
/etc/printcap
ファイルでは, シリアルかパラレルのイン
タフェースのどちらを使うのか, そして, (シリアルインタフェース
を使う場合) そのボーレートはいくらであるか, フロー制御は使うのか,
タブのための遅延を加えるのか, 改行文字を変換するかなどの指定を
おこなうことができます. しかし, TCP/IP や他のネットワークポートか
らデータを受け取るプリンタを接続するための指定をおこなうことはでき
ません.
ネットワーク接続されたプリンタにデータを送るためには, テキスト
フィルタと変換フィルタから呼び出すことができる通信プログラムを
開発する必要があります. 以下に, そのようなプログラムの例を示し
ます. スクリプト netprint
では, 標準入力から印字データを
すべて受け取り, ネットワーク接続されたプリンタにこれを送ります.
netprint
の最初の引数でプリンタのホスト名を, 2番目の引数
で接続するポート番号を指定します. このプログラムでは単方向通信
(FreeBSD からプリンタ) のみをサポートしていることに注意してくだ
さい. ネットワークプリンタの多くは双方向通信をサポートしていま
すので, その恩恵 (プリンタの状態を得たり, 課金をおこなうなど) にあず
かりたいと思われるかもしれません.
<hr>
#!/usr/bin/perl # # netprint - Text filter for printer attached to network # Installed in /usr/local/libexec/netprint # $#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>"; $printer_host = $ARGV[0]; $printer_port = $ARGV[1]; require 'sys/socket.ph'; ($ignore, $ignore, $protocol) = getprotobyname('tcp'); ($ignore, $ignore, $ignore, $ignore, $address) = gethostbyname($printer_host); $sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address); socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol) || die "Can't create TCP/IP stream socket: $!"; connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!"; while (<STDIN>) { print PRINTER; } exit 0;<hr> このスクリプトは, 様々なフィルタが利用することができます. 仮に, Diablo 750-N ラインプリンタを持っており, これがネットワークに 接続されているとしましょう. プリンタはポート番号5100にて印字す るデータを受け取ります. プリンタのホスト名は scrivener としま す. このとき, このプリンタのテキストフィルタは次のようになりま す. <hr>
#!/bin/sh # # diablo-if-net - Text filter for Diablo printer `scrivener' listening # on port 5100. Installed in /usr/local/libexec/diablo-if-net # exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100<hr>