概要
Linuxで CUPS (Common Unix Printing System) を使用してプリンターを設定した際、
IPP (Internet Printing Protocol) を使用すると突然印刷できなくなる問題が発生しました。
CUPSのログを確認すると Service Unavailable が記録されており、プリンターを再起動すると一時的に復旧しますが、しばらくすると再発します。
最終的には IPPではなくLPDで登録し直すことで安定動作しました。
この記事では以下を解説します。
- CUPSでIPP印刷が失敗する症状
- ログの確認方法
- トラブルシュート手順
- LPDへ変更する回避策
環境
| OS | Linux |
| 印刷システム | 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接続を試すことが有効なトラブルシュート方法になります。