この章では、LP 印刷サービスのカスタマイズについての概要と手順について説明します。
この章で説明する手順は次のとおりです。
プリンタの概要については、第 39 章「印刷管理の概要」を参照してください。
LP 印刷サービスによって設定されるプリンタポート特性には、プリンタの通信設定と互換性がなければなりません。LP 印刷サービスから提供されたデフォルトのプリンタポート設定値がプリンタで機能しない場合は、プリンタのマニュアルを参照し、そのプリンタが LP 印刷サービスに対してどのような設定値が必要かを調べてください。プリンタ通信設定を設定および表示するには、stty コマンドを使用します。
表 44-1 は、LP 印刷サービスに使用されるデフォルトの stty 設定値を示しています。
表 44-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 |
用紙送りの後に遅延を入れない |
印刷サーバーにスーパーユーザーまたは lp としてログインします。
lpadmin コマンドを使用してプリンタポート特性を調整します。
# lpadmin -p printer-name -o "stty=options"
-p printer-name |
ポート特性を調整するプリンタ名 |
-o "stty=options" |
options で指定したポート特性 (stty オプション) を設定する。このコマンドで 1 つ以上の stty オプションを変更できる。オプションを区切るには空白を使用し、オプションを一重引用符で囲む。 オプションについては、stty(1) のマニュアルページを参照。LP 印刷サービスで使用されるデフォルトの stty 設定については、表 44-1 を参照 |
次のコマンドを使用して、プリンタポート特性が変更されたかどうかを確認します。
# stty -a
次の例で、コマンドはプリンタ 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 5.x システムに組み込まれているデフォルトエントリは、PS (PostScript 用) と PSR (Reverse PostScript 用) です。
プリンタの terminfo エントリが見つからなくても、ページサイズ、ピッチ、および文字セットを自動選択しないで、LP 印刷サービスでプリンタを使用できます。ただし、印刷要求ごとに正しいモードでプリンタが設定されないという問題が起きることがあります。
使用中のプリンタタイプの terminfo エントリがないが、プリンタを正しいモードに設定しておきたい場合は、プリンタで使用するインタフェースプログラムをカスタマイズするか、terminfo データベースにエントリを追加できます。terminfo データベース内の端末エントリやプリンタエントリには、多数の項目が入っており、定義されています。しかし、LP 印刷サービスはそのうち 50 未満の項目しか使用しません。表 44-2 は、プリンタに必要な terminfo 項目を示しています。
表 44-2 プリンタに必要な terminfo 項目
項目 |
|
意味 |
---|---|---|
ブール値 |
|
|
|
cpix |
文字ピッチを変更すると解像度が変わる |
|
daisy |
プリンタで文字セットを変更するには演算子が必要 |
|
lpix |
行ピッチを変更すると解像度が変わる |
数値 |
|
|
|
bufsx |
印刷前にバッファされるバイト数 |
|
cols |
1 行の列数 |
|
cps |
1 秒あたりの文字の平均印刷速度 |
|
it |
最初はスペース n 個分ごとのタブ |
|
lines |
1 ページの行数 |
|
orc |
1 文字あたりの水平解像度 |
|
orhi |
1 インチあたりの水平解像度 |
|
orl |
1 行あたりの垂直解像度 |
|
orvi |
1 インチあたりの垂直解像度 |
文字列 |
|
|
|
chr |
水平解像度を変更する |
|
cpi |
1 インチあたりの文字数を変更する |
|
cr |
キャリッジリターン |
|
csnm |
文字セット名のリスト |
|
cudl |
1 行下げる |
|
cud |
キャリッジを n 行下に移動する |
|
cuf |
キャリッジを n 列右に移動する |
|
cvr |
垂直解像度を変更する |
|
ff |
紙送りする |
|
hpa |
水平絶対位置 |
|
ht |
次の 8 スペースタブストップまでのタブ |
|
if |
初期化ファイル名 |
|
iprog |
初期化プログラムのパス名 |
|
is1 |
プリンタ初期化文字列 |
|
is2 |
プリンタ初期化文字列 |
|
is3 |
プリンタ初期化文字列 |
文字列 |
|
|
|
lpi |
1 インチあたりの行数を変更する |
|
mgc |
マージン (上、下、横) をすべてクリアする |
|
rep |
文字を n 回繰り返す |
|
rwidm |
倍幅の印刷を使用不可にする |
|
scs |
文字セットを選択する |
|
scsd |
文字セットの定義を開始する |
|
slines |
ページの長さを 1 ページあたり n 行に設定する |
|
smgl |
現在の列の左マージンを設定する |
|
smglp |
左マージンを設定する |
|
smgr |
現在の列の右マージンを設定する |
|
smgrp |
右マージンを設定する |
|
smglr |
左右のマージンを設定する |
|
msgt |
現在の行の上マージンを設定する |
|
smgtp |
上マージンを設定する |
|
smgb |
現在の行の下マージンを設定する |
|
smgbp |
下マージンを設定する |
|
smgtb |
上下のマージンを設定する |
|
swidm |
倍幅の印刷を使用可能にする |
|
vpa |
垂直絶対位置 |
プリンタの terminfo エントリを作成する前に、まず、そのプリンタをサポートする既存の terminfo エントリがないことを確認してください。そのためには、類似するプリンタがあれば、そのエントリを使用してプリンタを設定してください。
プリンタの terminfo エントリ名を決定します。
/usr/share/lib/terminfo ディレクトリ内のディレクトリには、有効な terminfo エントリがすべて入っています。それを参考にしてプリンタ名を選択してください。
プリンタの terminfo エントリファイルを作成します。
LP 印刷サービスに新しいプリンタを追加するために terminfo エントリ内で定義しなければならない項目については、表 44-2 を参照してください。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.x の LP 印刷サービスに使用できます。ただし、一部の -o オプションは SunOS 5.x の LP 印刷サービス内で標準化されていて、すべてのプリンタインタフェースプログラムに渡されます。これらのオプションは、古いインタフェースで使用される同じ名前のオプションの妨げとなることがあります。
プリンタポートを開く処理は、プリンタインタフェースプログラムではなく LP 印刷サービスが受け持ちます。プリンタポートは標準出力としてプリンタインタフェースプログラムに与えられ、プリンタはプリンタインタフェースプログラムの「制御端末」として識別されるので、ポートが「ハング」するとプリンタインタフェースプログラムに SIGHUP 信号が送信されます。
LP 印刷サービスは、標準 (モデル) プリンタインタフェースプログラム /usr/lib/lp/model/standard を使用して、表 44-3 の印刷デフォルトを設定します。
表 44-3 デフォルトのプリンタポート特性
特性 |
デフォルト設定 |
---|---|
デフォルトフィルタ |
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
印刷し終ると、インタフェースプログラムは印刷ジョブの状態を示すコードを返して終了します。終了コードは、プリンタインタフェースプログラムの最後のエントリです。
表 44-4 は、終了コードとそのコードが LP 印刷サービスでどのように解釈されるかを示しています。
表 44-4 プリンタインタフェースプログラムの終了コード
コード |
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 プログラムの例として、次のコメントの直後の標準プリンタインタフェースコードを確認してください。
# Here's where we set up the $LPTELL program to capture fault messages
特殊な終了コード 129 または lp.tell プログラムを使用すると、プリンタインタフェースプログラムはプリンタ自体を使用不可にする必要がありません。インタフェースプログラムは、プリンタを直接使用不可にできますが、その場合は障害警告メカニズムが無効になります。LP 印刷サービスがプリンタ障害を検出した場合にのみ警告が送信され、特殊終了コードと lp.tell プログラムはその主要検出ツールです。
LP 印刷サービスがいずれかの時点でファイルの印刷を中断しなければならない場合は、TERM 信号 (トラップ番号 15 と、kill(1) および signal(3B) のマニュアルページを参照) を使用してインタフェースプログラムを強制終了します。プリンタインタフェースプログラムが他の信号を受信しなくなると、LP 印刷サービスはその後の印刷要求は影響されないものとみなし、そのプリンタを使用し続けます。LP 印刷サービスは、要求を依頼したユーザーに、その要求が正常に終了しなかったことを通知します。
インタフェースが最初に呼び出されると、信号 HUP、INT、QUIT、PIPE (トラップ番号 1、2、3、13) は無視されます。標準インタフェースは、信号が適切な時期にトラップされるように、この動作を変更します。標準インタフェースはこれらの信号の受信をプリンタの問題を示す警告として解釈し、信号を受信すると障害警告を発します。
カスタマイズされたプリンタインタフェースプログラムを作成し、印刷サーバー上で標準プリンタインタフェースプログラムの代わりに使用できます。そのためには、lpadmin コマンドを使用して、プログラムを特定のプリンタの LP 印刷サービスに登録します。
印刷サーバーにスーパーユーザーまたは lp としてログインします。
独自のプリンタインタフェースプログラムがあるかどうかに基づいて次の手順を選択します。
独自のプリンタインタフェースプログラムの有無 |
次の手順 |
---|---|
独自のプリンタインタフェースプログラムがないので作成する必要がある | |
すでに独自のプリンタインタフェースプログラムがある |
# cp /var/spool/lp/model/standard custom-interface
標準プリンタインタフェースプログラムのコピーを必要に応じて変更します。
「標準プリンタインタフェースプログラム」のプログラムの説明を参照して、何を変更する必要があるかを判断してください。
特定のプリンタ独自のプリンタインタフェースプログラムを設定します。
# lpadmin -p printer-name -i custom-interface
-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
フィルタは、LP 印刷サービスがプリンタで解釈できないタイプのファイルを印刷する必要があるたびに使用されます。新しい印刷フィルタを作成するのは簡単ではありません。通常は広範囲の経験が必要です。新しい印刷フィルタを定義するには、次の 2 つの手順があります。
印刷フィルタプログラムを作成する
印刷フィルタ定義を作成する
印刷フィルタは、必要に応じて簡単なものでも複雑なものでもかまいません。フィルタには、入力形式、出力形式、そのフィルタ内でコマンド行引数を処理する言語を提供する複雑なオプションが入っています。
PostScript 以外のプリンタを使用する場合は、必要に応じて印刷フィルタを作成して追加する必要があります。まず、印刷フィルタの機能と、フィルタプログラムが満たさなければならない要件を理解しておく必要があります。
SunOS 5.x 印刷サービスには、/usr/lib/lp/postscript ディレクトリにフィルタプログラムが組み込まれています。これらのフィルタは、宛先プリンタが PostScript 形式のデータを必要とするほとんどの PostScript 印刷の状況に対応します。印刷フィルタプログラムは、2 進の実行可能プログラムでなければなりません。
印刷フィルタには、高速フィルタと低速フィルタの 2 種類があります。
高速フィルタは、ファイルの印刷準備にあまり処理時間がかかりません。また、実行するときにはプリンタにアクセスしなければなりません。印刷障害を検出する印刷フィルタは、高速フィルタでなければなりません。PRINTER キーワードをフィルタオプションとして使用するフィルタは、高速フィルタとしてインストールしなければなりません。
低速フィルタは、ファイルの印刷準備に大量の処理時間がかかります。また、低速フィルタは実行するときにプリンタにアクセスする必要がありません。低速フィルタはバックグラウンドで実行されるので、プリンタと連結する必要がなく、低速フィルタを必要としない他のファイルを印刷できます。
LP 印刷サービスは、印刷フィルタを使用して、ある内容形式から別の内容形式にファイルを変換します。プリンタごとに、受け付けられるファイル内容形式を指定できます。ユーザーは印刷要求を出すときにファイル内容形式を指定し、LP 印刷サービスはその内容形式のファイルを印刷できるプリンタを探します。多くのアプリケーションは各種プリンタに合わせてファイルを生成できるので、通常はこれで十分です。ただし、アプリケーションによっては、利用できるプリンタ上で印刷できないファイルを生成するものがあります。
LP 印刷サービスは、プリンタで直接受け付けられない形式のファイルの印刷要求を受信するたびに、印刷要求の内容形式を利用できる (または指定された) プリンタの内容形式と一致させようとします。一致すると、そのファイルはフィルタをかけなくてもプリンタに直接送信できます。一致する形式が見つからない場合や、内容形式でフィルタを使用するように指定されている場合は、LP 印刷サービスはファイルの内容形式を利用できるフィルタの入力内容形式と一致させ、フィルタの出力形式をプリンタの内容形式と一致させようとします。適切なフィルタが見つかると、印刷要求はフィルタを通して渡されます。
印刷フィルタは、特殊モードを処理し特殊ページの印刷を要求します。特殊印刷モードは、カスタマイズされたフィルタが必要な印刷要求の特性を印刷するために必要です。フィルタは、次の特性を処理します。
プリンタタイプ
文字ピッチ
行ピッチ
ページ長
ページ幅
印刷ページ数
文字セット
フォーム名
部数
LP 印刷サービスは、これらの特性にデフォルト設定を提供します。ただし、印刷フィルタの方が一部の特性を効率よく処理できます。たとえば、プリンタによっては、LP 印刷サービスより効率よく複数のコピーを処理できるものがあり、その場合は複数コピーのページ制御用フィルタを提供できます。
各プリンタは、独自の方法でプリンタ障害を検出し、障害信号を LP 印刷サービスに送信します。LP 印刷サービスは、印刷中にハングアップ (キャリア喪失) と過剰な遅延の有無をチェックするだけです。
プリンタによっては、優れた障害処理能力を持ち、障害の原因を記述するメッセージを送信できるものがあります。また、キャリア信号の喪失やデータフローのシャットオフを示すものとは異なる信号を使用して障害を示すプリンタもあります。これらの付加的なプリンタ障害情報を解釈するには、フィルタが必要です。
また、フィルタは印刷要求を保留し、プリンタ障害がクリアされるまで待ってから印刷を再開します。この機能を使用すると、中断された印刷要求全体を印刷し直す必要がありません。プリンタに使用される制御シーケンスを認識するフィルタだけが、ファイルの改ページ位置を判別できます。したがって、その種のフィルタ以外は、障害がクリアされた後で印刷を再開する必要があるファイル内の位置を検出できません。
印刷フィルタがメッセージを生成すると、そのメッセージは LP 印刷サービスによって処理され、警告が使用可能になっている場合は、システム管理者に警告が送信されます。「障害の通知の設定」 を参照してください。
印刷フィルタは単純なものでも複雑なものでもかまいませんが、次の要件を満たさなければなりません。
フィルタは、標準入力からファイルの内容を取得して、変換後のファイルを標準出力に送信しなければなりません。
外部ファイルを参照するプログラムはフィルタとして使用できません。一般にユーザーは troff、nroff などのワープロプログラムをフィルタとして使用しがちです。LP 印刷サービスは、フィルタプログラムから「組み込みファイル」と呼ばれる他のファイルへの参照を認識しません。troff と nroff はファイルを組み込めるので、フィルタとして使用すると失敗することがあります。プログラムが処理を完了するために他のファイルを必要とする場合は、フィルタとして使用しないでください。
フィルタは、一般にユーザーがアクセスできないファイルに依存しないでください。ユーザーが直接実行するときにフィルタが失敗すると、LP 印刷サービスで実行しても失敗します。
低速フィルタは、ファイル内のエラーに関するメッセージを標準エラーに送信しますが、高速フィルタは送信しません。低速フィルタからのエラーメッセージは収集され、印刷要求を出したユーザーに送信されます。
低速フィルタが信号を受信したために終了すると、印刷要求が停止され、その要求を出したユーザーに通知されます。同様に、低速フィルタが 0 以外の終了コードを返して終了すると、印刷要求が停止され、ユーザーに通知されます。高速フィルタからの終了コードは、異なる方法で処理されます。
フィルタにプリンタ障害を検出させたい場合は、次の要件も満たしてください。
フィルタは終了する前にできるだけ障害がクリアされるまで待つ必要があります。また、障害がクリアされたら、印刷を停止したページの先頭から印刷を再開してください。継続機能を使用したくない場合は、LP 印刷サービスは管理者に警告する前にフィルタを停止します。
フィルタは、障害が認識されたらすぐにプリンタ障害メッセージを標準エラーに送信する必要があります。終了する必要はなく、障害がクリアされるまで待つことができます。
フィルタは、ファイル内のエラーに関するメッセージを標準エラーに送信してはいけません。これらのメッセージは、ユーザーが読み込める標準出力に含める必要があります。
フィルタは、ファイルの印刷が終了すると (ファイル内のエラーによって正常に印刷できなかった場合も) 終了コード 0 を返して終了する必要があります。
フィルタは、プリンタ障害によって印刷要求を終了できなかった場合にのみ、0 以外の終了コードを返して終了する必要があります。
フィルタをフィルタテーブルに追加する場合は、高速フィルタとして追加しなければなりません。
印刷フィルタ定義は、フィルタ、実行する印刷フィルタプログラム、実行する変換の種類などを LP 印刷サービスに指示します。/etc/lp/fd ディレクトリには、一連のフィルタ記述子ファイルが組み込まれています。これらのファイルは、フィルタの特性 (高速または低速フィルタなど) を記述し、フィルタプログラム (/usr/lib/lp/postscript/postdaisy など) を指します。
新しい印刷フィルタを定義するときには、フィルタプログラムを作成するだけでなく、印刷フィルタ定義を作成しなければなりません。印刷フィルタ定義には、LP 印刷サービスが使用する次の情報が入っています。
実行するフィルタプログラム名
受け付ける入力タイプ
生成する出力タイプ
ジョブを送信できるプリンタタイプ
ジョブを送信できる特定のプリンタ名
フィルタタイプ (高速または低速)
オプション
lpfilter コマンドへの直接入力として特性を入力できます。また、フィルタの特性を指定するファイルを作成し、ファイル名を lpfilter コマンドへの入力として使用することもできます。この種のファイルは「フィルタ記述子ファイル」と呼ばれ、/etc/lp/fd ディレクトリに配置してください。これらのファイルはフィルタそのものではなく、フィルタを指すものです。
情報をファイルに格納するかコマンド行に直接入力するかに関係なく、次の形式を使用してください。
Command: command-pathname [options] Input types: input-type-list Output types: output-type-list Printer types: printer-type-list Printers: printer-list Filter type: fast または slow Options: template-list
Options 以外のフィルタ特性に複数の定義 (つまり複数行) を与えると、2 番目の定義のみが印刷サービスに使用されます。
情報はどんな順序で配置してもかまいません。また、すべての情報が必要とは限りません。値を指定しなければ、表 44-5 の値がデフォルトで割り当てられます。デフォルト値はあまり便利ではないので、明示的な値を指定するようにしてください。
表 44-5 lpfilter 引数のデフォルト値
項目 |
デフォルト |
---|---|
入力タイプ |
任意 |
出力タイプ |
任意 |
プリンタタイプ |
任意 |
プリンタ |
任意 |
フィルタタイプ |
低速 |
フィルタプログラムのフルパスを使用してください。プログラムが必ず必要とする固定オプションがある場合は、それらをこのコマンドに含めます。
印刷フィルタが処理できるファイル内容形式のリストです。LP 印刷サービスには入力タイプ数の制限はありませんが、ほとんどのフィルタは 1 つのタイプしか受け付けません。いくつかのファイルタイプは、フィルタで処理できる程度に類似しています。14 文字以内の英数字とダッシュを使用した名前を指定できます。入力タイプ名の一部として下線 (_) は使用できません。
LP 印刷サービスは、一貫した命名規則に合致するように、これらの名前を使用してフィルタをファイルタイプと一致させます。たとえば、複数のフィルタが同じ入力タイプを受け付ける場合は、各フィルタ用に指定するときに、その入力タイプに同じ名前を使用します。ユーザーには、ファイルの印刷を依頼するときにファイルタイプの識別方法がわかるように、これらの名前を通知してください。
出力タイプは、フィルタが出力として生成できるファイルタイプのリストです。入力タイプごとに、フィルタは 1 つずつ出力タイプを生成します。ただし、出力タイプはジョブごとに異なることがあります。出力タイプ名は、14 文字以内の英数字とダッシュ (-) です。
出力タイプ名は、利用できる (ローカルまたはリモート) プリンタのタイプと一致するか、他のフィルタで処理される入力タイプと一致しなければなりません。LP 印刷サービスは、ファイルを変換するために異なるフィルタを複数回かける必要があることがわかると、フィルタをシェルパイプラインにグループ化します。このように複雑な処理はほとんど必要ありませんが、LP 印刷サービスではこの処理を実行できます。ユーザーが印刷したいあらゆるファイルを入力タイプにするフィルタの集合を探して、各ファイルをプリンタで処理できるファイルタイプに直接変換してください。
プリンタタイプは、印刷フィルタがファイルを変換できるプリンタタイプのリストです。ほとんどのプリンタとフィルタの場合、これは出力タイプのリストと同じなので、フィルタ定義のこの部分はブランクにしておいてかまいません。しかし、別のタイプを使用することもできます。たとえば、初期化には 1 つのプリンタタイプを使用するプリンタでも、複数のファイル内容形式を認識できるものがあります。実際には、このプリンタには、各種ファイルタイプを、処理できるファイルタイプに変換する内部フィルタが付いています。したがって、1 つのフィルタは、プリンタで処理できるファイルタイプに合った複数の出力タイプのいずれかを生成できます。印刷フィルタには、そのプリンタタイプで機能することを示すマークを付ける必要があります。
もう 1 つの例として、同じファイルタイプを受け付けるものとして表示される 2 つのモデルのプリンタを使用できます。ただし、内部に若干違いがあるので、一方のプリンタが生成する結果と異なります。それらのプリンタには、A と B など、異なるプリンタタイプであることを示すラベルを付けます。この場合、B はズレがある方のプリンタです。タイプ B のプリンタで生成されるズレを考慮してファイルを調整するフィルタを作成します。このフィルタはこの種のプリンタタイプにのみ必要なので、タイプ B プリンタでのみ機能するものとして指定します。
一般に、印刷フィルタはその出力を受け付けるどのプリンタでも機能するはずなので、通常はフィルタ定義のこの部分をスキップできます。
ただし、プリンタによっては、フィルタが生成する出力に適したものと適さないものがあります。たとえば、1 台のプリンタを高速出力専用にして、フィルタを通す必要がないファイルのみをそのプリンタに送信できます。同じタイプの他のプリンタは、印刷前に広範囲にフィルタを通す必要があるファイルに使用できます。
LP 印刷サービスは、「フィルタのタイプ」で説明しているように、高速フィルタと低速フィルタを認識します。
印刷モードで (lp コマンドの -y オプションを使用して) 呼び出される低速フィルタは、印刷要求が出されたシステム上で実行しなければなりません。LP 印刷サービスはモード値を印刷サーバーに渡せません。ただし、ファイル内容形式 (lp コマンドの -T オプションの後で指定) を印刷サーバー上の内容形式と一致させることはできます。したがって、印刷サーバー上で特殊モードを有効にしたい場合は、LP 印刷サービスが入力タイプと出力タイプを一致することができる内容形式を指定しなければなりません。
オプションは、各種の情報をフィルタコマンドのコマンド行引数にどのように変換するかを指定します。この情報には、ユーザーからの (印刷要求を伴う) 指定、プリンタ定義、要求の処理に使用されるフィルタによって実装される仕様などを含めることができます。
印刷フィルタオプションの定義には 13 個の情報源があり、それぞれが「キーワード」で表されています。各オプションは「テンプレート」内で定義されます。テンプレートとは、フィルタのいずれかの特性値に基づいてフィルタコマンドに渡されるオプションを定義する、フィルタ定義内のステートメントです。
フィルタ定義で指定するオプションには、13 個のキーワードを使用しなくても、すべて使用しても、そのサブセットを使用してもかまいません。また、完全なフィルタ定義に複数の定義が必要な場合は、1 つのキーワードを複数回指定することもできます。印刷フィルタ定義における Options を定義するための 13 個のキーワードについては、表 44-6 を参照してください。
表 44-6 印刷フィルタオプションのキーワード
キーワード |
考えられるパターン |
例 |
|
---|---|---|---|
内容形式 (入力) |
INPUT |
内容形式 |
troff |
内容形式 (出力) |
OUTPUT |
内容形式 |
postscript、impress |
プリンタタイプ |
TERM |
プリンタタイプ |
att495 |
プリンタ名 |
PRINTER |
プリンタ名 |
lp1 |
文字ピッチ |
CPI |
四捨五入された 10 進数 |
10 |
行ピッチ |
LPI |
四捨五入された 10 進数 |
6 |
ページ長 |
LENGTH |
四捨五入された 10 進数 |
66 |
ページ幅 |
WIDTH |
四捨五入された 10 進数 |
80 |
印刷ページ数 |
PAGES |
ページリスト |
1-5,13-20 |
文字セット |
CHARSET |
文字セット |
finnish |
フォーム名 |
FORM |
フォーム名 |
invoice2 |
部数 |
COPIES |
整数 |
3 |
MODES |
モード |
landscape |
印刷フィルタ定義には、複数のテンプレートを含めることができます。複数のテンプレートを指定する場合は、1 行にコンマで区切って入力するか、先頭に Options: を付けて複数行に入力します。
テンプレートの形式は次のとおりです。
keywordpattern = replacement
keyword は、フィルタの特定の特性に関して登録されたオプションのタイプを識別します。
pattern は、キーワードの特定のオプションです。
replacement は、キーワードが指定した値のときに発生する動作です。
特定のフィルタのオプションを定義する方法を示す例として、印刷サービススケジューラを使って次の条件でフィルタに印刷要求を割り当てたいものと仮定します。
フィルタで生成される OUTPUT のタイプが impress の場合は、フィルタに -I オプションを渡す。
フィルタで生成される OUTPUT のタイプが postscript の場合は、フィルタに -P オプションを渡す。
上記の条件を指定するには、lpfilter コマンドのオプションとして次のテンプレートを与えます。
Options: OUTPUT impress=-I, OUTPUT postscript=-P
Options 行が長くなりすぎる場合は、次のように各テンプレートを別々の行に入れます。
Options: OUTPUT impress=-I Options: OUTPUT postscript=-P
どちらのテンプレートでも、keyword は OUTPUT として定義されています。第 1 のテンプレートでは、パターンは impress で、「replacement」の値は -I です。第 2 のテンプレートでは、「pattern」の値は postscript で、「replacement」の値は -P です。
各種テンプレート (つまり、各キーワードの pattern 引数と replacement 引数) に与える値を見つけるには、次のことに注意する必要があります。
INPUT テンプレートの値は、フィルタによる変換が必要なファイル内容形式からとっています。
OUTPUT テンプレートの値は、フィルタが生成すべき出力タイプからとっています。
TERM テンプレートの値はプリンタタイプです。
PRINTER テンプレートの値は、最終出力を印刷するプリンタ名です。
CPI、LPI、LENGTH、WIDTH の各テンプレートの値は、ユーザーの印刷要求、使用するフォーム、またはプリンタのデフォルト値からとっています。
PAGES テンプレートの値は、印刷すべきページのリストです。通常、これはコンマで区切ったページ範囲のリストです。各ページ範囲は、ダッシュで区切った 1 対の数値、または単一の数字からなります (たとえば、1-5,6,8,10 は 1 ページから 5 ページまでと、6 ページ、8 ページ、10 ページを示します)。ただし、印刷要求に -P オプションで値を与えると、印刷要求は変更されずに渡されます。
CHARSET テンプレートの値は、使用する文字セット名です。
FORM テンプレートの値は、lp コマンド (印刷要求を出すのに使用するコマンド) の -f オプションで要求したフォーム名です。
COPIES テンプレートの値は、ファイルの印刷部数です。フィルタがこのテンプレートを使用する場合、この「1 部」にはフィルタによって生成される複数のコピーが含まれるので、LP 印刷サービスはフィルタがかけられたファイルの印刷部数から 1 を引きます。
MODES テンプレートの値は、lp コマンドの -y オプションからとっています。ユーザーは複数の -y オプションを指定できるので、MODES テンプレートは複数の値をとることがあります。値はユーザーが与えた順に左から右に適用されます。
テンプレートの replacement 部は、テンプレートの値をフィルタプログラムに与える方法を示します。通常はリテラルオプションですが、値の位置を示すプレースホルダのアスタリスク (*) が付いていることがあります。pattern と replacement には、ユーザー入力オプションからフィルタオプションへの複雑な変換を行うために、ed(1) の正規表現の構文を使用することもできます。ed(1) の正規表現の構文はすべて使用できます。たとえば、¥( ... ¥) や ¥n 構成を使用すると、pattern の各部を抽出して replacement にコピーできます。また、& を使用すると、pattern 全体を replacement にコピーできます。
pattern または replacement にコンマまたは等号 (=) を含める場合は、その前にバックスラッシュ (¥) を付けてください。これらの文字の前にバックスラッシュが付いていると、pattern または replacement が使用されるときに削除されます。
印刷サーバーにスーパーユーザーまたは lp としてログインします。
印刷フィルタプログラムを作成します。
印刷フィルタプログラムの概要については、「印刷フィルタプログラムの作成」/usr/lib/lp/postscript ディレクトリに入っています。作成したプログラムは、選択したディレクトリ内の /usr/lib/lp の下に入れる必要があります。
印刷フィルタ定義を作成します。
印刷フィルタ定義の概要については、「印刷フィルタ定義の作成」を参照してください。印刷フィルタ定義はテキストファイルに保存する必要があります。使用しやすいように、通常、フィルタ定義は /etc/lp/fd ディレクトリに入っており、接尾辞 .fd で識別されます。
印刷フィルタを印刷サーバーに追加します。
詳細は、「印刷フィルタを追加する方法」を参照してください。
次の例は、N37 または Nlp を simple に変換する印刷フィルタ定義を示します。
Input types: N37, Nlp, simple Output types: simple Command: /usr/bin/col Options: MODES expand = -x Options: INPUT simple = -p -f
次の例で、印刷フィルタプログラム名は col です。新しい印刷フィルタを印刷サーバーに追加すると、ユーザーの印刷要求は次のように処理されます。
ユーザーが次のコマンドを入力した場合
$ lp -y expand report.doc
印刷プログラムは次の引数を使用して実行され、ファイルが変換されます。
/usr/bin/col -x -p -f
ユーザーが次のコマンドを入力した場合
$ lp -T N37 -y expand report.doc
印刷プログラムは次の引数を使用して実行され、ファイルが変換されます。
/usr/bin/col -x
次の例は、troff から PostScript に変換する印刷フィルタ定義を示します。
Input types: troff Output types: postscript Printer types: PS Filter type: slow Command: /usr/lib/lp/postscript/dpost Options: LENGTH * = -l* Options: MODES port = -pp, MODES land = -pl Options: MODES group ¥=¥([1-9]¥) = -n¥l
次の例で、フィルタプログラム名は dpost です。このプログラムは入力タイプ troff をとり、postscript 出力を生成し、タイプ PS (PostScript) のプリンタに機能します。ユーザーは、用紙方向を縦モードにするか横モードにするかを尋ねるプロンプトが表示されたときに、それぞれの省略形 port または land を指定するだけですみます。これらのオプションは LP 印刷サービスに固有ではないので、ユーザーは lp コマンドの -y オプションを使用して指定しなければなりません。
新しい印刷フィルタを印刷サーバーに追加すると、印刷要求は次のように処理されます。
ユーザーが次のコマンドを入力し、横方向、ページ長 60 行で、troff ファイルタイプを PostScript プリンタ (タイプ PS) で印刷するように要求した場合
$ lp -T troff -o length=60 -y land -d luna ch1.doc
印刷フィルタプログラム dpost は、次の引数を使用して実行され、ファイルが変換されます。
/usr/lib/lp/postscript/dpost -l60 -pl luna ch1.doc
ユーザーが次のコマンドを入力した場合
$ lp -T troff -y group=4 -d luna ch1.doc
次の引数が指定された印刷フィルタプログラム dpost コマンドは、ファイルを変換します。
/usr/lib/lp/postscript/dpost -n4
新しいフォームを提供したい場合は、lpforms コマンドへの入力として 9 個の必須特性 (ページ長とページ幅など) に関する情報を入力し、その特性を定義しなければなりません。LP 印刷サービスは、この情報を次の 2 つの目的に使用します。
フォーム上に正しく印刷されるようにプリンタを初期化する。
フォームの処理方法に関する留意事項をシステム管理者に送信する。
フォーム名は、14 文字以内の英数字と下線であれば、任意に選択して使用できます。情報は次の形式でなければなりません。
Page length: scaled number Page width: scaled number Number of pages: integer Line pitch: scaled number Character pitch: scaled number Character set choice: character-set-name [,mandatory] Ribbon color: ribbon-color Comment: informal notes about the form Alignment pattern: [content-type] alignment pattern
省略可能な句、[,mandatory] は、ユーザーがフォームの文字セット選択を無効にできないことを意味します。content-type は位置揃えパターンを使用して指定できますが省略可能です。この属性を指定すると、印刷サービスは必要に応じて使用し、ファイルにフィルタをかけて印刷する方法を決定します。
2 つの例外がありますが、情報は任意の順序で指定できます。例外は、Alignment pattern (位置揃えパターン) (必ず最後に配置しなければなりません) と comment (コメント) (必ず Comment: プロンプトの行に続かなければなりません) です。コメントにキー句 (Page length、Page width など) で始まる行が含まれている場合は、キー句が行頭にならないように、その行を > 文字で始めます。先頭の > 文字は、コメントから除去されて表示されません。
すべての情報を与えなければならないわけではありません。表 44-7 の項目の値を指定しないときは、デフォルト値が割り当てられます。lpforms コマンドを実行する前に、新しいフォームに関して次の情報を収集してください。
表 44-7 フォームのデフォルト値
項目 |
デフォルト |
説明 |
---|---|---|
ページ長 |
66 行 |
フォームの長さ、または複数ページのフォームの場合は各ページの長さ。この情報は、行数でもインチ単位やセンチメートル単位でもかまわない |
ページ幅 |
80 列 |
文字数、インチ数、またはセンチメートル数によるフォームの幅 |
ページ数 |
1 |
複数ページのフォームのページ数。LP 印刷サービスは、この数値と印刷フィルタ (利用できる場合) を使用して、位置揃えパターンを 1 つのフォームの長さに制限する。「位置揃えパターン」の説明を参照 |
行ピッチ |
1 インチあたり 6 行 |
フォーム上の行間隔。これは「リーディング」とも呼ばれる。2 行間の間隔、つまりベースラインからベースラインまでの間隔を 1 インチまたは 1 センチあたりの行数で表す |
文字ピッチ |
1 インチあたり 10 文字 |
フォームに表示される文字間隔。文字の間隔を 1 インチまたは 1 センチあたりの文字数で表す |
文字セット選択肢 |
任意 |
このフォームに使用しなければならない文字セット、印字ホイール、またはフォントカートリッジ。ユーザーは、このフォームを使用するときに独自の印刷要求に別の文字セットを選択できる。また、単一の文字セットのみを使用するように指示できる |
リボンの色 |
任意 |
フォームを常に特定のカラーリボンで印刷しなければならない場合、LP 印刷サービスはどの色を使用すべきかを示す装着警告メッセージを表示できる |
コメント |
(デフォルトなし) |
ユーザーがフォームを理解する上で参考になる任意の情報。たとえば、フォーム名、そのバージョン、用途、または使用上の制限を示すことができる |
(デフォルトなし) |
LP 印刷サービスが 1 枚のブランクフォームを埋めるために使用するサンプルファイル。フォームを装着するときに、このパターンを印刷して正しく位置揃えすることができる。また、印刷サービスに印刷方法が認識されるように、このパターンの内容形式を定義することもできる |
LP 印刷サービスは、位置揃えパターン内の重要な情報にマスクをかけようとしません。小切手を位置揃えするときなど、サンプルフォームに重要な情報を印刷したくない場合は、該当するデータにマスクをかける必要があります。LP 印刷サービスは、スーパーユーザーまたは lp としてログインしたユーザー以外は読み取れないように、位置揃えパターンを安全な場所に格納します。
フォーム情報を収集し終わったら、フォームを lpforms コマンドに入力します。lpforms コマンドに入力する前にこの情報を編集できるように、まず、この情報を別のファイルに記録してください。そうすれば、プロンプトの後で個々の情報を入力しなくても、そのファイルを入力として使用できます。
印刷サーバー上でスーパーユーザーまたは lp としてログインします。
フォーム定義ファイルを作成します。
印刷フォームの作成方法の概要については、「新しいプリンタフォームの作成」を参照してください。プリンタ定義はテキストファイルに保存してください。
lpadmin コマンドを使用して、フォームを LP 印刷サービスに追加します。
# lpadmin -p printer-name -M -f form-name
フォームを印刷サーバーに追加します。
手順については、「フォームを追加する方法」を参照してください。