作業 |
説明 |
参照先 |
---|---|---|
サポートされていないプリンタの terminfo エントリを追加する |
サポートされていないプリンタを初期化し、必要な設定を行うために、terminfo データベースにエントリを追加する | |
独自のプリンタインタフェースプログラムを設定する |
標準的なプリンタインタフェースプログラムによってサポートされていないプリンタがある場合は、独自のプリンタインタフェースプログラムを設定できる | |
プリンタポートの特性を調整する。 |
LP 印刷サービスによって設定されるプリンタポート特性に、プリンタの通信設定との互換性を持たせる |
LP 印刷サービスは、ほとんどのプリンタと印刷ニーズに対応できる十分な柔軟性を持つように設計されていますが、あらゆる状況に対処できるわけではありません。LP 印刷サービスの標準機能では対処できない印刷要求が発生する場合もあります。また、LP 印刷サービスによるプリンタの処理方法に当てはまらないプリンタもあります。
LP 印刷サービスは、次のような方法でカスタマイズできます。
プリンタポートの特性を調整する。
terminfo データベースを調整する。
プリンタインタフェースプログラムをカスタマイズする。
印刷フィルタを作成する。
フォームを定義する。
LP 印刷サービスによって設定されるプリンタポート特性には、プリンタの通信設定と互換性がなければなりません。LP 印刷サービスから提供されたデフォルトのプリンタポート設定値がプリンタで機能しない場合は、プリンタのマニュアルを参照し、そのプリンタが LP 印刷サービスに対してどのような設定値が必要かを調べてください。プリンタ通信設定を設定および表示するには、stty コマンドを使用します。
次の表は、LP 印刷サービスが使用するデフォルトの stty 設定値を示しています。
表 7–1 LP 印刷サービスが使用する stty のデフォルト設定値
オプション |
説明 |
---|---|
-9600 |
ボーレートを 9600 に設定する |
-cs8 |
8 ビットバイトを設定 |
-cstopb |
1 バイト当たり 1 ストップビットを送信 |
-parity |
パリティーを生成しない |
-ixon |
XON/XOFF (START/STOP または DC1/DC3 ともいう) を使用可能にする |
-opost |
以下にリストされた設定値をすべて使用して「処理後出力」を実行する |
-olcuc |
小文字を大文字に割り当てない |
-onlcr |
改行をキャリッジリターン / 改行に変更する |
-ocrnl |
キャリッジリターンを改行に変更しない |
-onocr |
カラム 0 でもキャリッジリターンを出力する |
-n10 |
改行後の遅延なし |
-cr0 |
キャリッジターン後の遅延なし |
-tab0 |
タブ後の遅延なし |
-bs0 |
バックスペース後の遅延なし |
-vt0 |
垂直タブ後の遅延なし |
-ff0 |
用紙送り後の遅延なし |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
# lpadmin -p printer-name -o "stty=options" |
プリンタポート特性が変更されたことを確認します。
# lpstat -p printer-name -l |
次の例は、プリンタ luna のポート特性を設定する方法を示しています。parenb オプションはパリティーチェック/生成を使用可能にします。parodd オプションは奇数パリティーの生成を設定します。cs7 オプションは文字サイズを 7 ビットに設定します。
# lpadmin -p luna -o "stty='parenb parodd cs7'" |
次の例は、プリンタ venus の端末ボーレートを 19200 に設定する方法を示しています。
# lpadmin -p venus -o "stty=19200" |
LP 印刷サービスは、インタフェースプログラムと terminfo データベースを使用して、以下の設定を行います。
選択されたページサイズ
文字ピッチ
行ピッチ
文字セット
各プリンタは、terminfo データベース内で短縮名を使用して識別されます。terminfo データベースで使用される短縮名は、TERM シェル変数を設定するのに使用する名前と同じです。また、この名前はプリンタを設定するときに指定するプリンタタイプでもあります。たとえば、各種の PostScript プリンタのエントリは、/usr/share/lib/terminfo/P ディレクトリに入っています。SunOS ソフトウェアリソースが提供するデフォルトエントリは、PS (PostScript 用) と PSR (Reverse PostScript 用) です。
プリンタの terminfo エントリが見つからなくても、ページサイズ、ピッチ、および文字セットを自動選択しないで、LP 印刷サービスでプリンタを使用できます。ただし、印刷要求ごとに正しいモードでプリンタが設定されないという問題が起きることがあります。
使用するプリンタタイプの terminfo エントリがないが、プリンタを正しいモードに設定しておく場合は、次のいずれかを行います。
プリンタで使用するインタフェースプログラムをカスタマイズする
terminfo データベースにエントリを追加する
terminfo データベース内の端末エントリやプリンタエントリには、多数の項目が入っており、定義されています。しかし、LP 印刷サービスはそのうち 50 未満の項目しか使用しません。プリンタで必要となる terminfo 項目の詳細については、「プリンタに必要な terminfo 項目」を参照してください。
プリンタの terminfo エントリを作成する前に、まず、そのプリンタをサポートする既存の terminfo エントリがないことを確認してください。そのためには、類似するプリンタ用のエントリがあれば、それを使用してプリンタを設定してみてください。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
プリンタの terminfo エントリ名を決定します。
/usr/share/lib/terminfo ディレクトリ内のディレクトリには、有効な terminfo エントリがすべて入っています。それを参考にしてプリンタ名を選択してください。
プリンタの terminfo エントリファイルを作成します。
LP 印刷サービスに新しいプリンタを追加するために 表 12–6 エントリ内で定義しなければならない項目については、Table 12–6 を参照してください。terminfo データベースの構造については、terminfo(4) のマニュアルページを参照してください。
新しい terminfo エントリを作成しやすいように、infocmp コマンドを使用して既存の terminfo エントリをファイルに保存します。このコマンドは、作成したいエントリに似た terminfo エントリがある場合に便利です。たとえば、次のコマンドで ps エントリを ps_cust ファイルに保存すると、新しい terminfo エントリになります。
infocmp ps > ps_cust
terminfo エントリファイルをコンパイルして terminfo データベースに入れます。
# tic terminfo_entry |
ここで、terminfo-entry 変数は、作成した terminfo エントリファイルです。
/usr/share/lib/terminfo ディレクトリ内で新しい terminfo エントリファイルをチェックします。
標準プリンタインタフェースプログラムでサポートされないプリンタを使用する場合は、独自のプリンタインタフェースプログラムを提供できます。標準プログラムをコピーし、指定したプリンタを使用するように 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 |