The Linux Printing Usage HOWTO by Mark Komarinski <markk@auratek.com> v1.2.2, 6 February 1998 JF Project 2001/08/31 はじめに

HOWTOs!printing usage printing!user-level introduction この文書は,Linux OS が提供しているラインプリンタ・スプールシステムの使用方法 を説明するものです。Linux 印刷システムのインストールとセットアップを 解説した文書「」() を補完するものとなっています。この HOWTO で紹介する事柄は、 Linux だけでなく BSD 系オペレーティングシステムにおいても同じように当てはまる はずです。 Linux Printing HOWTO の履歴

Mark Komarinski <markk@auratek.com> から:

この HOWTO のリライトの労をとってくれた Matt Foster に感謝します。 彼のスタイルを継承するとともに、更新が必要な箇所に手を加えました。

Matt Foster <mwf@engr.uak.edu> から:

Linux Printing HOWTO は、もともと Grant Taylor <grant@god.tufts.edu> と Brian McCauley <B.A.McCauley@bham.ac.uk> によって作成された文書ですが、 このバージョンでは全体を完全にリライトしました。原著で Grant と Brian が 扱っていた項目についてはなるべくカバーするよう務めましたが、説明のスタイルや 解説の深さについてはかなり変更を加えています。これによって、本書はより 網羅的な読みやすい文書になったと思っています。読者がそれに同意してくれることを 願うばかりです。 更新履歴

v1.2.2 目次の変更、および新しい RedHat 文書への対応。Ed に感謝! v1.2.1 更新と、Dr. Linux publication に関する変更 v1.2 Windows プリンタについて 印刷ファイルの最大サイズの変更 v1.11 新しい文書管理者に交代 lpc の情報を追加 トラブルシューティングに情報を追加 画像ファイルの印刷方法 v1.1 単語の使い方を修正 PostScript ファイルの印刷についてのセクションを追加 例題 8 の一部をより分かりやすくした 基本的な Linux 印刷ユーティリティの情報を更新 v1.0 Printing Usage HOWTO 初版のリリース 著作権と商標

この HOWTO に記載された名称の中には、特定の個人や会社の著作物や商標となって いるものがあります。本書では、正式名もしくは大文字の略称を使っています。

(c) 1995 Matt Foster (mwf@engr.uark.edu) (c) 1996-1997 Mark F. Komarinski (markk@auratek.com)

Linux HOWTO 文書に基づく翻訳・二次的著作物・結合著作物は、すべてこの 著作権表示に従わなければなりません。 すなわち、ある HOWTO 文書から二次的著作物を作成した場合、頒布に際して 制限的な条件を追加することはできません。ただ、特定の条件下では例外が 認められるので、詳細は下記の Linux HOWTO コーディネイタに連絡してください。

つまり、われわれは、あらゆるチャンネルを通じてこの文書の情報を広めたいと 思っていますが、他方で HOWTO 文書についての著作権を保持したいとも考えて います。HOWTO 文書を再配布する計画があれば、是非われわれに知らせてください。

質問があれば、Linux HOWTO コーディネイタの Tim Bynum <linux-howto@sunsite.unc.edu> までご連絡ください。 電話番号その他の連絡先についても、このアドレスにお問い合わせください。 この文書のダウンロード

printing!downloading HOWTOs この HOWTO を印刷したい場合は、PostScript 版のダウンロードをおすすめ します。版組が美しく読みやすいようにフォーマットされているからです。 PostScript バージョンは、Linux を配布している数多くのサイトのひとつ (SunSITE 等) から入手できます。 フィードバック

この文書に関する質問・コメント・訂正は、<markk@auratek.com> まで お送りください。 謝辞

本書のアルファ版に目を通し、多くの有益なコメントや提案を送ってくれた 全ての方に感謝します。そうした方々の中には、送付したコメントがこの文書に 反映されているのが分かる方がいると思います。

また、最初のリライトを行ってくれた Matt Foster にも感謝します。 Linux 上での印刷

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

printing!history of lp system---is a port of the source code written by the Regents of the University of California for the Berkeley Software Distribution version of the UNIX operating system. ]]> Linux の印刷システム、すなわち lp システムは、もともと California 大学の人々が BSD (Berkeley Software Distribution) UNIX オペレーティング システムのために作成したソースコードを Linux に移植したものです。 lpr を使ってファイルを印刷する

printing!using lpr command lpr command!usage example まず Linux オペレーティングシステム上で印刷をする最も簡単な方法は、 印刷したいファイルを印刷デバイスに直接送る方法です。ひとつには、cat コマンドを使って行うやり方があります。root ユーザになって、 次のようにします。 # cat thesis.txt > /dev/lp /dev/lp is a symbolic link to the actual printing device---be it a dot-matrix, laser printer, typesetter, or plotter. (See ln(1) for more information on symbolic links.) ]]> 上記で /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) のマニュアルページをご覧ください。 lpq を使ってプリントキューの状態を見る

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

lpq の出力は、いろいろな使い道があります。 $ lpq lp is ready and printing Rank Owner Job Files Total Size active mwf 31 thesis.txt 682048 bytes lprm を使って印刷ジョブをキャンセルする

printing!using lprm command lprm command!usage example 印刷システムに共通する便利な機能として、一旦キュー上に置かれたジョブを キャンセルする機能があります。これを実行するコマンドが lprm です。 $ lprm - 上記のコマンドは、そのユーザが所有者となっているプリントジョブを すべてキャンセルするものです。単一のプリントジョブをキャンセルする 場合は、まず lpq でジョブ番号を確認して、その番号を lprm に指定します。例えば、次の例では $ lprm 31 デフォルトプリンタ上にあるジョブ 31 番 (thesis.txt) を キャンセルします。 lpc を使って lpd プログラムを制御する

printing!using lpc command lpc command!usage example lpc(8) プログラムを使うと、lpd が使用しているプリンタをコントロール することができます。プリンタやプリンタキューの有効・無効を切り替えたり、 キュー内のエントリの順番を変えたり、プリンタやキューの状態を報告させたり することができます。lpc が最も活躍するのは、一台のマシンに複数のプリンタが 繋がっているような環境です。 $ lpc 上記のコマンドで lpc プログラムが起動します。初期設定では、lpc コマンドは 対話モードになっているので、そのままコマンドを打ち込めます。また、コマンド ライン引数として lpc に種々のオプションを指定することもできます。 $ lpc status all 利用可能なオプション一覧は lpd のマニュアルページに記載されています が、ここでは読者が知りたいはずの主要なコマンドをいくつか紹介します。 option と記した箇所は、プリンタ名 (lp, print 等) か、 全プリンタを意味する all というのキーワードが入ります。 disable option - 新規のプリンタジョブが入ることを禁じます down option - プリンタ上のすべての印刷を中止します enable option - 新規ジョブがプリントキューに入ることを許可します quit (もしくは exit) - lpc を終了します restart option - 当該プリンタの lpd を再起動します status option - プリンタの状態を表示します。 up option - すべてを有効にして、新しく lpd を起動します RedHat printtool

printing!using Red Hat printool Red Hat Linux!printool printool utility RedHat の高性能 printtool プログラムについて簡単に紹介します。このプログラム は、magicfilter を使って行っていた処理をすべてこなせるようです。RedHat にはフィルタリング処理をするプログラムがすでに数多くインストールされて います。以下に著者が RH 4.0 とパラレルポートに繋いだ HP LJ 4L という環境 で行ったプリンタの設定方法を記載します (RH の他のバージョンでもおそらく 同様の設定になるはずです)。 root になって、printtool を起動します (su を使った場合は、 確か SETENV DISPLAY :0.0xhost + が必要だと思います)。 "Add" をクリックし、ローカルプリンタ用で "OK" を押します。 プリンタデバイスの欄を埋めます (著者の場合は、/dev/lp1 でした)。 入力フィルタの欄を埋めます - プリンタタイプ・解像度・用紙サイズを 選択します (著者は、ljet4, 300x300, letter size でした)。 "OK" を押して、元に戻ります。その上で、lpd を再起動します。 手動で /etc/printcap ファイルを複数作る場合と同様に、個々の 物理プリンタごとに複数のプリンタ定義を作成することができます。 用紙サイズや解像度の異なる複数のプリンタ定義を作ることができます。 ファイルの印刷

printing!by file type このセクションでは、Linux 環境上で作成される種々のファイルを印刷する方法 について解説します。 グラフィックファイルの印刷

printing!graphics files プリンタでグラフィックファイルを印刷する方法は、一般にそのグラフィック ファイルがどういう形式に変換されているのか、どのようなプリンタに送ろうと しているのかによって異なります。ドットマトリックスの場合は、グラフィック を扱う方法が機種ごとに違うので、一般的な方法というのはありません。その場合、 最善の方法は使用するプリンタが Epson もしくは IBM ProPrinter 互換かどうか 確認し、その上でグラフィックファイルを PostScript に変換し、ghostscript (次章をご覧ください) を使ってそれを印刷することです。

レーザープリンタをお持ちなら、PCL 互換の場合が多いので、話はもう少し 簡単になります。その場合、方法は複数あります。プログラムの中には直接 PCL 形式 で出力できるものがあります。それができないときは、NetPBM といった プログラムを使えば PCL 形式に変換できます。また、最後の手段として ghostscript (次章を参照) を使う手もあります。

最も完璧な方法としては、まず NetPBM と ghostscript といったパッケージを インストールして、次に magic filter もインストールし、グラフィックファイルを 自動的かつ簡単に処理することです。 PostScript ファイルの印刷

printing!Postscript files Postscript!printing PostScript インタープリタ内蔵のプリンタで PostScript ファイルを印刷する のは簡単です。単に lpr コマンドを使えば、プリンタが必要な処理 をすべて行ってくれます。PostScript を処理できないプリンタを持っている 場合は、別の方法を使うしかありません。さいわい、PostScript を解析して 大部分のプリンタが理解できる言語に変換するプログラムがいくつかあります。 そうしたプログラムの中で最も有名なのが Ghostscript です。

Ghostscript の役割は、PostScript ファイルのすべての記述をプリンタが理解 できるコマンドに変換することです。Ghostscript を使って PostScript を 印刷するには、次のようなコマンドを使います。 $ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr thesis.ps 上記の例で注意すべき点は、-sOutputFile オプションを使って パイプ処理によって Ghostscript の出力を lpr コマンドに送っている ということです。 Ghostview は、X Window System 用の Ghostscript のインターフェイスです。 Ghostview を使うと、印刷する前に PostScript ファイルの印刷結果をプレビュー することができます。Ghostview と Ghostscript は、両方とも で入手できます。 PDF ファイルの印刷

printing!PDF files printing!Acrobat files PDF files!printing Acrobat files!printing Adobe は Linux 用の Acrobat Reader をリリースしており、Adobe のホームページ から入手可能となっています。Acrobat Reader の前任者である xpdf も入手可能です。どちらも PostScript 対応 プリンタで印刷する必要があります。 TeX ファイルの印刷

printing!TeX files TeX files!printing 最も簡単な TeX ファイルの印刷方法は、一旦 PostScript ファイルに変換して それを Ghostscript を使って印刷することです。それには先ず、TeX ファイルを DVI (これは、device-independent の意味です) に変換する必要があります。 これは、tex(1) コマンドを使えば実行できます。その上で、 dvips を使って DVI ファイルを PostScript ファイルに変換する 必要があります。上記の手順には、次にようなコマンドを使います。 $ tex thesis.tex $ dvips thesis.dvi これによって出来上がった PostScript ファイルは、先ほど説明した方法で 印刷することができます。 troff 形式でフォーマットされたファイルの印刷

printing!troff files troff files!printing $ groff -Tascii thesis.tr | lpr か、もしくは $ groff thesis.tr > thesis.ps といったコマンドを実行して、PostScript ファイルを先ほど説明した 方法で印刷します。 man ページの印刷

printing!man pages man pages!printing $ man man | col -b | lpr man ページには予めフォーマットされた troff データが含まれているので、 強調や下線等を取り除く必要があります。"col" プログラムはその処理を 的確にこなします。さらに上記ではデータをパイプ処理しているので、 man プログラムは more を使用しません。 様々な問題

このセクションでは、これまでのセクションで取り上げなかった事柄を解説します。 印刷前のフォーマット

printing!formatting files before ほとんどの ASCII ファイルは印刷用にはフォーマットされていないので、 実際に印刷する前に何らかの形でフォーマットしておくと便利です。そうした フォーマットの例としては、 ファイルにタイトルを入れたり、個々のページにパージ番号を振ったり、 マージンを設定したり、ダブルスペースやインデント、多段組などの処理が 含まれます。これをするための一般的な方法は、pr といった プリント・プリプロセッサを使うことです。 $ pr +4 -d -h"Ph.D. Thesis, 2nd Draft" -l60 thesis.txt | lpr 上記の例題では、prthesis.txt ファイルを取得し 最初の 3 ページを飛ばしてから (+4)、ページ長を 60 行に設定し (-l60)、出力をダブルスペースにした上で (-d)、 "Ph.D. Thesis, 2nd Draft" という一文を各ページの上端に付け加えます (-h)。そして、lprpr の出力をキュー上に置きます。pr の詳しい使い方については、 オンライン・マニュアルページをご覧ください。 環境変数 PRINTER

printing!PRINTER environment variable PRINTER environment variable Linux 印刷システムのすべてのコマンドで、-P オプションが使えます。 このオプションを使うと、どのプリンタを使用して出力するのかを指定することが できます。使用すべきプリンタを指定しない場合、デフォルトのプリンタが 出力デバイスと見なされます。

印刷のたびに使用するプリンタを指定せずとも、環境変数 PRINTER に使用したい プリンタ名を設定しておくことができます。設定方法は、シェルの種類によって 異なっています。bash の場合は、次のようになります。 $ PRINTER="printer_name"; export PRINTER csh では、次のように設定します。 % setenv PRINTER "printer_name" 上記のコマンドは、login スクリプト (bash では .profilecsh では .cshrc) に書き込むこともできますし、コマンド ラインから打ち込むこともできます (環境変数の詳細については、 bash(1) や csh(1) をご覧ください)。 よくある質問に対する答え printing!frequently asked questions printing!FAQ FAQ!printing usage

Q1. 階段現象 (staircase effect) を防止する方法は? printing!staircase effect

A1. 階段現象 (訳注:行頭が揃わずに、各行が階段状にギザギザになって印刷されて しまう現象) が起るのは、行の終了として認識する記号がプリンタによって異なる ためです。プリンタのなかには、キャリッジリターン (CR) とラインフィード (LF) のシーケンスで行末が終了すると思っているものがある反面 (DOS スタイル)、 UNIX 系システムで利用されるラインフィードのみのシーケンスで行末が終了する と思っているものもあります。これを解決する最も簡単な方法は、 お使いのプリンタがこれらふたつのスタイルをなんらか方法で切り替えることが できるか否かを確認することです。切り替え方法は 2 種類あり、DIP スイッチを 付け変えるか、プリントジョブ開始時にエスケープシーケンスを送るかのいずれか です。後者の場合には、フィルタを作成する必要があります (Q2 を参照)。 簡単な解決方法は、コマンドラインでフィルタを使うことです。例えば、 次のようにします。 $ cat thesis.txt | todos | lpr

Q2. フィルタとは? printing!filter

A2. フィルタとは、標準入力 (stdin) からの読み込みを行い、その入力に 何らかの処理を施した上で、標準出力 (stdout) に書き出しを行う プログラムのことです。フィルタは様々な用途で利用されていて、テキストの 整形もそのひとつです。

Q3. マジック フィルタとは? printing!magic filter

A3. マジックフィルタとは、ファイルタイプに応じて前処理を行うフィルタの ことです。 例えば、単なるテキストファイルの場合は、通常の方法でそのままファイルを印刷 します。もしファイルが PostScript 等のファイルなら、(ghostscript などの) 別の方法を使って印刷します。マジックフィルタの典型例は、magicfilter と APSfilter です。この種のフィルタを使う際に注意すべきなのは、フィルタ自体を インストールする前に、フィルタが使用するプログラムを予めインストールしておく 必要があるということです。

というのも、magicfilter がインストールされるとき、magicfilter はシステムを 走査して特定のプログラム (例えば ghostscript などのプログラム - これが 見つかると、PostScript データを扱えることが分かるわけです) がインストール されているか確認し、その上で検出したプログラムに基づいてビルドされるように なっています。各種印刷ファイルを全て扱えるようにするには、最低限以下の プログラムがインストールされている必要があるでしょう。 GhostScript TeX NetPBM jpeg utilities gzip

Q4. Windows 印刷システムはどうですか? Linux で動きますか? printing!Windows Printing System (WPS)

A4. 場合によります。Windows 印刷システム (WPS) のコマンドだけしか受け付けない プリンタは、Linux では動きません。WPS に加えてそれ以外のコマンドも受け付ける プリンタ (Canon BJC 610 等) の場合は、WPS フォーマット以外のモードに設定されて いれば Linux でも動きます。それ以外のプリンタ (HP DeskJet 820Cxi/Cse 等) は、Linux では動きません。前述した通り、Linux は Win95 マシンのプリントサーバ として動かすことができます (Samba についての項目を見て下さい)。Win95 には そうしたプリンタのドライバが含まれているからです。

Q5. ひどい! 6 ページ以上の文書を印刷しようとすると、「ファイルが 大きすぎる」というエラーになる。 printing!file too large error

A5. /etc/printcap ファイルのオプションのひとつに、印刷ファイルの 最大サイズに関するものがあります。初期設定は 1000 ディスクブロック (約 500k 程度?) となっています。PostScript 形式のファイルなどでは、 画像を含めて 6 〜 8 ページで容量オーバーになることがあります。 プリンタ定義の項目に次の行が追加されているかどうか確認してください。 mx=0 印刷ファイルの容量を制限するのは、スプールパーティションが満杯になるのを 防ぐためです。これを防ぐ別の方法として、lpr がスプールディレクトリ から印刷ファイルに対してソフトリンクを張るようにするというのがあります。 その場合は、lpr コマンドを実行するたびに -s オプションを 付けるのを忘れないようにしてください。

トラブルシューティング

printing!troubleshooting このセクションでは、印刷システムの不調の原因をいくつか説明します。

プリンタが動かない場合は、 他の印刷ジョブは動きますか? (アプリケーションの問題では?) lpd が走っていますか? (lpc でチェックしてください) (プリントコントローラの問題では?) root 権限でプリンタに直接命令を送れますか? (プリントサービスの問題では?) DOS からは印刷できますか? (ケーブルやプリンタ本体の問題では?) これらの質問に答えることは、問題解決の手がかりになるでしょう。 このセクションに対する提案は、<markk@auratek.com> まで送ってください。 参考資料

printing!reference material このセクションでは、Linux 印刷システムの参考資料を紹介します。 できる限り適切な資料を掲載しようと思っているので、もし重要な資料が 抜け落ちていた場合は、是非著者まで知らせてください。

USENET グループに質問を投げる前に、以下の事柄を確認してください。 プリンタはジョブを受け付けているか? (lpc(8) コマンドを 使って確認できます) その質問に対する回答が、この HOWTO や Grant Taylor の Printing HOWTO に記載されていないか?

もし上記のうちひとつでも当てはまる場合は、質問をポストする前にもう一度考え 直した方がいいでしょう。また、最終的にニュースグループにポストするときでも、 問題解決に必要な情報をきちんと記載するようにしましょう。「lpr が上手くいかない のですが、助けてください」といった質問の仕方はしないようにしてください。 そうした質問は、多くの人からほぼ確実に無視されます。使用しているカーネルの バージョン、エラーが出た経緯、そしてできればシステム上で表示されたエラー メッセージそのものも記載するようにしてください。 オンラインマニュアルページ printing!related man pages cat(1) ファイルの結合や印刷 dvips(1) TeX の DVI ファイルを PostScript に変換 ghostview(1) Ghostscript を使って PostScript 文書を閲覧 groff(1) groff 文書フォーマットシステムのフロントエンド gs(1) Ghostscript のインタープリタ兼ビューア lpc(8) ラインプリンタ制御プログラム lpd(8) ラインプリンタ・スプールデーモン lpq(1) スプールキュー確認プログラム lpr(1) 印刷ジョブを生成し、キューに登録 lprm(1) ラインプリンタのスプールキューからジョブを削除 pr(1) テキストファイルを印刷用に変換 tex(1) テキストの整形とタイプセットを行う

USENET ニュースグループ printing!relates newsgroups comp.os.linux.* Linux 情報の宝庫 comp.unix.* Unix OS 関連の話題 日本語訳について

日本語訳に関するお問い合わせは、<JF@linux.or.jp> までお願いします。 翻訳:佐藤亮一 <GFG02131@niftyserve.or.jp> (1996/10/01) 更新:千旦裕司 <ysenda@pop01.odn.ne.jp> (2001/10/06)