CUPS は Internet Printing Protocol(IPP)クライアントとスケジューラーを提供します。CUPS の 宛先は名前付きのプリンターキューまたはクラスであり、物理プリンターやネットワークプリンターはそのキューから到達するデバイスです。 したがって、キューの状態、ジョブの状態、デバイスへの到達性は別々に診断する必要があります。
キュー、プリンター、IPP #
クライアントは IPP リクエストにジョブ文書と属性をエンコードします。ローカルクライアントは通常 Unix ドメインソケットで
スケジューラーに接続し、リモートクライアントは慣例的に TCP ポート 631 で ipp:// または暗号化された ipps:// を使います。
スケジューラーはジョブをスプールし、宛先を選び、必要に応じてデータを変換し、バックエンドまたはドライバーレス IPP 接続で出力を送信します。
現代の IPP Everywhere プリンターは、形式と仕上げ機能を直接通知します。従来型のキューでは、PPD 駆動のフィルターチェーンと バックエンドを使うこともあります。どちらの場合も、キューはクライアントから見た安定したオブジェクトです。
ジョブの送信 #
lp は System V インターフェースを、lpr は BSD 互換インターフェースを提供します。どちらも CUPS 経由で送信します。
lp report.pdf
lp -d office report.pdf
lpr -P office report.pdf
printf 'status report\n' | lp -d officelp -d と lpr -P には明示的な宛先が必要です。lp では CUPS が LPDEST、PRINTER、
ユーザーごとの lpoptions の既定値、最後にサーバーの既定値の順で既定宛先を選びます。
-o で IPP ジョブテンプレート属性を渡します。プリンター固有の値は異なるため、先に宛先を問い合わせます。
lpoptions -p office -l
lp -d office -n 2 \
-o media=A4 \
-o sides=two-sided-long-edge \
-o print-quality=4 report.pdflpoptions -p office -o name=value は後続ジョブの既定値を保存します。
lp -o name=value は送信するジョブだけを変更します。CUPS は保存済みオプション集合用に
office/duplex のような名前付きプリンターインスタンスもサポートします。
キューとプリンターの検査 #
処理がどこで止まったかを特定するため、状態表示を使い分けます。
lpstat -r # scheduler running
lpstat -p -d # printer queues and default
lpstat -a # whether queues accept jobs
lpstat -v # queue device URIs
lpstat -o office # incomplete jobs for one destination
lpstat -W completed -o office
lpq -P office # BSD-compatible queue viewlpstat -p はキューが印刷用に有効かを報告し、lpstat -a は新しいジョブを受け付けるかを報告します。
無効なキューにもジョブは残り得ます。また、受付を停止したキューが既存の処理を続けることもあります。
ジョブのキャンセルと制御 #
送信応答と lpstat -o は office-42 のような識別子を提供します。どちらのインターフェースでも 1 件のジョブをキャンセルできます。
cancel office-42
lprm -P office 42cancel -a office は宛先のすべてのジョブをキャンセルするため、通常は管理者権限が必要です。
lp -i office-42 -H resume は保留中のジョブを解放します。キュー管理は別であり、
cupsdisable/cupsenable は印刷を停止・開始し、cupsreject/cupsaccept は送信を拒否・受け付けします。
フィルターとバックエンドの診断 #
lpstat -t から始め、影響を受けたジョブとキューを調べます。停止したキューには、フィルター終了、
バックエンド接続失敗、認証失敗、未対応の文書形式が記録されることがあります。CUPS はスケジューラーとジョブのメッセージを
error_log に書き込みます。設定された ErrorLog はファイル、標準エラー、システムジャーナルのいずれかです。
cupsctl --debug-logging は追加の診断を有効にしますが、ログには文書名、ユーザー名、デバイス詳細が含まれる可能性があるため、
失敗を再現した後は無効にします。
従来型のパイプラインでは、各フィルターが存在して実行可能であることを確認し、利用できる場合は cupsfilter で変換をテストします。
デバイス障害では lpstat -v を意図した URI と比較し、エンドポイントを名前解決して接続した後、バックエンドメッセージを調べます。
キューの ErrorPolicy は、バックエンドまたはフィルターの失敗後に CUPS が中止、再試行、プリンター停止のいずれを行うかを決定します。
権限とリモートサーバー #
ユーザーは通常、自分のジョブを送信・キャンセルできます。cupsd.conf のサーバーポリシーがプリンター管理と他ユーザーのジョブの
キャンセルを制御します。ディストリビューション固有のグループへの所属は、考えられるポリシー機構の 1 つにすぎません。
-U NAME は認証で提示するユーザー名を選びますが、認証を回避するものではありません。
-h server[:port] を CUPS コマンドに指定するか、CUPS_SERVER 環境変数を使って別のスケジューラーを選択できます。
lpstat -h print.example.com:631 -p -d
lp -h print.example.com:631 -E -d office report.pdf-E はトランスポート暗号化を強制します。リモートサーバーは到達可能なインターフェースで待ち受け、
宛先を通知または設定し、要求された IPP 操作を認可する必要があります。
上流のコマンドライン印刷ガイド、
lpstat(1), and
cupsd-logs(5) document these
interfaces.
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)