CUPS(Common UNIX Printing System)とは

CUPSは、Linux・macOS等で広く使われている、印刷システムの標準的な実装です。プリンターへの印刷要求をIPP(Internet Printing Protocol)というHTTPベースのプロトコルで扱い、ローカル接続のプリンター、ネットワークプリンター、他のCUPSサーバーが共有しているプリンターなど、さまざまな種類のプリンターを統一的な仕組みで管理できます。

CUPSの中心となるのはcupsdというスケジューラ(デーモン)です。cupsdは、印刷ジョブ(印刷要求)やプリンター・プリンタークラスの管理、印刷データの処理を一手に担うプロセスとして常駐します。

/etc/cups/:CUPSの設定ディレクトリ

CUPSの主要な設定ファイルは、一般に/etc/cups/ディレクトリにまとめられています。

ファイル役割
cupsd.confCUPSサーバー(cupsd)自体の設定(待ち受けアドレス、アクセス制御等)
printers.conf登録されているプリンターの設定
classes.confプリンタークラス(複数のプリンターをまとめたグループ)の設定
mime.types・mime.convs印刷可能なファイル形式と、その変換に使うフィルタの対応関係。CUPSのバージョンやパッケージ構成によっては、システム提供のファイルは/usr/share/cups/mime/に置かれる

印刷ジョブのスプール(一時保存)データは、既定では/var/spool/cups/に置かれます。

CUPSのWeb管理インターフェース

CUPSは、ブラウザからhttp://localhost:631/にアクセスすることで操作できるWeb管理インターフェースを標準で提供しています。プリンターの追加・削除、印刷キューの状態確認、共有設定の変更などを、コマンドラインを使わずにブラウザ上で行うことができます。プリンターの追加・削除や共有設定の変更などの管理操作には、CUPSの設定に応じた管理者認証・アクセス許可が必要です。

コマンドラインによるプリンター管理:lpadmin

lpadminは、プリンターの追加・変更・削除を行う管理者向けのコマンドです。管理操作には、CUPSで管理者として認証・許可される必要があります。

オプション効果
-p プリンター名指定した名前のプリンターを作成・変更する
-v デバイスURIプリンターの接続先(USB、ネットワークアドレス等)を指定する
-m モデル名使用するプリンターモデルを指定する。everywhereは、対応するCUPSでIPP Everywhere対応プリンターの属性を取得して使用する
-P PPDファイル使用するPPDファイルを指定する
-E指定したプリンターを有効化し、ジョブを受け付けるようにする
-x プリンター名指定したプリンターを削除する
lpadmin -p myprinter -v ipp://printer.example.com/ipp/print -m everywhere -E   # IPP Everywhere対応のプリンターをdriverlessで登録・有効化する
lpadmin -x myprinter                                              # プリンターを削除する

ユーザーが使う印刷コマンド:lpr、lpq、lprm、cancel、lpstat

出題範囲では、伝統的なlpd互換インターフェース(lpr・lprm・lpq)としてこれらのコマンドが挙げられています。CUPSはこれらのコマンドも、内部的にはIPPを使いながら提供しています。

lpr:印刷ジョブを投入する

オプション効果
-P プリンター名印刷先のプリンターを指定する(省略時は既定のプリンター)
-# 部数印刷部数を指定する
lpr -P myprinter report.pdf     # myprinterにreport.pdfを印刷する
lpr -# 3 report.pdf              # 既定のプリンターに3部印刷する

lp:印刷ジョブを投入する

lpは、System V系の印刷コマンドです。ファイルを指定して印刷ジョブを投入します。

オプション効果
-d プリンター名印刷先のプリンターを指定する
-n 部数印刷部数を指定する
lp -d myprinter report.pdf      # myprinterにreport.pdfを印刷する
lp -n 3 report.pdf               # 既定のプリンターに3部印刷する

lpq:印刷キューの状態を確認する

lpq                  # 既定のプリンターのキューの状態を表示する
lpq -P myprinter      # 指定したプリンターのキューの状態を表示する
lpq -a                 # すべてのプリンターのキューの状態を表示する

lprm:印刷ジョブを取り消す

lprm            # 既定のプリンターで、自分の現在のジョブを取り消す
lprm 1234        # ジョブID 1234を取り消す
lprm -           # 既定のプリンターのキューにある、権限上取り消せるすべてのジョブを取り消す

cancel:System V系のジョブ取り消しコマンド

cancelは、System V系の印刷システムで使われ、CUPSでも提供されている印刷ジョブを取り消すコマンドです。lprmと同様に印刷ジョブを取り消せます。

cancel myprinter-123     # 指定したジョブID(プリンター名-ジョブ番号)を取り消す

lpstat:プリンター・ジョブの状態を確認する

オプション効果
-p各プリンターの有効・無効状態を表示する
-a各プリンターキューがジョブを受け付けているかどうかを表示する
-tプリンター・ジョブ・サーバー全体の状態をまとめて表示する
-d既定のプリンターを表示する
lpstat -t         # システム全体の印刷関連の状態をまとめて表示する
lpstat -p          # 各プリンターの有効・無効状態を表示する

印刷トラブルの基本的な確認ポイント

出題範囲には「一般的な印刷トラブルの解決」も含まれます。基本的な確認の流れは次のとおりです。

  • lpstat -pでプリンターが「無効化(disabled)」になっていないか確認する:無効化されている場合、cupsenable プリンター名で再度有効化できます。
  • lpstat -aでプリンターキューがジョブを「拒否(rejecting)」していないか確認する:拒否している場合、cupsaccept プリンター名でジョブの受け付けを再開できます。
  • 印刷ジョブがキューに滞留していないか、lpq・lpstat -oで確認する:滞留している不要なジョブはcancel・lprmで取り消します。
  • CUPSのWeb管理インターフェース(http://localhost:631/)でプリンターの状態やログを確認する。