次のページ 前のページ 目次へ

2. Linux 上での印刷

このセクションでは、ファイルを印刷する方法、プリントキューを確認する方法、 プリントキューからジョブを削除する方法、印刷前にファイルをフォーマットする 方法、および印刷環境を整える方法について解説します。

2.1 Linux の印刷システムの歴史

Linux の印刷システム、すなわち lp システムは、もともと California 大学の人々が BSD (Berkeley Software Distribution) UNIX オペレーティング システムのために作成したソースコードを Linux に移植したものです。

2.2 lpr を使ってファイルを印刷する

まず Linux オペレーティングシステム上で印刷をする最も簡単な方法は、 印刷したいファイルを印刷デバイスに直接送る方法です。ひとつには、cat コマンドを使って行うやり方があります。root ユーザになって、 次のようにします。

# cat thesis.txt > /dev/lp

上記で /dev/lp とは、実際の印刷デバイス (すなわちドットマトリックス プリンタやレーザプリンタ、タイプセッター、プロッター等) へのシンボリックリンク です。(シンボリックリンクの詳細は、ln(1) をご覧ください)

セキュリティ上の理由から、root および印刷デーモンと同じグループ に属するユーザだけしかプリンタに直接書き込むことはできません。lprlprm, 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) のマニュアルページをご覧ください。

2.3 lpq を使ってプリントキューの状態を見る

印刷キューの中身を見るには、lpq コマンドを使います。 引数なしで実行すると、デフォルトプリンタのキューの中身が表示されます。

lpq の出力は、いろいろな使い道があります。

$ lpq
lp is ready and printing
Rank   Owner      Job  Files                            Total Size
active mwf        31   thesis.txt                       682048 bytes

2.4 lprm を使って印刷ジョブをキャンセルする

印刷システムに共通する便利な機能として、一旦キュー上に置かれたジョブを キャンセルする機能があります。これを実行するコマンドが lprm です。

$ lprm -

上記のコマンドは、そのユーザが所有者となっているプリントジョブを すべてキャンセルするものです。単一のプリントジョブをキャンセルする 場合は、まず lpq でジョブ番号を確認して、その番号を lprm に指定します。例えば、次の例では

$ lprm 31

デフォルトプリンタ上にあるジョブ 31 番 (thesis.txt) を キャンセルします。

2.5 lpc を使って lpd プログラムを制御する

lpc(8) プログラムを使うと、lpd が使用しているプリンタをコントロール することができます。プリンタやプリンタキューの有効・無効を切り替えたり、 キュー内のエントリの順番を変えたり、プリンタやキューの状態を報告させたり することができます。lpc が最も活躍するのは、一台のマシンに複数のプリンタが 繋がっているような環境です。

$ lpc

上記のコマンドで lpc プログラムが起動します。初期設定では、lpc コマンドは 対話モードになっているので、そのままコマンドを打ち込めます。また、コマンド ライン引数として lpc に種々のオプションを指定することもできます。

$ lpc status all

利用可能なオプション一覧は lpd のマニュアルページに記載されています が、ここでは読者が知りたいはずの主要なコマンドをいくつか紹介します。 option と記した箇所は、プリンタ名 (lp, print 等) か、 全プリンタを意味する all というのキーワードが入ります。

2.6 RedHat printtool

RedHat の高性能 printtool プログラムについて簡単に紹介します。このプログラム は、magicfilter を使って行っていた処理をすべてこなせるようです。RedHat にはフィルタリング処理をするプログラムがすでに数多くインストールされて います。以下に著者が RH 4.0 とパラレルポートに繋いだ HP LJ 4L という環境 で行ったプリンタの設定方法を記載します (RH の他のバージョンでもおそらく 同様の設定になるはずです)。

手動で /etc/printcap ファイルを複数作る場合と同様に、個々の 物理プリンタごとに複数のプリンタ定義を作成することができます。 用紙サイズや解像度の異なる複数のプリンタ定義を作ることができます。


次のページ 前のページ 目次へ