CUPSでIPPプリンターがService Unavailableになる問題と対処(LPDに変更すると安定した)

Linux

概要

Linuxで CUPS (Common Unix Printing System) を使用してプリンターを設定した際、
IPP (Internet Printing Protocol) を使用すると突然印刷できなくなる問題が発生しました。

CUPSのログを確認すると Service Unavailable が記録されており、プリンターを再起動すると一時的に復旧しますが、しばらくすると再発します。

最終的には IPPではなくLPDで登録し直すことで安定動作しました。

この記事では以下を解説します。

  • CUPSでIPP印刷が失敗する症状
  • ログの確認方法
  • トラブルシュート手順
  • LPDへ変更する回避策

環境

OSLinux
印刷システムCUPS
プリンター接続方式IPP
用途日次帳票の自動印刷

CUPSでIPPプリンターが突然印刷できなくなる症状

CUPSでIPPプリンターを登録した直後は正常に印刷できます。
しかし 数時間〜数日後に突然印刷できなくなる現象が発生しました。

主な症状は次の通りです。

  • 印刷ジョブが処理されない
  • CUPS上でプリンターが利用できない状態になる
  • ジョブがキューに残る
  • プリンター再起動で一時的に復旧する

業務システムでは 日次帳票を自動印刷していたため、約1週間分の帳票が未印刷になるという問題になりました。


CUPSログを確認する

まずは CUPSのログを確認します。
デフォルトではログは通常次の場所にあります。

/var/log/cups/error_log

設定によっては以下のようにSyslogに出力されている場合もあります。

(/etc/sups/cups-files.conf)

ErrorLog syslog

また、ログの出力レベルも重要です。
出力レベルがwarnだと警告以上しか出力されないため、詳細の動作は分かりません。
詳細を見るためにはログレベルをdebugまたはdebug2に設定し、CUPSのプロセスを再起動します。

(/etc/cups/cupsd.conf)

LogLevel debug

デバッグログを確認すると、印刷が失敗しているときには以下のエラーが繰り返し記録されていました。

cupsd[XXXXX]:[Job XXX] Getting supported attributes...
cupsd[XXXXX]:[Job XXX] Get-Printer-Attributes:server-error-service-unavailable(Service Unavailable)
cupsd[XXXXX]:[Job XXX] Get-Printer-Attributes returned server-error-service-unavailable
cupsd[XXXXX]:[Job XXX] The printer is in use.

これはCUPSからプリンターにリクエストを送ったところ、Service Unavailableで応答が返ってこない状況が疑われました。
IPPはHTTPで通信を行うので、プリンター側のサービスが落ちている等で応答ができない状態が想定されます。


CUPSの状態を確認するコマンド

CUPSには状態確認用のコマンドがあります。

プリンター状態確認

lpstat -t

登録プリンター確認

lpstat -p

CUPSデバイス一覧

lpinfo -v

これらのコマンドで CUPSの設定状態やプリンター状態を確認できます。


不思議だった点(IPPだけが不安定)

今回の問題は少し不可解で、実際には以下のような状態でした、

  • プリンター側では特にエラーが出ている様子が無い(正常稼働のように見える)
  • ネットワーク的には疎通ができており、問題が無い(PINGが通る)
  • 他のWindows端末からは正常に印刷できる
  • 他のLinuxサーバーからも正常に印刷できる
  • 当方のサーバー上のCUPSではプリンターが動いていないように見える

つまりIPPで設定したLinuxサーバーからの印刷だけが不安定という状況でした。


一時的な復旧方法

プリンターを再起動すると、IPP印刷は復旧しました。
以下のようにCUPS上でキューをクリアして、プリンターを有効にすると、最初は印刷ができて復旧したかのように見えました。
ですが、またしばらくすると同じ状態になってしまい、印刷ができなくなることを繰り返していました。

CUPSでキューをクリア
↓
プリンター再起動
↓
CUPSでプリンターを有効化
↓
IPP印刷が復旧
↓
数時間〜数日で再発

この挙動から、次の可能性を疑いました。

  • プリンターのIPPサービスが停止している
  • IPPセッションの不具合
  • プリンターファームウェアのバグ

ただし、プリンターログが取得できなかったため 根本原因は特定できませんでした。


回避策:IPPではなくLPDを使用する

最終的には IPPではなくLPDでプリンターを登録し直しました。

CUPSでは接続URIが異なります。

IPP

ipp://printer-ip/ipp/print

LPD

lpd://printer-ip/queue

LPDで設定し直した結果、以下のように事象が解消しました。

  • 印刷が安定
  • 再発なし(1年以上)

CUPSでIPPが不安定になる原因

IPPは便利ですが、次のような問題が起きることがあります。

  • プリンターのIPP実装の不具合
  • セッション管理の問題
  • 長時間接続によるタイムアウト
  • プリンターファームウェアのバグ

特に 古い業務用プリンターではIPP実装が弱い機種もあるようです。


CUPSトラブルシュート手順まとめ

CUPSで印刷できない場合は次の手順で確認すると効率的です。

① CUPSログ確認

/var/log/cups/error_log または syslog

② CUPS状態確認

lpstat -t

③ デバイス確認

lpinfo -v

④ 接続方式変更

  • IPP
  • LPD
  • socket (JetDirect)

よくある質問(FAQ)

CUPSでService Unavailableが出る原因は?

多くの場合は以下のような原因が疑われます。

  • IPPサービス停止
  • セッションエラー
  • プリンターファームウェア

IPPとLPDどちらが良い?

一般的にはIPPのほうが新しく多機能なプロトコルです。
IPPは両面印刷、カラー印刷、用紙サイズ、用紙トレイの指定など、印刷ジョブの詳細を制御できます。
また、IPPは双方向通信のため、プリンターの状態も取得できますし、認証にも対応しています。

一方でLPDはRAWデータをプリンタに送り付けるだけのシンプルなプロトコルです。
プリンターの状態はデータを送った、印刷が終わったくらいしか分かりません。

CUPSはプリンターを管理するためにIPPを使用しているので、基本的にはIPPが推奨されます。

ですが、業務用途では LPDの方が安定するケースもあります。


まとめ

CUPSでIPPプリンターが突然印刷できなくなる場合、
接続方式をLPDに変更すると安定するケースがあります。

特に

  • 自動帳票印刷
  • バッチ処理
  • 業務システム

では 安定性重視の設計が重要です。

IPPで問題が発生した場合は、
LPD接続を試すことが有効なトラブルシュート方法になります。