印刷の仕組み
多くの Linux ディストリビューションでは印刷のサブシステムとして CUPS (Common Unix Printing System) を採用している。
CUPS の主な特徴は以下の通り。
- IPP (Ineternet Printer Protocol) の採用: ネットワーク上のプリンタをサポートするプロトコルとして IPP を採用している。インターネット経由の印刷も可能
- PPD (PostScript Printer Description) ファイルのサポート: Adobe の PPD 形式のファイルでデバイスドライバの設定が可能
- Web ベースで設定可能: Web ブラウザから設定できるツールが組み込まれている
- プリンタクラスのサポート: 複数のプリンタを 1 台のプリンタに見せかける機能をサポートしている
CUPS を使った印刷処理の流れは以下の通り。
- アプリケーションや印刷コマンドから印刷データを受け取る。プリンタの設定オプションは PPD ファイルから提供される
- スプーラが印刷データを受け付け、スケジューリングを行う
- プリンタが直接受け付けられないデータを、一旦中間形式として PDF または PostScript にフィルタで変換する
- PPD に定義されたフィルタにより、最終の印刷データに変換する
- 処理した印刷データを CUPS のバックエンドに送る
- バックエンドは印刷データをローカル接続またはネットワークを経由してプリンタに渡す
プリンタの機種依存情報は PPD と呼ばれるファイルに記述され、アプリケーションへのプリンタ設定オプション及び中間形式からの変換ルールを提供する。
PPD ファイルは /etc/cups/ppd ディレクトリに格納される。CUPS の設定ファイル /etc/cups/cupsd.conf では印刷要求をネットワーク経由で受け付ける場合のポート番号や、接続するクライアントのアクセス許可を設定する。
また、/etc/cups/printers.conf ではプリンタに関する情報を格納する。
$ cat /etc/cups/cupsd.conf | grep -v ^# | head -20
LogLevel warn
PageLogFormat
MaxLogSize 0
Listen localhost:631
Listen /var/run/cups/cups.sock
Browsing Off
BrowseLocalProtocols dnssd
DefaultAuthType Basic
WebInterface Yes
<Location />
Order allow,deny
</Location>
CUPS は 631 番ポートを LISTEN しており、ブラウザからアクセスすることも可能。
$ sudo netstat -antp | grep 631
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 25047/cupsd
tcp6 0 0 ::1:631 :::* LISTEN 25047/cupsd
印刷関連コマンド
lpr
ファイルを印刷する際に使うコマンド。lpr コマンドは指定されたファイルや標準入力をプリントキューに送る。
-# で部数、-P でプリンタを指定する。
$ lpr -#5 /etc/passwd
$ dmesg | lpr
lpq
プリントキューの内容を表示するためのコマンド。-P でプリンタを指定できる。
lprm
プリントキューにある印刷要求を削除するためのコマンド。一般ユーザーは自分の発行した印刷要求のみを、スーパーユーザーは全ての印刷要求を削除できる。
ジョブ番号は lpq コマンドで確認する。オプションに - を用いると自分が印刷しようとしている全ての印刷ジョブを削除する。
$ lprm -