標準プリンタインタフェースプログラムでサポートされないプリンタを使用する場合は、独自のプリンタインタフェースプログラムを提供できます。標準プログラムをコピーし、指定したプリンタを使用するように LP 印刷サービスに指示できます。ただし、まず標準プログラムについて理解する必要があります。次の節では、標準プログラムについて説明します。
プリンタインタフェースプログラムの機能は次のとおりです。
必要に応じてプリンタポートを初期化する。標準プリンタインタフェースプログラムは、stty コマンドを使用してプリンタポートを初期化する。
プリンタハードウェアを初期化する。標準プリンタインタフェースプログラムは、terminfo データベースと TERM シェル変数から制御シーケンスを取得する。
必要に応じてバナーページを印刷する。
印刷要求で指定された部数を印刷する。
リリース 3.2 より前の UNIX System V のプリンタインタフェースプログラムでも、多くの場合、SunOS 5.10 または互換 LP 印刷サービスで使用できます。ただし、一部の -o オプションが、SunOS 5.10 または互換 LP 印刷サービスでは標準化されています。これらのオプションは、すべてのプリンタインタフェースプログラムに渡されます。これらのオプションは、古いインタフェースで使用される同じ名前のオプションの妨げとなることがあります。
プリンタポートを開く処理は、プリンタインタフェースプログラムではなく LP 印刷サービスが受け持ちます。プリンタポートは標準出力としてプリンタインタフェースプログラムに渡されます。 また、プリンタはプリンタインタフェースプログラムの「制御端末」として識別されるので、ポートが「ハング」すると、プリンタインタフェースプログラムに SIGHUP 信号が送信されます。
標準 (モデル) プリンタインタフェースプログラム は /usr/lib/lp/model/standard です。LP 印刷サービスはこのプログラムを使用し、次の表に示す印刷デフォルトを設定します。
表 7–2 デフォルトのプリンタポート特性
特性 |
デフォルト設定 |
---|---|
デフォルトフィルタ |
None |
文字ピッチ |
None |
行ピッチ |
None |
ページ幅 |
None |
ページ長 |
None |
文字セット |
None |
stty オプション |
9600 cs8 -cstopb -parenb -parodd ixon -ixany opost -olcuc onlcr -ocrnl -onocr -onlret -ofill nl0 cr0 tab0 bs0 vt0 ff0 |
0 |
ボーレートや出力オプションなどの端末特性を変更する必要がある場合は、標準プリンタインタフェースプログラム内で、次のコメントから始まるセクションを探します。
## Initialize the printer port
詳しくは、「プリンタポート特性の調整」を参照してください。
印刷し終わると、インタフェースプログラムは印刷ジョブの状態を示すコードを返して終了します。終了コードは、プリンタインタフェースプログラムの最後のエントリです。
次の表は、終了コードとそのコードが LP 印刷サービスでどのように解釈されるかを示しています。
表 7–3 プリンタインタフェースプログラムの終了コード
終了コード |
LP 印刷サービスにとっての意味 |
---|---|
0 |
印刷要求は正常に完了した。プリンタ障害が発生した場合は、クリアされた |
1 から 127 |
要求の印刷中に障害が発生した。たとえば、印字できない文字が多すぎる、要求がプリンタの容量を超えているなど。LP 印刷サービスは、その要求を依頼したユーザーに、印刷中にエラーが発生したことを通知する。このエラーはその後の印刷要求には影響しない。プリンタ障害が発生するとクリアされる |
128 |
このコードは、LP 印刷サービスが使用するために予約されている。インタフェースプログラムは、このコードを返して終了してはいけない |
129 |
要求の印刷中にプリンタ障害が発生した。この障害は、その後の印刷要求に影響を及ぼす。プリンタの障害回復が LP 印刷サービスに管理者によって問題が解決されるまで待つように指示すると、LP 印刷サービスはプリンタを使用不可にする。障害回復を印刷の継続にすると、LP 印刷サービスはプリンタを使用不可にしない。印刷サービスは、数分後に印刷を再試行する |
>129 |
これらのコードは、LP 印刷サービスが使用するために予約されている。インタフェースプログラムは、この範囲内のコードを返して終了してはいけない |
プログラムがコード 129 を返して終了すると、root はプリンタ障害を警告されます。また、LP 印刷サービスは、障害がクリアされた後に要求を最初から印刷し直さなければなりません。要求全体を印刷し直したくない場合は、インタフェースプログラムに障害メッセージを LP 印刷サービスへ送信させることもできます。(まず、障害がクリアされるのを待ちます。) 障害がクリアされると、インタフェースプログラムはファイルの印刷を再開できます。印刷が終了すると、プリンタインタフェースプログラムは障害が発生しなかった場合と同様に終了コード 0 を返すことができます。このアプローチには、次のような利点があります。 障害が自動的にクリアされると、それをインタフェースプログラムが検出できます。このため、管理者がプリンタを再び使用可能にする必要がありません。
lp.tell プログラムを使用すると、LP 印刷サービスに障害メッセージを送信できます。このプログラムは、標準プリンタインタフェースコード内の LPTELL シェル変数によって参照されます。プログラムは標準入力を取り込んで LP 印刷サービスに送信します。LP 印刷サービスは、標準入力をメッセージに入れて、管理者にプリンタ障害を警告します。標準入力が空であれば、lp.tell プログラムは警告を開始しません。lp.tell プログラムの例として、次のコメントの直後の標準プリンタインタフェースコードを確認してください。
# Set up the $LPTELL program to capture fault messages here
特殊な終了コード 129 または lp.tell プログラムを使用すると、プリンタインタフェースプログラムはプリンタ自体を使用不可にする必要がありません。インタフェースプログラムは、プリンタを直接使用不可にすることもできます。しかし、その場合は障害警告メカニズムが無効になります。LP 印刷サービスがプリンタ障害を検出した場合にのみ警告が送信され、特殊終了コードと lp.tell プログラムはその主要検出ツールです。
LP 印刷サービスがいずれかの時点でファイルの印刷を中断しなければならない場合は、TERM 信号 (トラップ番号 15) を使用してインタフェースプログラムを終了させます。詳細は、kill(1) および signal(3C) のマニュアルページを参照してください。プリンタインタフェースプログラムが他の信号を受信して終了した場合、LP 印刷サービスはその後の印刷要求は影響されないものとみなします。その結果、LP 印刷サービスはそのプリンタを使用し続けます。LP 印刷サービスは、要求を依頼したユーザーに、その要求が正常に終了しなかったことを通知します。
インタフェースが最初に呼び出されると、信号 HUP、INT、QUIT、PIPE (トラップ番号 1、2、3、13) は無視されます。標準インタフェースは、信号が適切な時期にトラップされるように、このデフォルト動作を変更します。標準インタフェースは、これらの信号の受信をプリンタの問題を示す警告として解釈します。標準インタフェースは、信号を受信すると障害警告を発します。
カスタマイズされたプリンタインタフェースプログラムを作成し、印刷サーバー上で標準プリンタインタフェースプログラムの代わりに使用できます。そのためには、lpadmin コマンドを使用して、プログラムを特定のプリンタの LP 印刷サービスに登録します。
印刷サーバーにスーパーユーザーまたは lp としてログインするか、同等の役割になります。
# cp /var/spool/lp/model/standard custom-interface |
(省略可能) すでに独自のプリンタインタフェースプログラムがある場合は、手順 5 に進みます。
標準プリンタインタフェースプログラムのコピーを必要に応じて変更します。
詳しくは、「標準プリンタインタフェースプログラム」のプログラムの説明を参照して、何を変更する必要があるかを判断してください。
独自のプリンタインタフェースプログラムを特定のプリンタ用に設定します。
# lpadmin -p printer-name -i custom-interface |
独自のプリンタインタフェースプログラムを使用するプリンタ名を指定する
独自のプリンタインタフェースプログラム名
独自のプリンタインタフェースプログラムが LP 印刷サービスに登録され、ユーザーが印刷要求を出すと、そのプリンタに使用されます。
独自のプリンタインタフェースプログラムが /etc/lp/printers/printer-name/configuration ファイルに追加されたかどうかを確認します。
次の例は、プリンタ luna の独自のプリンタインタフェースプログラム custom を設定する方法を示しています。
# lpadmin -p luna -i custom |
次の例は、プリンタ venus からプリンタ asteroid に独自のプリンタインタフェースプログラムをコピーする方法を示しています。
# lpadmin -p asteroid -e venus |