このセクションでは、ファイルを印刷する方法、プリントキューを確認する方法、 プリントキューからジョブを削除する方法、印刷前にファイルをフォーマットする 方法、および印刷環境を整える方法について解説します。
Linux の印刷システム、すなわち lp システムは、もともと California 大学の人々が BSD (Berkeley Software Distribution) UNIX オペレーティング システムのために作成したソースコードを Linux に移植したものです。
まず Linux オペレーティングシステム上で印刷をする最も簡単な方法は、
印刷したいファイルを印刷デバイスに直接送る方法です。ひとつには、cat
コマンドを使って行うやり方があります。root
ユーザになって、
次のようにします。
# cat thesis.txt > /dev/lp
上記で /dev/lp
とは、実際の印刷デバイス (すなわちドットマトリックス
プリンタやレーザプリンタ、タイプセッター、プロッター等) へのシンボリックリンク
です。(シンボリックリンクの詳細は、ln(1) をご覧ください)
セキュリティ上の理由から、root
および印刷デーモンと同じグループ
に属するユーザだけしかプリンタに直接書き込むことはできません。lpr
や lprm, lpq 等のコマンドを使ってプリンタにアクセスしなけれ
ばならないのはそのためです。
それゆえ、一般ユーザは lpr コマンドを使ってファイルを印刷する 必要があります。lpr コマンドはファイルの印刷に必要な事前の処理を すべて行った上で、制御を別のプログラムである lpd (line printing daemon) に渡します。そして、lpd がプリンタに対してファイルの 印刷方法を指示するようになっています。
lpr が実行されると、lpr はまず指定されたファイルを 特定のディレクトリ (スプールディレクトリ) にコピーし、コピーされたファイル は lpd によって印刷されるまでそのディレクトリに置かれます。 lpd に印刷すべきファイルがあるという命令が伝わると、lpd は自分と同じプロセスの分身を作成 (spawn) (プログラマ達はこれを forking と呼びます)します。そして spawn されたプロセスがファイルを印刷する間、 オリジナルの lpd プロセスは次のリクエストを待って待機します。 こうすることによって、 複数のプロセスを同時にキューに入れることが可能になっています。
lpr(1) の構文は、ごく一般的なものです。
$ lpr [ options ] [ filename ... ]
filename
が指定されない場合、lpr は標準入力からの
入力を待ちます (通常は、キーボードや他のプログラムの出力がこれにあたります)。
この機能を使えば、コマンドの出力をプリンタスプーラにリダイレクトすることが
可能になります。例えば、
$ cat thesis.txt | lpr
もしくは
$ pr -l60 thesis.txt | lpr
といった使い方が可能です。lpr コマンドでは、コマンドライン引数を 使って lpr の動作を制御することができます。よく使われる引数としては、 "-Pプリンタ名" で使用するプリンタを指定したり、"-h" で バーストページを出力しないようにしたり、"-s" でスプールディレクトリ にファイルをコピーするかわりにシンボリックリンクを作成したり (大きなファイル の場合に利用されます)、"-#数字" で印刷すべき部数を指定したり します。lpr で複数の引数を使う場合は、例えば次のようになります。
$ lpr -#2 -sP dj thesis.txt
このコマンドは、スプールディレクトリに thesis.txt
ファイルへの
シンボリックリンクを張り、dj という名前のプリンタで印刷するという
ものであり、この dj プリンタ上で lpd による処理が行われます。
そして、さらに 2 冊目の thesis.txt
の印刷も行われます。
lpr コマンドが認識する全オプションの一覧については、 lpr(1) のマニュアルページをご覧ください。
印刷キューの中身を見るには、lpq コマンドを使います。 引数なしで実行すると、デフォルトプリンタのキューの中身が表示されます。
lpq の出力は、いろいろな使い道があります。
$ lpq
lp is ready and printing
Rank Owner Job Files Total Size
active mwf 31 thesis.txt 682048 bytes
印刷システムに共通する便利な機能として、一旦キュー上に置かれたジョブを キャンセルする機能があります。これを実行するコマンドが lprm です。
$ lprm -
上記のコマンドは、そのユーザが所有者となっているプリントジョブを すべてキャンセルするものです。単一のプリントジョブをキャンセルする 場合は、まず lpq でジョブ番号を確認して、その番号を lprm に指定します。例えば、次の例では
$ lprm 31
デフォルトプリンタ上にあるジョブ 31 番 (thesis.txt
) を
キャンセルします。
lpc(8) プログラムを使うと、lpd が使用しているプリンタをコントロール することができます。プリンタやプリンタキューの有効・無効を切り替えたり、 キュー内のエントリの順番を変えたり、プリンタやキューの状態を報告させたり することができます。lpc が最も活躍するのは、一台のマシンに複数のプリンタが 繋がっているような環境です。
$ lpc
上記のコマンドで lpc プログラムが起動します。初期設定では、lpc コマンドは 対話モードになっているので、そのままコマンドを打ち込めます。また、コマンド ライン引数として lpc に種々のオプションを指定することもできます。
$ lpc status all
利用可能なオプション一覧は lpd のマニュアルページに記載されています
が、ここでは読者が知りたいはずの主要なコマンドをいくつか紹介します。
option と記した箇所は、プリンタ名 (lp, print 等) か、
全プリンタを意味する all
というのキーワードが入ります。
RedHat の高性能 printtool プログラムについて簡単に紹介します。このプログラム は、magicfilter を使って行っていた処理をすべてこなせるようです。RedHat にはフィルタリング処理をするプログラムがすでに数多くインストールされて います。以下に著者が RH 4.0 とパラレルポートに繋いだ HP LJ 4L という環境 で行ったプリンタの設定方法を記載します (RH の他のバージョンでもおそらく 同様の設定になるはずです)。
su
を使った場合は、
確か SETENV DISPLAY :0.0
と xhost +
が必要だと思います)。
/dev/lp1
でした)。
手動で /etc/printcap
ファイルを複数作る場合と同様に、個々の
物理プリンタごとに複数のプリンタ定義を作成することができます。
用紙サイズや解像度の異なる複数のプリンタ定義を作ることができます。