LPD(8)

名称
lpd - ラインプリンタ・スプーラ・デーモン

書式
lpd [-cdlpsW46] [port#]

解説
lpd ユーティリティは、 ラインプリンタのためのデーモン (スプール領域を管理するプログラム) で、 通常はブート時に rc(8) ファイルから起動されます。 このデーモンは、接続されているプリンタの情報を printcap(5) ファイルを一通り読み込むことによって取得し、クラッシュ後に残っていた ファイルがあれば印刷します。 その後、システムコールの listen(2) と accept(2) を用いてキュー内のファイルの印刷・スプール領域へのファイル転送・ キューの表示・キューからのジョブの削除などの要求を受け付けます。 何か要求があると lpd は子プロセスを fork してその要求を処理するので、 親プロセスは続けて次の要求待ちをできるようになっています。

使用できるオプション:

-c  デフォルトでは、リモートホストがローカルホスト上の lpd へ印刷を試みた際にエラーが発生すると、 lpd はリモートホストに対してエラーメッセージのみを送信します。 -c フラグを使用すると、 lpd はこれらの接続エラーを syslog(3) で記録します。

-d  インターネットで listen するソケットにて SO_DEBUG をオンにします (setsockopt(2) 参照)。

-l  -l オプションを つけると、 lpd はネットワークから受けとった正当な要求について記録をとるようになります。 これはデバッグを行う際に有用です。

-p  -p フラグは -s フラグの別名です。 このフラグは価値が低下しており、将来のバージョンの lpd では削除されるかもしれません。

-s  -s (セキュア) フラグは、 lpd に、インターネットで listen するソケットをオープンしないようにさせます。 これは、リモートホストからの接続を lpd が拒否するもののローカルユーザからの印刷要求は許可することを意味します。

-W  デフォルトでは、 lpd デーモンはリモートホストの予約ポート (1024 未満) からの接続のみを受け付けます。 -W フラグを指定すると、 lpd はすべてのポートからの接続を受け付けます。 Windows 用の特定の lpr 実装からの印刷ジョブを受け付けたい場合に有用です。

-4  inet のみ。

-6  inet6 のみ。

-46 inet と inet6 (デフォルト)。

port#
    他のプロセスと接続するのに用いる インターネットポート番号は通常 getservbyname(3) を使って取得しますが、引数 port# を使って変更することも可能です。

プリンタへのアクセス制限は二つの手段を用いて行われます。第一に、全ての要求は /etc/hosts.equiv ファイルもしくは /etc/hosts.lpd ファイルに列挙さ れているマシンからのものでなければなりません。 第二に、アクセスされるプリンタに関する printcap(5) エントリに rs 特性の指定があると、 lpr からの要求はそのプリンタが接続されているマシンにアカウントを持つ ユーザのものしか受け付けられなくなります。

各スプールディレクトリ内に minfree というファイルを作成し、空きとして残しておくディスクのブロック数を 書いておけば、ラインプリンタキューがディスクを使い尽くしてしまわないよう にできます。 minfree ファイルは任意のテキストエディタを使って 編集できます。

このデーモンは、プリンタへのアクセスを 排他的に行うためのロック (後述) を行ったうえで ファイルの処理を開始し、スプール ディレクトリの中に cf で始まる名前のファイルがあるかどうかを調べます。 cf ファイルの内容は印刷すべきファイルの名前もしくは印刷以外で行うべき 何らかの動作を示しています。 ファイル中の各行はキー文字から始まっており、 その行の残りの部分と合わせてどのような動作を行うべきかを表しています。

J   ジョブ名 (job name)。 バーストページに印刷されるジョブ名として用いられる文字列。

C   分類 (classification)。 バーストページに印刷される分類行に用いられる文字列。

L   リテラル (literal)。 この行はパスワードファイルから取り出した ID 情報を保持しており、 この行があると見出しページが印刷されます。

T   表題 (title)。 pr(1) で表題として使用される文字列。

H   ホスト名 (host name)。 lpr(1) が実行されたマシンの名前。

P   人物 (person)。 lpr(1) を実行した人物のログイン名。 これは lprm(1) がジョブの所有権を調べる際に使用されます。

M   現在の印刷ジョブが完了した時、指定のユーザにメールを送ります。

f   整形済みファイル (formatted file)。 すでに整形済みである印刷ファイルの名前。

l   ``f'' とほぼ同じですが、制御文字を通すことと改ページを行わない点が異なります。

p   フィルタとして pr(1) を使用して印刷すべきであるファイルの名前。

t   troff ファイル。 ファイルの内容が troff(1) の出力結果であることを示します。

n   ditroff ファイル。 ファイルの内容がデバイス独立 troff の出力結果であることを示します。

r   DVI ファイル。 ファイルの内容が Tex l の出力する DVI 形式であることを示します。 Stanford の DVI 形式です。

g   graph ファイル。 ファイルの内容が plot(3) の生成したデータであることを示します。

c   cifplot ファイル。 ファイルの内容が cifplot の生成したデータであることを示します。

v   ファイルの内容がラスタイメージであることを示します。

r   ファイルの内容が FORTRAN のキャリッジ制御文字を伴った テキストデータであることを示します。

1   troff R フォント。 デフォルトのものに代えて使用するフォントファイルの名前。

2   troff I フォント。 デフォルトのものに代えて使用するフォントファイルの名前。

3   troff B フォント。 デフォルトのものに代えて使用するフォントファイルの名前。

4   troff S フォント。 デフォルトのものに代えて使用するフォントファイルの名前。

W   幅 (width)。 pr(1) および他のテキストフィルタが使用するページ幅 (文字数) を変更します。

I   字下げ (indent)。 字下げの文字数が ASCII で書かれています。

U   リンク解除 (unlink)。 印刷完了時に消去するファイルの名前。

N   ファイル名 (file name)。 印刷中のファイルの名前。ファイルが標準入力の場合 (lpr(1) がパイプラインの中で実行された場合) は空白になっています。

Z   ロケールです。 pr(1) が使用するロケール文字列です。

何らかのファイルがオープンできない場合、 syslog(3) を通じて LOG_LPR 機能分類でメッセージが記録されます。 lpd ユーティリティは、 最大 20 回まで目的のファイルのオープンを試みますが、それでも失敗すると そのファイルに関わる印刷処理は飛ばします。

lpd ユーティリティは、 ロックファイルを排他的にアクセスする目的あるいは複数のデーモンが同時 にアクティブになるのを回避する目的で flock(2) を使用します。 デーモンが kill されたり異常終了した場合でもロックファイルを 削除する必要はありません。 ロックファイルは普通に読むことができる ASCII 形式で書かれており、2 行からなります。 1 行目はデーモンのプロセスIDで、2 行目は現在実行中である ジョブの制御ファイル名です。 2 行目は lpq(1) および lprm(1) が使用できるよう、常に lpd の現在の状態を示すように更新されています。

関連ファイル
/etc/printcap
    プリンタ記述ファイル
/var/spool/*
    スプールディレクトリ群
/var/spool/*/minfree
    最低限残しておく空き領域の設定
/dev/lp*
    ラインプリンタデバイス
/var/run/printer
    ローカルな要求のためのソケット
/etc/hosts.equiv
    プリンタへのアクセスを許可されているマシンの一覧
/etc/hosts.lpd
    プリンタへのアクセスは許可されているが、同一の管理権限下には 置かれていないマシンの一覧

関連項目
lpq(1), lpr(1), lprm(1), setsockopt(2), syslog(3), hosts.lpd(5), printcap(5), chkprintcap(8), lpc(8), pac(8) 4.2 BSD Line Printer Spooler Manual.

歴史
lpd プログラムは AT&T UNIX から登場しました。