10.5. プリンタを使う

この節では、FreeBSD で設定したプリンタを使う方法について説明します。 ここでは、ユーザレベルでのコマンドを概説します。

lpr(1)

印字をおこないます。

lpq(1)

プリンタキューを調べます。

lprm(1)

プリンタキューにあるジョブを削除します。

また、「プリンタの管理」 節で説明されている管理者用コマンド lpc(8) もあり、 プリンタやそのキューの制御のために用いられています。

lpr(1)lprm(1)、そして lpq(1) の 3 コマンドは、-Pprinter-name オプションをとり、これによって、 /etc/printcap のように操作の対象となる プリンタやキューを指定します。 これによって、様々なプリンタに対してジョブを送る、 取り消す、調査することができます。 -P が使われなかった場合は、これらのコマンドは PRINTER 環境変数で指定されたプリンタを使用します。 そして、PRINTER 環境変数がなかった場合は、 これらのコマンドはデフォルトのプリンタ lp を使います。

以下では、デフォルトプリンタ という用語が意味するプリンタは、PRINTER 環境変数で指定されたプリンタ、もしくは、PRINTER 環境変数がない場合は、lp という名前のプリンタです。

10.5.1. 印字する

ファイルを印字するためには、 次のように入力してください。

% lpr filename ...

これにより、 入力されたファイルのそれぞれをデフォルトのプリンタ から印字します。ファイル名が与えられなかった場合、 lpr(1) は標準入力から印字するデータを読み込みます。たとえば、 次のコマンドにより、ある重要なシステムファイルが印字されます。

% lpr /etc/host.conf /etc/hosts.equiv

印字させるプリンタを選択するためには、 次のように入力します。

% lpr -P printer-name filename ...

次の例では、プリンタ rattan に、 カレントディレクトリにあるファイルの詳細なリストを印字しています。

% ls -l | lpr -P rattan

上記の lpr(1) コマンドではファイル名の指定がないので、 lpr は標準入力から印字するデータ、 この場合、ls -l コマンドの出力、を読み込みます。

lpr(1) コマンドでは、 出力の整形を制御したり、ファイル変換を適用したり、 複数部数のコピーを作成したり、 などといた様々な幅広いオプションを受け付けることもできます。 詳細については、 「 その他の印字オプション」をご覧ください。

10.5.2. ジョブの処理状況を調べる

lpr(1) コマンドを使って印字をする場合、プリントしようと するデータは プリントジョブ と呼ばれる箱に一緒に置かれ、 これが LPD スプーリングシステムに送られます。 プリンタにはそれぞれジョブ用のキューがあり、 送られてきたジョブはあなたや他のユーザからの別のジョブと一緒にそのキューで並んで、 処理される順番を待ちます。 プリンタは到着順にこれらのジョブの印字をおこないます。

デフォルトプリンタのキューの状態を表示するには、 lpq(1) と入力します。プリンタを指定するときは、 -P オプションを使います。たとえば、次のコマンド

% lpq -P bamboo

は、プリンタ bamboo のキューの状態を表示します。この lpq コマンドの出力結果の例を次に示します。

bamboo is ready and printing
Rank   Owner    Job  Files                              Total Size
active kelly    9    /etc/host.conf, /etc/hosts.equiv   88 bytes
2nd    kelly    10   (standard input)                   1635 bytes
3rd    mary     11   ...                                78519 bytes

この例では、bamboo のキューに 3 つのジョブがあることが分かります。 最初のジョブはユーザ kelly からのものであり、 ジョブ番号 9 が割り当てられています。 プリンタのすべてのジョブには一意なジョブ番号が付けられています。 ほとんどの場合、このジョブ番号は無視することができますが、 ジョブをキャンセルするときにはこの番号が必要になります。 このことの詳細については、「ジョブの削除 」をご覧ください。

ジョブ番号 9 のジョブは 2 つのファイルを処理します。すなわち、 lpr(1) のコマンドラインに複数のファイル名が与えられたときは、 1つのジョブとして扱われるのです。このジョブは、現在、 アクティブジョブ (Rank の欄の active という後に注目) になっています。 これは、プリンタからそのジョブが現在印字されているはずであることを意味しています。 2 番目のジョブでは、 lpr(1) コマンドに標準入力からデータが与えられています。 3番目のジョブはユーザ mary から与えられました。 このジョブのサイズはとても大きくなっています。 彼女がプリントしようとしたファイルのパス名はここで表示させるには長すぎるため、 lpq(1) コマンドはドットを 3 つだけ表示しています。

lpq(1) からの出力で一番最初の行もまた有益な情報を与えています。 この行から、プリンタが現在何をしているか (あるいは、少なくとも LPD がプリンタがしていると思っていること) が分かります。

lpq(1) コマンドは -l オプションもサポートしています。 これにより、 詳しい情報が表示されます。 lpq -l の実行例を次に示します。

waiting for bamboo to become ready (offline ?)
kelly: 1st                               [job 009rose]
       /etc/host.conf                    73 bytes
       /etc/hosts.equiv                  15 bytes

kelly: 2nd                               [job 010rose]
       (standard input)                  1635 bytes

mary: 3rd                                [job 011rose]
      /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes

10.5.3. ジョブの削除

印字するようジョブを 送った後で印字を中断したくなったときは、 lprm(1) コマンドで、 キューの中からそのジョブを削除することができます。 大抵の場合、アクティブジョブでさえも lprm(1) を使って削除することができますが、 そのジョブの一部またはすべてが印字されてしまうかもしれません。

デフォルトプリンタへのジョブを削除するためには、最初に、 lpq(1) を使ってそのジョブ番号を調べます。 すなわち、それから、 次のように入力して、ジョブを削除します。

% lprm job-number

特定のプリンタへのジョブを削除するときは、 -P オプションを使ってそのプリンタを指定します。 たとえば、プリンタ bamboo のキューからジョブ番号 10 のジョブを削除するには次のようにします。

% lprm -P bamboo 10

lprm(1) コマンドには略記法がいくつかあります。

lprm -

あなたが (デフォルトプリンタへ) 送ったジョブをすべて削除します。

lprm user

ユーザ user が (デフォルトプリンタへ) 送ったジョブをすべて削除します。 他のユーザのジョブを削除できるのはスーパユーザだけです。 あなたは、あなた自身のジョブしか削除することはできません。

lprm

ジョブ番号もユーザ名もシンボル -も指定されないときは、 lprm(1) は現在のアクティブジョブを、 そのジョブを送ったのがあなた自身であるときに限り、 デフォルトプリンタから削除します。ただし、 スーパユーザは任意のアクティブジョブを削除することができます。

上記の略記法をデフォルトプリンタではなく 特定のプリンタに対しておこなうときは、-P オプションでそのプリンタを指定するだけよいのです。たとえば、 プリンタ rattan のキューへあなたが送ったジョブを すべて削除するためには次のようにします。

% lprm -P rattan -

注記:

ネットワーク環境で作業をしている場合、 あるホストから送られたプリンタジョブは、これを送ったホストで lprm(1) を使った場合に限って、 これを削除することができます。 他のホストで同じプリンタを使えたとしても、 このジョブを削除することはできません。 次の例では、他ホストからジョブを削除することを試みています。

% lpr -P rattan myfile
% rlogin orchid
% lpq -P rattan
Rank   Owner      Job  Files                          Total Size
active seeyan     12    ...                           49123 bytes
2nd    kelly      13   myfile                         12 bytes
% lprm -P rattan 13
rose: Permission denied
% logout
% lprm -P rattan 13
dfA013rose dequeued
cfA013rose dequeued
	

10.5.4. その他の印字オプション

lpr(1) コマンドには、テキストの整形や、 図や他のファイル形式の変換、複数部コピーの生成、 ジョブの扱いなどを制御することができます。 この節では、これに関するオプションについて記しています。

10.5.4.1. 整形と変換に関するオプション

以下の lpr(1) 用のオプションはジョブにおける ファイルの整形の制御に関するものです。 このオプションは、ジョブにプレインテキストが含まれない場合や pr(1) ユーティリティを使ってプレインテキストを整形する場合に用いてください。

次の例では、プリンタ bamboo に (TeX 組版システムによる) DVI ファイル fish-report.dvi を印字しています。

% lpr -P bamboo -d fish-report.dvi

このオプションは、 ジョブに含まれるすべてのファイルに対して適用されます。 したがって、1 つのジョブに (たとえば) DVI ファイルと ditroff ファイルを混在させることはできません。その代わりに、 ファイルを形式毎に別々のジョブに分け、 それぞれのジョブでその形式用の変換オプションを使って印字してください。

注記:

-p-T を除くすべてのオプションを使用 するためには、 出力先プリンタ用の変換フィルタが必要です。たとえば、 -d オプションを使用するには、DVI 用の変換フィルタが必要 です。詳細については、「 変換フィルタ」で説明しています。

-c

cifplot ファイルを印字します。

-d

DVI ファイルを印字します。

-f

FORTRAN プログラムを印字します。

-g

plot のデータを印字します。

-i number

出力に対して、number カラム分の字下げをおこないます。 number が省略されると、 8 カラム分字下げされます。 このオプションはある変換フィルタと一緒の指定されたときのみに機能します。

注記:

-i と数字の間に空白を入れてはいけません。

-l

制御文字を含む文字通りのテキストデータを印字します。

-n

ditroff (device independent troff) データを印字します。

-p

印字する前に pr(1) によってプレインテキストを整形します。 詳細については pr(1) をご覧ください。

-T title

pr(1) コマンドにより生成されるヘッダを、 ファイル名の代わりに title とする。 このオプションは、-p と一緒に使ったときのみ機能する。

-t

troff データを印字します。

-v

ラスタのデータを印字します。

次の例では、ls(1) のマニュアルを美しく整形したものをデフォルトプリンタで印字しています。

% zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t

zcat(1) コマンドで ls(1) のマニュアルのソースファイルの圧縮を復元し、これを troff(1) コマンドに渡しています。 これによりソースファイルが整形され GNU troff の形式となります。 その結果は lpr(1) に渡され、 LPD スプーラへジョブの要求が発せられます。 lpr(1) には -t オプションが使われているため、 スプーラでジョブを印字したときに GNU troff の形式から、デフォルトプリンタが解釈できる形式へと変換されます。

10.5.4.2. ジョブに関するオプション

以下のオプションは、lpr(1) によって、 そのジョブを特殊な扱いにするよう LPD に指示するためのものです。

-# copies

ジョブに含まれるファイルのそれぞれを 1 部だけ印字するのではなく、 copies 部のコピーを生成させるものです。管理者によっては、 プリンタの消耗を避け、コピー機による複製を奨励するために このオプションの使用が禁止されているかもしれません。 これに関しては、「 複数部のコピーの印字を制限する 」をご覧ください。

次の例では、デフォルトプリンタで parser.c を 3 部コピーし、次に、 parser.h を 3 部コピーしています。

% lpr -#3 parser.c parser.h
-m

印字ジョブが完了した後で、メールを送ります。 このオプションを付けると、LPD システムはジョブの処理が終了したときに、 あなたのアカウントにメールを送ります。 メールのメッセージには、ジョブが正常終了したのか、あるいは、 何か異常があり、(しばしば) その異常が何であったのかが書かれています。

-s

印字ファイルをスプールディレクトリにコピーせず、 代わりに、 シンボリックリンクを作成するよう指示します。

印字させるジョブのサイズが大きいとき、 このオプションを使うと便利かもしれません。このオプションにより、 スプー ルディレクトリの容量が節約されます (それに、 巨大なジョブのお陰でスプールディレクトリのあるファイルシステムの空き容量がなくなってしまうかもしれません)。 さらに、LPD がいちいちすべてのデータをコピーする必要がなくなりますので、 時間の節約にもなります。

ただし、欠点もあります。LPD はオリジナルのファイルを直接参照するので、 印字が終了するまでそのファイルを変更したり削除することができません。

注記:

リモートのプリンタで印字している場合、 LPD は、結局のところ、 ローカルホストからリモートホストにファイルをコピーする必要があります。 したがって、-s オプションはローカルのスプーリングディレクトリの空き容量を節約するだけで、 リモート側では節約されません。 それでも、このオプションは有用です。

-r

ジョブに含まれるファイルを、 スプーリングディレクトリに ファイルをコピーした後に削除します。もしくは、 -s オプションと一緒に使われた場合は、 印字終了後に削除されます。 このオプションの使用には十分注意して下さい。

10.5.4.3. ヘッダページ用オプション

以下のオプションにより、 ジョブのヘッダページに通常印字さ れるテキストを lpr(1) に調整させることができます。 対象のプリンタからヘッダページが出力されない場合は、 これらのオプションは何の効力も持ちません。 ヘッダページの設定に関する情報については、 「 ヘッダページ」を参照してください。

-C text

ヘッダページに印字されるホスト名を text に置き換えます。なお、 ホスト名の場所には、通常、 ジョブの要求があったホストの名前が印字されます。

-J text

ヘッダページに印字されるジョブ名を text に置き換えます。 ジョブ名の場所には、通常、ジョブの最初のファイル名、 または、標準入力からデータが印字されたときは stdin が印字されます。

-h

ヘッダページの出力を禁止します。

注記:

サイトによっては、 そのヘッダページの生成方法により、 このオプションの効果が現れないかもしれません。 詳細は、「 ヘッダページ」をご覧ください。

10.5.5. プリンタの管理

プリンタの管理者として、プリンタの設置、設定、 そして、それらのテストをおこなう必要がありました。 lpc(8) コマンドにより、 これまでとは別な管理方法がプリンタと対話的におこなわれます。 lpc(8) により、次のことが可能となります。

  • プリンタの起動、停止をおこなう。

  • キューへの入力の許可、禁止をおこなう。

  • それぞれのキューにあるジョブの順番を変更する。

最初に用語に関する注意をしておきます。 プリンタが停止しているとは、 キューの中にあるどのジョブも印字されることがない状態 を言います。この状態においても、 ユーザはまだジョブの要求をおこなうことができますが、 これらのジョブはキューの中で、 プリンタがスタートする状態になるまで、 あるいは、キューの内容が削除されるまで待たされることになります。

キューが禁止状態にあると、 (root 以外の) すべてのユーザがプリンタにジョブを要求することができません。 キューが許可状態にある場合は、 ジョブの入力が許可されます。 キューが禁止状態にある場合でも、 プリンタをスタートす る状態にすることは可能です。この場合は、 キューが空になるまで、 キュー内のジョブの印字が続けられます。

一般的に、lpc(8) コマンドを使用するには root 権限を持っている必要があります。 一般のユーザも lpc(8) コマンドを使うことはできますが、 プリンタの状態を取得することとハングしたプリンタ を再スタートすることだけに使用が制限されています。

以下に、 lpc(8) コマンドに関する説明の要約を述べます。 ほとんどのコマンドでは、操作対象となるプリンタを指定するため printer-name 引数を与えます。 printer-name の代わりに all が与えられると、操作は /etc/printcap 内にある全プリンタに対しておこなわれることになります。

abort printer-name

現在のジョブをキャンセルし、プリンタを停止させます。 キューが許可状態にある場合は、 ユーザはまだジョブを入力することができます。

clean printer-name

プリンタのスプーリングディレクトリから、 ジョブの古いファイルを削除します。状況によって、 とりわけ、印字途中でエラーが発生していたり、 管理操作が頻発していた場合には、 ジョブで作られたファイルを LPD が完全に削除しないことがあります。このコマンドでは、 スプーリングディレクトリに入っていないファイルを見つけ出し、 それを削除しています。

disable printer-name

キューに新しいジョブを入れることを禁止します。 プリンタが動作しているときは、 キューに残っているジョブの印字は続けられます。ただし、 キューが禁止状態にあったとしても、スーパーユーザ (root) は常にジョブを入力することができます。

このコマンドは、 新しいプリンタやフィルタを設置している間に使用すると有用です。 すなわち、キューを禁止状態にしておくと、 root によるジョブのみが入力されます。 そして、他のユーザは、テストが完了し、 enable コマンドでキューが再度許可状態になるまで、 ジョブの入力はできなくなります。

down printer-name message

プリンタをダウンさせます。これは、 disable をおこなった後で、 stop をおこなった場合と等価になります。 message は、ユーザが lpq(1) コマンドでプリンタのキューの状態を調べたり、 lpc status でプリンタの状態を調べたときに、 プリンタの状況として表示されるメッセージです。

enable printer-name

プリンタのキューを許可状態にします。 ユーザはジョブの入力ができるようになりますが、 プリンタがスタートの状態になるまでは、 プリンタからは何も印字されません。

help command-name

command-name コマンドのヘルプメッセージを表示します。 command-name が指定されなかった場合は、 利用できるコマンドの要約が表示されます。

restart printer-name

プリンタをスタートさせます。通常のユーザは、 LPD がある異常な状況でハングしたときに限り、 このコマンドを使用することができます。しかし、 stop または down コマンドにより、 停止状態にあるプリンタをスタートさせることはできません。 restart コマンドは、 abort の後に start をおこなったことと同じになります。

start printer-name

プリンタをスタートさせます。 プリンタのキューにあるジョブを印字することでしょう。

stop printer-name

プリンタを停止します。プリンタは、 現在のジョブを終了させ、そして、 キューにあるその他のジョブは印字しません。 プリンタが停止状態にあったとしても、まだ、 許可状態にあるキューに対して、ジョブを送ることができます。

topq printer-name job-or-username

printer-name のキューに対して、ジョブ番号 job のジョブ、または、ユーザ username から送られたジョブを置き換えて、キューの先頭に持ってきます。 このコマンドに関しては、 printer-name の代わりに all を使用することはできません。

up printer-name

プリンタをアップ状態にします。これの反対のコマンドが down です。start の次に enable をおこなったことと等しくなります。

コマンドラインから上記のコマンドを入力すると、 lpc(8) はこれを受け付けます。コマンドが入力されなかった場合は、 lpc(8) は対話モードに入り、 exitquit、 または、 ファイル終端文字が入力されるまでコマンドの入力ができます。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。