Linux Printing

最終更新: 2024-03-21 21:27:10 +0800 +0800
tags: Cups | Linux | Printing
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

CUPS は Internet Printing Protocol(IPP)クライアントとスケジューラーを提供します。CUPS の 宛先は名前付きのプリンターキューまたはクラスであり、物理プリンターやネットワークプリンターはそのキューから到達するデバイスです。 したがって、キューの状態、ジョブの状態、デバイスへの到達性は別々に診断する必要があります。

キュー、プリンター、IPP #

クライアントは IPP リクエストにジョブ文書と属性をエンコードします。ローカルクライアントは通常 Unix ドメインソケットで スケジューラーに接続し、リモートクライアントは慣例的に TCP ポート 631 で ipp:// または暗号化された ipps:// を使います。 スケジューラーはジョブをスプールし、宛先を選び、必要に応じてデータを変換し、バックエンドまたはドライバーレス IPP 接続で出力を送信します。

現代の IPP Everywhere プリンターは、形式と仕上げ機能を直接通知します。従来型のキューでは、PPD 駆動のフィルターチェーンと バックエンドを使うこともあります。どちらの場合も、キューはクライアントから見た安定したオブジェクトです。

ジョブの送信 #

lp は System V インターフェースを、lpr は BSD 互換インターフェースを提供します。どちらも CUPS 経由で送信します。

sh
lp report.pdf
lp -d office report.pdf
lpr -P office report.pdf
printf 'status report\n' | lp -d office

lp -d と lpr -P には明示的な宛先が必要です。lp では CUPS が LPDEST、PRINTER、 ユーザーごとの lpoptions の既定値、最後にサーバーの既定値の順で既定宛先を選びます。

-o で IPP ジョブテンプレート属性を渡します。プリンター固有の値は異なるため、先に宛先を問い合わせます。

sh
lpoptions -p office -l
lp -d office -n 2 \
  -o media=A4 \
  -o sides=two-sided-long-edge \
  -o print-quality=4 report.pdf

lpoptions -p office -o name=value は後続ジョブの既定値を保存します。 lp -o name=value は送信するジョブだけを変更します。CUPS は保存済みオプション集合用に office/duplex のような名前付きプリンターインスタンスもサポートします。

キューとプリンターの検査 #

処理がどこで止まったかを特定するため、状態表示を使い分けます。

sh
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 view

lpstat -p はキューが印刷用に有効かを報告し、lpstat -a は新しいジョブを受け付けるかを報告します。 無効なキューにもジョブは残り得ます。また、受付を停止したキューが既存の処理を続けることもあります。

ジョブのキャンセルと制御 #

送信応答と lpstat -o は office-42 のような識別子を提供します。どちらのインターフェースでも 1 件のジョブをキャンセルできます。

sh
cancel office-42
lprm -P office 42

cancel -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 環境変数を使って別のスケジューラーを選択できます。

sh
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 で閲覧・コメントする(投稿にはログインが必要です)