LPD スプーリングシステムを用いてプリンタを使用するためには, プリンタ機器と LPD 用ソフトウェアの両方を準備する必要があります. 本文書では次の二段階のレベルに分けて説明をします.
プリンタを接続する方法, プリンタにどのように通信するかを LPD に指示する方法や, プレインテキストをプリンタで印字する方法については, プリンタの簡単な設定をご覧ください.
様々な形式のファイルを印字する方法, ヘッダページを印字する方法, ネットワーク経由でプリンタに印字する方法, プリンタを制御する方法, プリンタの使用に対する課金を行なう方法についてはプリンタ設定 上級編をご覧ください.
この節では, プリンタ機器やプリンタを使用するための LPD 用ソフトウェアを設定する方法について述べます. この節の概要は次のとおりです.
プリンタ機器の設定では, プリンタをコンピュータに接続するためのヒントがいくつか書かれています.
ソフトウェアの設定では, LPDのスプーラ設定ファイル /etc/printcap の設定方法について書かれています.
データをプリンタに送るためにシリアルまたはパラレルインタフェー スではなく, ネットワークプロトコルを使用する場合は, ネットワークにおけるデータストリームインタフェースを持つプリンタをご覧ください.
この節のタイトルは"プリンタ設定導入編"ですが, 実際の設定はかなり複雑です. プリンタをコンピュータに接続し, LPD スプーラを 起動させることは一番困難な作業です. ヘッダページを出力させたり課金したりするオプションの設定は, 一度プリンタがうまく動くようになればとても簡単です.
この節では, プリンタに PC を接続するための様々な方法について説明しています. ここでは, ポートやケーブルの種類, FreeBSD がプリンタとの通信に必要なカーネルコンフィグレーションについても言及しています.
もしプリンタが既に接続されていて, 他のオペレーティングシステム上でプリンタからの印字に成功している場合は, ソフトウェアの設定まで読み飛ばすことが多分できるでしょう.
最近の PC 用のプリンタほとんどには次のインタフェースの一つもしくは両方がついています.
シリアルインタフェースでは, プリンタにデータを送信するためにコンピュータにあるシリアルポートが使用されます. シリアルインタフェースはコンピュータ業界で共通して使用されています. そのケーブルは容易に手に入りますし, 簡単に自作することもできます. シリアルインタフェースの場合は時々, 特別なケーブルや何か複雑な通信方式選択の設定が必要になることがあります.
パラレルインタフェースではプリンタにデータを送信するために, コンピュータにあるパラレルポートを使用します. パラレルインタフェースは PC 業界では良く使われます. ケーブルの入手は容易ですが, 自作するのはシリアルよりも困難です. パラレルインタフェースには通常, 通信方式の選択はなく, 設定は極めて単純です.
パラレルインタフェースは"セントロニクス"インタフェースとして知られています. これは, プリンタ用のコネクタタイプとして採用された後に名付けられました.
シリアルインタフェースはパラレルインタフェースよりも普通はデータの伝送速度が遅くなります. パラレルインタフェースで は, 通常, (コンピュータからプリンタへの) 単方向通信のみを行なうのに対して, シリアルインタフェースは双方向通信を行ないます. FreeBSD でも IEEE1284 準拠のケーブルを使えば, 最近のパラレルポートとプリンタの多くで双方向通信を行なうことができます.
通常, プリンタで双方向通信が必要となるのは, プリンタが PostScript 言語に対応しているときだけです. PostScript プリンタは非常に冗長に動作させることができます. 事実, PostScript によるジョブでは, プログラムを本当にプリンタに送信します. このことは, 印字作業を必ずしもする必要がないことを意味しますし, そのプログラムの結果はコンピュータに直接返されるかも知れません. PostScript プリンタでは双方向通信を使って PostScript プログラムのエラーや紙づまりといった問題をコンピュータに報告します. ユーザはそれらの情報を知りたいと思うかも知れません. また, PostScript プリンタで課金作業をもっとも効率よく行なうためには, 双方向通信が必要となります. この方法ではまず, プリンタの現在のページカウント (起動してから今まで何枚の紙を印字したか) の情報を得ます. 次に, ユーザのジョブを実行し, 終了後, 再びページカウントを得ます. この二つの数を差によって, 課金対象となる紙の枚数を知ることができるのです.
プリンタをパラレルインタフェースを使って接続する場合は, セントロニクスケーブルでプリンタとコンピュータを接続してください. 詳しい説明はプリンタやコンピュータに付属する説明書に書かれているはずです.
その際, どのパラレルポートを使用したかを覚えておいてください. FreeBSDでは最初のポートは /dev/lpt0, 二番目 /dev/lpt1 であ り, 三番目以降も同様に続きます.
シリアルインタフェースを使ってプリンタを使う場合は, 適切なシリアルケーブルでプリンタとコンピュータを接続してください. 詳しい説明はプリンタ, コンピュータ, あるいは両方に付属する説 明書に書かれているはずです.
"適切なシリアルケーブル"が良くわからないときは, 次のどれかを試してみてください.
モデム用ケーブルでは, それぞれのピンは他方のコネクタの対応するピンと線でつながっています. このタイプのケーブルは "DTE-DCE" 間ケーブルとしても知られています (訳注: 日本ではストレートケーブルという名前で売られています).
ヌルモデム用ケーブルでは, あるピンは対応するピンとを接続していますが, あるピン (たとえば, データ送信用とデータ受信用のピン) が交差して接続したり, いくつかのピンは内部で短絡していたりします. このタイプのケーブルは, "DTE-DTE" 間ケーブルと呼ばれています (訳注: 日本ではクロスケーブルという名前で売られています).
A シリアルプリンタ用ケーブルは, ある特定のプリンタで必要とされるものです. ヌルモデムケーブルと似ていますが, 内部で短絡させる代わりに, ある信号を他方側に送るために使用しています.
この他に, プリンタ用の通信パラメータを設定する必要があります. 通常, プリンタのフロントパネルや DIP スイッチによって制御します. コンピュータとプリンタの双方で設定できる最高の通信速度 [bps] (ビット/秒. ボーレートと示されているときもある) を選んでください. そして, データビット (7 または 8), パリティ(偶/奇/なし), ストップビット (1 または 2) を選んでください. そして, フローコントロールの有無 (制御なし, または XON/XOFF ("イン・バンド" または "ソフトウェア"フローコントロールとも呼ばれる)) を選びます. 以下に続くソフトウェアの設定のために, ここでの設定を覚えておいてください.
本節では FreeBSD の LPD スプーリングシステムで印字をおこなうために 必要となるソフトウェアの設定について説明しています.
本節の概要は次のようになります.
プリンタで使用するポートのために, 必要があれば, カー ネルの書き変えをおこないます. 「カーネルの変更」で, このためにしなくてはなら ないことを説明しています.
パラレルポートを使用している場合は, パラレルポートの ための通信モードの設定します. 詳細は, 「 パラレルポートの通信モードを設定する 」で説明しています.
オペレーティングシステムからプリンタにデータが送ら れているかをテストします. 「 プリンタとの通信状況を調べる」で, どのように テストするかの提案をいくつかおこなっています.
ファイル/etc/printcapを変更し, LPDの設定を おこないます. この節で, どのように変更するかを 説明しています.
オペレーティングシステムのカーネルの コンパイルをおこなうこと によって, 指定されたのデバイスが機能するようになります. シリ アル, または, パラレルインタフェースをプリンタで使用する場合, 必要なデバイスがこの指定の中に含まれていなくてはなりません. したがって, 必要なデバイスがカーネルに組み込まれていない場合, 追 加のシリアル, または, パラレルポートをサポートするために, カー ネルの再コンパイルが必要となるかもしれません.
シリアルポートが現在使用しているカーネルで サポートされている かどうかを調べるためには, 次のように入力します.
# dmesg | grep sioN
ここで, N はシリアルポートの番号を示し, この番号は0から 始まります. 次のような出力があった場合, カーネルはそのポー トをサポートしています.
sio2 at 0x3e8-0x3ef irq 5 on isa
sio2: type 16550Aパラレルポートが現在使用しているカーネルで サポートされている かどうかを調べるためには, 次のように入力します.
# dmesg | grep lptN
ここで, N はパラレルポートの番号を示し, この番号は0から 始まります. 次のような出力があった場合, カーネルはそのポー トをサポートしています.
lpt0 at 0x378-0x37f on isa
上記の出力が得られない場合, プリンタを使うため, オペレーティ ングシステムにパラレル, または, シリアルポートを認識し, 使用 できるようにするためには カーネルを変更する必要があります.
シリアルポートをサポートさせるには, 「 FreeBSDカーネルのコンフィグレーション」の節をご覧く ださい. パラレルポートをサポートさせる場合も, その節と, あ わせて, この節に続く節もご覧ください.
カーネルがシリアル, または, パラレルポートを通じての通 信をサポートしていたとしても, システム上で動いているプログ ラムがデータの送受信をおこなうための ソフトウェアインタフェース がさらに必要になります. そのインタフェースは, /dev ディレクトリにあるエントリに相当します.
/dev エントリにポートを加えるために
su(1) コマンドで root になります. suコマンド でパスワードを聞かれたら, ルート用のパスワードを入力し ます.
/dev ディレクトリに移動します.
# cd /dev
次のように入力します.
# ./MAKEDEV port
ここで, port は, 作成するポート名です. 1番目 のパラレルポートのときは lpt0 に, 2番目のときは lpt1 になり, 以降同様になります. 1番目のシリア ルポートのときは, ttyd0 に, 2番目のときは ttyd1 になり, これも以降同様となります.
次を入力し, デバイスのエントリができたか確認し ます.
# ls -l port
パラレルインタフェースを使用している場合, FreeBSDでは, 割り込み駆動型にするか, プリンタとの通信の状況をカーネルに監 視させるかのいずれかを選択できます.
GENERIC カーネルでは割り込み駆動方式が, デフォルトになっています. この方式では, オペレーティングシ ステムはプリンタがデータを受け付けられるかどうかを調べ るために, IRQ ラインを一つ使用します.
監視方式では, オペレーティングシステムにプ リンタがもっとデータを受け付けられるかどうかを繰り返し 尋ねるように指示します. そして, 受け付けるという応答を 受けたとき, カーネルはさらなるデータを送信します.
割り込み駆動方式は, いくらか高速になりますが, 貴重な IRQ ラインを一つ消費します. うまく機能するものをお使いください.
通信モードを設定するためには2つの方法があります. 1つはカー ネルを変更することで, もう一つは lptcontrol(8) プログラムを使用する方法です.
カーネルを設定することによって, 通信モードを変更する.
カーネルコンフィグレーションファイルを変更しま す. lpt0 のエントリを探すか追加してください. 2番目 のパラレルポートを設定するときは, 代わりに lpt1 を使います. 以下, 3番目のポートは lpt2 となってい きます.
イベント駆動方式にする場合は, irq 指 定を追加します.
device lpt0 at isa? port? tty irq N vector lptintr
ここで, N はパラレルポート用の IRQ 番号で す.
監視方式を使用する場合は, irq を追加 してはいけません.
device lpt0 at isa? port? tty vector lptintr
ファイルをセーブし, config プログラムを起動 し, カーネルの構築, インストールをおこないます. そして, リ ブートしてください. 詳細は, 「 FreeBSDカーネルのコンフィグレーション」を参照 してください.
lptcontrol(8) で通信モードを設定する場合
lptN をイベント駆動方式に設定する場合は, 次のように入力します.
# lptcontrol -i -u N
lptN を監視方式に設定する場合は, 次のように入力します.
# lptcontrol -p -u N
これらのコマンドを /etc/rc.local ファイルに追加 しておくと, システムをブートする度に通信モードを設定する ことができます. 詳細については, lptcontrol(8) をご覧ください.
スプーリングシステムの設定に進む前に, オペレーティング システムがプリンタにデータを送ることに成功しているかどうか を確かめるべきでしょう. これにより, 印字がうまくいかないと き, プリンタとの通信が問題なのか, スプーリングシステムが問 題なのかを分けて調べることがかなり容易になります.
プリンタをテストするためには, プリンタに何かのテキストを送 信してみます. 送信した文字をすぐに印字してくれるプリンタに は, lptest(1) コマンドを使うと有用です. このコマンドは印 字可能な96文字のASCII文字すべてを96行生成します.
PostScript (または他の言語に対応した) プリンタの場合 は, もっと巧妙なテストが必要になります. 次のような, 簡単な PostScript プログラムを使えば十分でしょう.
%!PS
100 100 moveto 300 300 lineto stroke
310 310 moveto
/Helvetica findfont 12 scalefont setfont
(Is this thing working?) show
showpageNote: このドキュメントでプリンタ用言語を参照するとき は, PostScript のような言語を仮定しており, Hewlett Packard の PCL は考慮していません. PCL は非常に機能的なの ですが, プレインテキストにエスケープシーケンスを混ぜること ができます. PostScript ではプレインテキストを直接印字 することはできません. このような種類のプリンタ言語に対して は, 特別な対応をおこなわなければなりません.
この節では, FreeBSDがパラレルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について説明し ています.
パラレルポートのプリンタをテストするために
su(1) コマンドで root になります.
プリンタにデータを送ります.
プリンタがプレインテキストを印字できる場合, lptest(1) コマンドを使います. 次のように入力してください.
# lptest > /dev/lptN
ここで, N はパラレルポートの番号で, 番号は 0から始まります.
プリンタが PostScript か他のプリンタ 言語を使用している場合, そのプリンタに簡単なプロ グラムを送信してください. 次のように入力します.
# cat > /dev/lptN
そして, 一行一行, プログラムを慎重に入力して 下さい. RETUREN または ENTER キーを入力してしま うと, その行は編集できなくなります. プログラムの 入力が終わったら, CONTROL+Dか, あなたが設定して いるファイル終了のキーを押してください.
もしくは, プログラムを入力したファイルがある 場合は, 次のように入力してください.
# cat file > /dev/lptN
ここで, file はプログラムが格納されていて, プリンタに送信するファイルの名前です.
これで何かがプリントされることでしょう. 印字されたテキ ストがおかしくても心配しなくても構いません. それについ ては, 後で修正します.
この節では, FreeBSDがシリアルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について述べられ ています.
シリアルポートのプリンタをテストするために
su(1) コマンドで root になります.
/etc/remote ファイルを編集します. 次の エントリを加えてください.
printer:dv=/dev/port:br#bps-rate:pa=parity
ここで, port シリアルポート (ttyd0, ttyd1 など) のデバイスエントリで, bps-rateは プリンタとの通信の転送速度[bit/秒], parityはプリ ンタとの通信で必要とされるパリティ (even, odd, none, zeroのいずれか) を表わしていま す.
次の例は, プリンタをシリアルケーブルでパリティなし, 転送速度 19200bpsで第3番目のシリアルポートに接続した場 合です.
printer:dv=/dev/ttyd2:br#19200:pa=none
tip(1) コマンドでプリンタと接続します. 次のよ うに入力してください.
# tip printer
これがうまくいかなかった場合は, /etc/remoteを 編集して, /dev/ttydN の代わりに /dev/cuaaN を試してみてください.
プリンタにデータを送ります.
プリンタがプレインテキストを印字できる場合, lptest(1) コマンドを使います. 次のように入力してください.
~$lptest
プリンタが PostScript か他のプリンタ 言語を使用している場合, そのプリンタに簡単なプロ グラムを入力します. 一行一行, プログラムを慎 重に入力してください. バックスペースキーや他の編 集用のキーは, プリンタの制御コードに割り当てられ ているかもしれません. プログラムが終了したことを プリンタに伝えるための特別なファイル終了キーを入 力する必要があるかもしれません. PostScript プリンタの場合, CONTROL+Dを入力します.
もしくは, プログラムを入力したファイルがある 場合は, 次のように入力してください.
~>file
ここで, file はプログラムが格納されている ファイル名です. tip(1) コマンドでファイルを送 信した後は, ファイル終了を表わすキーを入力する必要 があります.
これで何かがプリントされることでしょう. 印字されたテキ ストがおかしくても心配しなくても構いません. それについ ては, 後で修正します.
ここまでで, プリンタはコンピュータに接続され, (必要なら) プリンタと通信できるようにカーネルを変更し, 簡単なデータをプ リンタに送信することができているはずです. これで, LPDにプリ ンタへのアクセスを 制御させる設定をおこなう準備が整いました.
LPDの設定は /etc/printcap を編集することでおこないます. LPDスプーリングシステムはスプーラが使われる毎にこのファイル を参照します. そのため, ファイルを更新するとすぐにその変更が 反映されます.
printcap(5) ファイルの書式は簡単です. /etc/printcap の編集はお好みのテキストエディタをお 使いください. このファイルの書式は, /usr/share/misc/termcap や /etc/remote といった他のケイパビリティファイルと一致しています. この書式 のついての詳細な情報については cgetent(3) をご覧ください.
スプーラの単純な設定法は, 次のステップでおこないます.
プリンタに名前 (と簡単な別名2〜3個) を付け, それを /etc/printcap ファイルに記述します. これについ ては, 「 プリンタに名前を付ける」 を参照してください.
sh の項目を追加することで, ヘッダページの出 力を禁止します (デフォルトは許可). これについては, 「 ヘッダページの印字を禁止する」 を参照してください.
スプール用のディレクトリを作成し, その位置を sd 項目で指定します. これについては, 「 スプーリングディレクトリの作成」 を参照してください.
プリンタを使用するために /dev エントリを 設定し, /etc/printcap の lp 項目でそのエ ントリを指定します. これについては, 「 プリンタデバイスの特定」 を参照してください. プリンタをシリアルポートに接続した場合は, fs, fc, xs, xc の項目を設定する必要があります. こちらについては, 「 スプーラのための通信パラメータの設定」 を参照してください.
プレインテキスト用の入力フィルタのインストールを おこないます. 「 テキストフィルタのインストール」 を参照してください.
lpr(1) コマンドで何かを印字することで設定のテス トをおこないます. 印字してみよう と トラブルシューティング を参照してください.
Note: PostScript プリンタのような, プリンタ言語を 使用しているプリンタには, プレインテキストを直接印字させる ことができません. 上にアウトラインを示し, 以下の節で説明す る簡単な設定方法の説明では, そのようなプリンタを設置してい る場合は, プリンタが認識できるファイルだけを印字の対象とし ているという仮定をしています.
多くの場合, 利用者はシステムに設置されているプリンタすべてでプ レインテキストが印字できることを期待しています. 印字作業を おこなうためにLPDのインタフェースを利用するプログラムでも, 通 常, そのような仮定を置きます. プリンタ言語を使用するプリン タを設置しており, そのプリンタ言語で記述されたジョブと, これに加えて, プレインテキストのジョブも印字できるよ うにしたいならば, 上で示した簡単な設定方法に加えて, さら なる設定をおこなうことを強くお勧めします. すなわち, 原始的なプ レインテキストから PostScript (もしくは, 他のプリンタ 言語) に変換するプログラムをインストールしてください. 「 プレインテキストのジョブを PostScript プリンタで印字する」 で, そ れをどのようにおこなえばよいのかが 説明されています.
Note: 訳注: 日本語を印字したい場合は, プリンタ言語を使用し ていない「日本語プリンタ」についても, プリンタ固有のエスケー プシーケンスを送る必要があります. また, 漢字コードをプリン タが設定しているものに変換したりする必要があり, 各プリンタ 毎に, 日本語用のフィルタが必要になります.
最初の (簡単な) ステップで, プリンタの名前を考えます. プ リンタには別名をいくつか付けることもできるので, 機能的な名前 でも風変わりな名前でもどちらを選んでもまったく 問題はありません.
少なくとも1つのプリンタには, /etc/printcap の中 で, lp という別名を持たせるべきでしょう. この名前は デフォルトのプリンタ名になっています. ユーザが環境変数 PRINTER を設定しておらず, かつ, LPDコマンドのコマンドラインでプリ ンタの名前が指定されていない場合, lp がデフォルトのプリ ンタ名となり, そのプリンタに出力されます.
それから, これは共通の慣習ですが, プリンタの最後の別名には, メーカーやモデル名を含むプリンタの完全な名称をつけることに なっています.
名前と別名のいくつかを決めたら, /etc/printcap ファ イルに設定します. プリンタ名は一番左のカラムから書き始めま す. 別名はそれぞれ縦棒によって区切られ, 最後の別名の後ろに コロンを置きます.
次の例では, 2台のプリンタ (Diablo 630 ラインプリンタと Panasonic KX-P4455 PostScript レーザライタプリンタ) が定義 されている /etc/printcap のスケルトンを記しています.
#
# /etc/printcap for host rose
#
rattan|line|diablo|lp|Diablo 630 Line Printer:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:この例では, 最初のプリンタに rattan という名前と別名 として, line, diablo, lp そして Diablo 630 Line Printer が付けられています. 別名とし て lp があるので, このプリンタはデフォルトのプリンタとなっ ています. 2番目は bamboo と名付けられ, 別名として, ps と PS, S, panasonic, Panasonic KX-P4455 PostScript v51.4 が付けられていま す.
LPDスプーリングシステムでは, デフォルトでジョブ毎にヘッ ダページを印字します. ヘッダページにはジョブを要求したユー ザ名, ジョブが送られたホスト名, そして, ジョブの名前が素晴 らしい大きな文字で印字されています. 残念なことに, この余分 なテキストすべてが, 簡単なプリンタ設定法のデバッグの際に紛れ 込んできてしまいます. このため, ヘッダページの出力を禁止し ておきます.
ヘッダページの出力を禁止するには, /etc/printcap にあるプリンタのエントリに sh の項目を追加します. 次 に, sh を加えた /etc/printcap の例を示します.
#
# /etc/printcap for host rose - no header pages anywhere
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:この書式を正しく使うための注意をしておきます. 最初の行は左 端のカラムから始まります. それに続く行は TAB ひとつ分だけ 字下げします. 最後の行以外のすべての行は, 行末にバックスラッ シュを記述します.
スプーラの簡単な設定の次のステップでは, スプーリン グディレクトリを作成します. プリンタに送られるジョブ は, その印字が終了するまでこのディレクトリに置かれます. また, 他のたくさんのスプーラもこのディレクトリにファイ ルを置きます.
様々な事情によりスプーリングディレクトリは, 通常, 慣例 として /var/spool の下に置きます. また, スプーリングディレクトリの内容はバックアップをす る必要はありません. mkdir(1) によってディレクトリを 作るだけでスプーリングディレクトリの復旧は完了します.
スプーリングディレクトリの名前は, これも慣例ですが, 次 のようにプリンタの名前と同じにします.
# mkdir /var/spool/printer-name
しかしながら, ネットワーク上に使用可能なプリンタがたく さんあるならば, LPDで印字するための専用のディレクトリに スプーリングディレクトリを置きたいと思うかもしれません. 例に出てきたプリンタ rattan と bamboo につい て, この方式を採用すると, 次のようになります.
# mkdir /var/spool/lpd
# mkdir /var/spool/lpd/rattan
# mkdir /var/spool/lpd/bambooNote: 各ユーザが印字するジョブのプライバシを守りた いと考えているならば, スプーリングディレクトリを保護し て, これを誰からでもアクセスできないようにしたいと思う かもしれません. スプーリングディレクトリは, deamon ユー ザと daemon グループに所有され, 読み込み, 書き込み, 検 索可能であり, 他からはアクセスできないようにするべきで す. 例題のプリンタに対して, 次のようにすることにしましょ う.
# chown daemon.daemon /var/spool/lpd/rattan # chown daemon.daemon /var/spool/lpd/bamboo # chmod 770 /var/spool/lpd/rattan # chmod 770 /var/spool/lpd/bamboo
最後に, /etc/printcap ファイルで, これらのディ レクトリの位置を LPD に伝える必要があります. スプーリ ングディレクトリのパス名は sd 項目で指定します.
#
# /etc/printcap for host rose - added spooling directories
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:プリンタ名が最初のカラムから始まっており, そのプリンタ に関して記述される他のエントリは TAB で字下げされてい ること, 各行がバックスラッシュで終わっていることに注意 してください.
sd によりスプーリングディレクトリが指定されていな い場合, スプーリングシステムは /var/spool/lpd デフォルト値として使用します.
「ポート用エントリを /dev に追加する」では, FreeBSD でプリン タとの通信に使用される /dev ディレクトリ内の エントリを特定します. そして, LPD にその情報を伝えま す. 印字するジョブを受け取ると, スプーリングシステムは, (プリンタにデータを渡す義務がある) フィルタプログラムに 代わって指定されたデバイスをオープンします.
/etc/printcap ファイルで lp 項目を使って /dev エントリを記入します.
ここでの例では, rattan は1番目のシリアルポートに, bamboo は6番目のシリアルポートに接続されているこ とにしましょう. このとき, /etc/printcap には 次のようになります.
#
# /etc/printcap for host rose - identified what devices to use
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyd5:/etc/printcap でプリンタの lp 項目が指定 されていない場合は, LPD はデフォルトとして /dev/lp を使用します. /dev/lp は, 現在の FreeBSD には存在していません.
設置したプリンタがパラレルポートに 接続されている場合は, 「 テキストフィルタのインストール」 まで読み飛ばしてください. そうでない場合は, 次節の説明に続いてください.
シリアルポートにプリンタを接続した場合, プリンタにデー タを送信するフィルタプログラムに代わり, 通信速度やパリ ティ, その他のシリアル通信パラメータを設定することがで きます. このことによる利点は,
/etc/printcap を編集するだけで, 様々な 通信パラメータを試してみることができます. フィルタプロ グラムを再コンパイルする必要はありません.
スプーリングシステムで, シリアル通信の設定が異 なっているかもしれない複数のプリンタに同じフィルタプロ グラムを使うことが可能になります.
次の /etc/printcap の項目で, lp で指定 されたデバイスのシリアル通信 パラメータを制御できます.
デバイスの通信速度を bps-rate に設定します. ここ で, bps-rate は 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400[bit/秒] のいずれかです.
デバイスをオープンした後で, sgttyb 構造体の clear-bits フラグビットをクリアします.
sgttyb 構造体の clear-bits フラグビットをセッ トします.
デバイスをオープンした後で, ローカルモードビット clear-bits をクリアします.
ローカルモードビット set-bits をセットします.
fc, fs, xc, そして xs のビットに関 する詳しい情報については, /usr/include/sys/ioctl_compat.h を参照してく ださい.
項目 lp で指定されたデバイスを LPD がオープンする とき, LPD は sgttyb 構造体のフラグビットを読み出 します. そして, 項目 fc の全ビットをクリアします. 次に, 項目 fs のビットをセットし, その結果を設定 します. ローカルモードビットに関しても同様におこなわれます.
例題のプリンタで6番目のシリアルポートに接続されたプリ ンタの設定を追加してみましょう. 通信速度は38400bpsに設 定します. フラグビットとして, TANDEM, ANYP, LITOUT, FLUSHO, PASS8 をセットします. ローカルモードビットでは, LITOUT と PASS8 フラグをセットします.
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyd5:fs#0x82000c1:xs#0x820:ここまでで, プリンタにジョブを送るために使うテキストフィ ルタを LPD に設定する準備が整いました. テキストフィ ルタとは, 入力フィルタとしても知られていますが, 印字するジョブがあるときに LPD が起動するプログラムで す. LPD がプリンタのためにテキストフィルタを起動する とき, LPD はフィルタの標準入力からプリントするジョブ を入力し, フィルタの標準出力に項目 lp で指定され たプリンタデバイスを接続します. フィルタは, 標準入力か らジョブを読み込み, プリンタのための必要な変換をおこなった 後, その結果を標準出力に出力する, これにより印字がなさ れることを期待されています. テキストフィルタについての 更に詳しい情報については, 「 フィルタはどのように機能しているか」 をご覧ください.
ここでの簡単なプリンタ設定では, プリンタにジョブを送るため, /bin/cat を実行するだけの簡単なシェルスクリプ トで間に合います. FreeBSD に標準で付属している lpf というフィルタでは, バックスペース文字を使っ た下線引きの動作をおこなう文字ストリームをうまく扱うことが できないプリンタのための代替処理をおこなってくれます. もちろん, 他のどんなフィルタプログラムを使っても構いません. フィルタ lpf については, 「テキストフィルタ lpf」で詳しく説明します.
最初に, 簡単なテキストフィルタであるシェルスクリプト /usr/local/libexec/if-simple を作ってみましょ う. 次のテキストをお好みのテキストエディタでファイルに 書き込んでください.
#!/bin/sh
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout. Ignores all filter arguments.
/bin/cat && exit 0
exit 2そして, このファイルを実行可能にします.
# chmod 555 /usr/local/libexec/if-simple
LPD にこのテキストフィルタを使うことを設定するためには, /etc/printcap に if 項目を使って指定しま す. これまでの /etc/printcap の例のプリンタ 2台に, このフィルタを加えてみましょう.
#
# /etc/printcap for host rose - added text filter
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:\
:if=/usr/local/libexec/if-simple:lpd(8) は lpd_enable 変数に従って /etc/rc から実行されます. この変数の デフォルト値は NO です. まだ そうしていなかったならば
lpd_enable="YES"
の行を /etc/rc.conf に追加して 計算機を再起動するか, そのまま lpd(8) を 起動してください.
# lpd
簡単な LPD 設定も終わりにたどり着きました. 残念ながら, 設定はこれでおしまいというわけではありません. なぜなら, さらに, 設定をテストし, すべての問題点を解決しなくては ならないからです. 設定をテストするために, 何かを印字し てみましょう. LPD システムで印字をするためには, lpr(1) コマンドを使います. このコマンドは, 印字する ためのジョブを投入する働きをします.
lpr(1) コマンドを 「 プリンタとの通信状況を調べる」で紹介した, あるテスト用のテキストを生成してくれる lptest(1) プログラムと一緒に使うこともできます.
簡単な LPD 設定をテストするために:
次のように入力してください.
# lptest 20 5 | lpr -Pprinter-name
ここで, printer-name は /etc/printcap で指定したプリンタ名 (もしくはその別名) です. デフォルト のプリンタを使用する場合は, -P 引数を付けないで lpr(1) を打ち込んでください. もう一度述べますが, ポス トスクリプトを期待しているプリンタをテストするならば, lptest(1) を使う代わりに PostScript で書かれたプ ログラムをプリンタに送ってください. プログラムを送るた めには, プログラムをファイルに格納して, lpr file と打ち込みます.
PostScript プリンタの場合, 送信したプログラムによ る結果が得られるでしょう. lptest(1) を使った場合は, 以下のような結果が見られるでしょう.
!"#$%&'()*+,-./01234
"#$%&'()*+,-./012345
#$%&'()*+,-./0123456
$%&'()*+,-./01234567
%&'()*+,-./012345678更にプリンタをテストしたい場合は, (言語ベースのプリン タのための) もっと大きなプログラムを送信するか, 引数を 変えて lptest(1) を実行します. 例えば, lptest 80 60 で それぞれ80文字の行を60 行生成します.
プリンタがうまく動かなかった場合は, 次の節, 「 トラブルシューティング」をご覧ください.