CUPS/トラブルシューティング
関連記事
この記事では一般的な CUPS の問題と印刷ドライバーに関するトラブルシューティングを提供しています (プリンターの共有については取り扱っていません)。問題の原因を調べる方法や特定の問題を解決する方法があります。
目次
- 1 イントロダクション
- 2 アップグレードによる問題
- 3 ネットワークの問題
- 4 USB プリンター
- 5 HP の問題
- 5.1 CUPS: "/usr/lib/cups/backend/hp failed"
- 5.2 ジョブが完了したと言ってるのにプリンターが何もしない
- 5.3 CUPS: '"foomatic-rip" not available/stopped with status 3'
- 5.4 CUPS: "Filter failed"
- 5.5 HP LaserJet で CUPS が空のページまたはエラーメッセージしか印刷しない
- 5.6 HPLIP 3.13: プラグインをインストールしたのに HP Device Manager から認識されない
- 5.7 hp-toolbox: "Unable to communicate with device"
- 5.8 hp-setup が PPD ファイルの指定を要求する
- 5.9 hp-setup: "Qt/PyQt 4 initialization failed"
- 5.10 hp-setup: 自動的にプリンターが検出されるがテストページを印刷しようとすると "Unable to communicate with device"
- 6 その他
- 6.1 プリンターが "Rendering completed" 状態で止まってしまう
- 6.2 unauthorised エラーで印刷が失敗する
- 6.3 Unknown supported format: application/postscript
- 6.4 Print-Job client-error-document-format-not-supported
- 6.5 Unable to get list of printer drivers
- 6.6 lp: Error - Scheduler Not Responding
- 6.7 "Using invalid Host" エラーメッセージ
- 6.8 LibreOffice から印刷できない
- 6.9 プリンターの出力がずれる
- 6.10 問題が発生してプリンターが動作しなくなる
イントロダクション
印刷が機能しない時は /etc/cups/cupsd.conf
の 'LogLevel' を次のように設定して:
LogLevel debug
次のコマンドで /var/log/cups/error_log
からの出力を表示してください:
# tail -n 100 -f /var/log/cups/error_log
出力の左端の文字の意味は:
- D=デバッグ (Debug)
- E=エラー (Error)
- I=情報 (Information)
- など
以下のファイルも有用です:
/var/log/cups/page_log
- 印刷が成功する度に新しいエントリを表示します/var/log/cups/access_log
- cupsd http1.1 サーバー活動全てを表示します
勿論、問題を解決するには CUPS がどうやって動いているのか知るのが重要です:
- '印刷'が選択されると (ほとんどの) アプリケーションは .ps ファイル (PostScript、ページの見た目を記述するスクリプト言語) を CUPS に送信します。
- 次に CUPS はプリンターの PPD ファイル (プリンターの定義ファイル) を調べ、プリンターが理解する言語 (PJL, PCL など) に .ps ファイルを変換するにはどのフィルターが必要なのか目星をつけます (通常は GhostScript)。
- GhostScript が入力を受け取り、使用するフィルターを調べ、フィルターを適用して .ps ファイルをプリンターが理解するフォーマットに変換します。
- そして変換されたものはバックエンドに送信されます。例えば、プリンターが USB ポートに接続されている場合は、USB バックエンドが使われます。
文章を印刷して error_log
を見れば印刷プロセスのさらに詳しいイメージがわかります。
アップグレードによる問題
CUPS や関連プログラムのパッケージのバージョンが上がった後に起こる問題
CUPS が動作しなくなった
おそらく新しいバージョンを正しく動作させるために新しい設定ファイルが必要になっています。例えば、localhost:631 から CUPS を管理しようとすると "404 - page not found" のようなメッセージが表示されます。
新しい設定を使うには、/etc/cups/cupsd.conf.default
を /etc/cups/cupsd.conf
にコピーして (必要なら古い設定をバックアップしてください) から CUPS を再起動して新しい設定を適用してください。
全てのジョブが"停止"になる
プリンターに送ったジョブが全て"停止"になる場合は、プリンターを削除してからもう一度追加してください。 CUPS のウェブインターフェイス を使って、Printers > Delete Printer に行って下さい。
プリンターの設定を確認するには Printers から Modify Printer に行って下さい。表示された情報をコピーして、次のページに進むには 'Modify Printer' をクリックしてください。
全てのジョブが"プリンターが応答していません"になる
ネットワークプリンターを使っている場合、CUPS が CUPS が接続 URI に使っている名前が DNS によってプリンターの IP を解決しているか確認してください。例えばプリンターの接続が次のようになっている場合:
lpd://BRN_020554/BINARY_P1
ホスト名 'BRN_020554' が CUPS を動かしているサーバーからプリンターの IP に解決されるようにする必要があります。
PPD のバージョンが gutenprint と互換性がない
次を実行してください:
# /usr/bin/cups-genppdupdate
そして CUPS を再起動してください (このことは gutenprint のインストール後のメッセージでも指示されます)。
ネットワークの問題
Unable to locate printer
CUPS でネットワークプリンターが探知されるのに、何か印刷しようとすると "Unable to locate printer" エラーが表示されることがあります。Avahi の .local ホストネーム解決を有効にすることで問題は解決します。詳しくは CUPS#ネットワークを見てください。
古い CUPS サーバー
CUPS バージョン 1.6 から、クライアントはデフォルトで IPP 2.0 を使用します。CUPS 1.5 / IPP 1.1 以下を使っている場合、クライアントのプロトコルは自動的にダウングレードされないため、サーバーと接続ができません。URL に version=1.1
オプションを追加することで解決します [1]。
CUPS によってプリンターが認識されるのに接続できない
デバッグログを有効にしてください。Executing backend "/usr/lib/cups/backend/dnssd"...
と何度も表示されるときはプリンター設定の dnssd を socket に変更してください。
例: socket://192.168.11.6:9100
。ポート番号は nmap や telnet your-printer-ip 9100
で確認できます。
USB プリンター
SANE と衝突する
Sane も実行している場合、CUPS に干渉する可能性があります。解決するには Udev ルールを作成して libsane でデバイスをマッチさせてください:
/etc/udev/rules.d/99-printer.rules
ATTRS{idVendor}=="vendor id", ATTRS{idProduct}=="product id", MODE="0664", GROUP="lp", ENV{libsane_matched}="yes"
usblp と衝突する
USB プリンターにアクセスする方法は2つあります: usblp カーネルモジュールと libusb です。前者は古い方法です。シンプルなシリアルデータストリームとしてデバイスファイルにデータを書き込むことでプリンターにデータを送信します。同一デバイスファイルを読み込むことで双方向アクセスが可能です。インク残量やプリンターの状態を読み込むことができます (PJL)。シンプルなプリンターでは上手く動作しますが、マルチプリンター (プリンター/スキャナ) では役不足で HP などのメーカーは独自のバックエンドを提供しています。ソース: [2]。
USB プリンターが動作しない場合、usblp
カーネルモジュールをブラックリスト化することで解決することがあります:
/etc/modprobe.d/blacklistusblp.conf
blacklist usblp
カスタムカーネルを使っている場合は手動で usbcore
カーネルモジュールをロードする必要があります。
モジュールをロードしたら、プリンターを接続して、以下のコマンドを実行してカーネルによってプリンターが認識されていることを確認してください:
# journalctl -e
または:
# dmesg
usblp
を使用している場合、以下のように出力されていればプリンターが認識されています:
Feb 19 20:17:11 kernel: printer.c: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x04E8 pid 0x300E Feb 19 20:17:11 kernel: usb.c: usblp driver claimed interface cfef3920 Feb 19 20:17:11 kernel: printer.c: v0.13: USB Printer Device Class driver
usblp
をブラックリスト化している場合、以下のように表示されます:
usb 3-2: new full speed USB device using uhci_hcd and address 3 usb 3-2: configuration #1 chosen from 1 choice
HP の問題
CUPS/プリンター別の問題#HP も参照。
CUPS: "/usr/lib/cups/backend/hp failed"
D-Bus がインストール・起動されていることを確認してください。エラーが消えない場合、Avahi を起動してみてください。
http:// プロトコルを使用してネットワークプリンターとしてプリンターを追加してみてください。
ジョブが完了したと言ってるのにプリンターが何もしない
古い hpijs ドライバーを選択している場合に HP のプリンターで発生する問題です (例: Deskjet D1600 シリーズ)。代わりに hpcups ドライバーを使ってください。
一部の HP 製のプリンターでは、プリンターを起動するたびにコンピュータからファームウェアをダウンロードさせる必要があります。udev に問題があってファームウェアのダウンロードが実行されないときも、この問題が発生します。手動でファームウェアをプリンターにダウンロードすることで解決します。プリンターが接続・起動されていることを確認してから次のコマンドを実行:
# hp-firmware -n
CUPS: '"foomatic-rip" not available/stopped with status 3'
HP プリンターを使っている場合に /var/log/cups/error_log
に以下のエラーメッセージが出力される場合、プリンターの状態が 'stopped' に設定されて完了されずに新しいジョブが処理されてしまっています:
Filter "foomatic-rip" for printer printer_name not available: No such file or director
または:
PID pid (/usr/lib/cups/filter/foomatic-rip) stopped with status 3!
hplip がインストールされていることを確認してください。
CUPS: "Filter failed"
パーミッションに問題がある
プリンターの USB ポートのパーミッションを変更してください:
lsusb
コマンドでバスとデバイスの番号を取得:
$ lsusb
Bus <BUSID> Device <DEVID>: ID <PRINTERID>:<VENDOR> Hewlett-Packard DeskJet D1360
得られた情報を利用してパーミッションを設定:
# chmod 0666 /dev/bus/usb/<BUSID>/<DEVID>
パーミッションの変更を永続化するため、コンピューターが起動する度に自動的に変更されるようにするには、以下の行を追加してください。
/etc/udev/rules.d/10-local.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="<VENDOR>", ATTRS{idProduct}=="<PRINTERID>", GROUP="lp", MODE:="666"
システムによって変わるので、udev#デバイスの属性を一覧する のページを見て下さい。
Avahi が有効になってない
avahi-daemon
サービスを起動・有効化・再起動してください。
プラグインのバージョンが古い
プラグインのバージョンが古い場合も同じエラーが発生します。hplip-pluginAUR をインストールしている場合、パッケージを更新してください。
HP LaserJet で CUPS が空のページまたはエラーメッセージしか印刷しない
HP LaserJet (例: 3380) で画像を印刷しようとすると CUPS が機能しないバグが存在します。Ubuntu によって報告され修正されています。最初のページは空で、2ページ目からは以下のエラーメッセージが印刷される場合:
ERROR: invalidaccess OFFENDING COMMAND: filter STACK: /SubFileDecode endstream ...
この問題を修正するには root で以下のコマンドを実行します:
# lpadmin -p printer -o pdftops-renderer-default=pdftops
HPLIP 3.13: プラグインをインストールしたのに HP Device Manager から認識されない
/var/lib/hp/hplip.state
のパーミッションが変更されてしまっていることが原因です。問題を解決するには、chmod 644 /var/lib/hp/hplip.state
と chmod 755 /var/lib/hp
を実行してください。詳しくは [4] を参照。
hp-toolbox: "Unable to communicate with device"
# hp-toolbox # error: Unable to communicate with device (code=12): hp:/usb/printer id
パーミッションの問題
ユーザーを lp
と sys
グループに追加してください。
仮想 CDROM プリンター
MS Windows ドライバー向けに仮想の CD-ROM ドライブを用意する P1102 などのプリンターなどでも発生します。lp dev が現れたり消えたりします。その場合、usb_modeswitch パッケージをインストールして "Smart Drive" をオフにしてください (パッケージに udev ルールが含まれています)。
ネットワークプリンター
avahi-daemon が動作していないときに動的ホストネームを使用するネットワークプリンターを使ったときも同じ問題が置きます。DHCP によってプリンターの IP アドレスが変更されて hp-setup がプリンターを見つけられない可能性もあります。その場合、DHCP サーバーの設定でプリンターの DHCP 予約を追加してください。
hp-setup が PPD ファイルの指定を要求する
hp-setup を実行する前に CUPS をインストール・起動してください。
hp-setup: "Qt/PyQt 4 initialization failed"
hplip の任意の依存パッケージである python-pyqt4 をインストールしてください。もしくは、-i
フラグを使ってコマンドラインインターフェースで hp-setup を起動してください。
hp-setup: 自動的にプリンターが検出されるがテストページを印刷しようとすると "Unable to communicate with device"
ローカルネットワーク接続で HP Officejet 6500A と hplip 3.13.5-2 を使用すると発生します。問題を解決するには、HP プリンターの IP アドレスを hp-setup に指定してください。
その他
プリンターが "Rendering completed" 状態で止まってしまう
インク残量
インクの残量が少なくなると、"Rendering completed" 状態でプリンターが止まってしまうことがあります。また、ネットワークプリンターの場合、それによってネットワークに正しく接続されているのにもかかわらず、CUPS からプリンターが制御できなくなっているのかもしれません。この場合、インクカートリッジを交換することでプリンターは "Ready" 状態に戻り、ネットワークプリンターならば、プリンターが CUPS からまた使えるようになります。
パーミッションの問題
cups 2.0.0-2 以前では、Group
ディレクティブで設定されるグループが /etc/cups/cups-files.conf
の SystemGroup
ディレクティブにも記載されていた場合、cupsd
は nobody
グループでヘルパープログラムを起動します。しかしながら、ヘルパーはプリンターデバイスに書き込みを行う必要があり、プリンターを作成するユーザーは root
でグループは lp
であるため、nobody
グループだと書き込みが行えずに印刷キューが "Paused" または "Stopped" になってしまいます。
この問題を解決するには、Group
ディレクティブを lp
に設定して、SystemGroup
ディレクティブに lp
が含まれていないことを確認してください。
Arch では [5] で修正されました。
unauthorised エラーで印刷が失敗する
リモートプリンターが認証を要求した場合、CUPS は自動的に /etc/cups/printers.conf
のプリンターに AuthInfoRequired
ディレクティブを追加します。しかし、一部のグラフィカルアプリケーション (例えば LibreOffice [6]) にはログイン情報を要求する方法がないため、印刷ができなくなります。この問題を修正するには URI にユーザー名とパスワードを記入してください。[7] や [8] を参照。
Unknown supported format: application/postscript
/etc/cups/mime.convs
にある次の行をコメントアウトしてください:
application/octet-stream application/vnd.cups-raw 0 -
そして /etc/cups/mime.types
に以下を追加してください:
application/octet-stream
Print-Job client-error-document-format-not-supported
foomatic パッケージをインストールして foomatic ドライバーを使ってみて下さい。
Unable to get list of printer drivers
/etc/cups/client.conf
のServerName
に http:// が付いていないか確認してください:
ServerName localhost:631
- Foomatic ドライバーを削除するか、CUPS/プリンター別の問題#HPLIP ドライバーに書かれている解決方法を見て下さい。
lp: Error - Scheduler Not Responding
このエラーが表示される場合、CUPS が起動していること、環境変数 CUPS_SERVER
が設定されていないこと、/etc/cups/client.conf
に問題がないことを確認してください。
"Using invalid Host" エラーメッセージ
/etc/cups/cupsd.conf
に ServerAlias *
を追加してみてください。
LibreOffice から印刷できない
CUPS ウェブインターフェイスからテストページが印刷できるのに LibreOffice から印刷できない場合、a2ps パッケージをインストールしてみてください。
プリンターの出力がずれる
CUPS で設定された用紙サイズが間違っていることが原因です。
問題が発生してプリンターが動作しなくなる
印刷中に問題が発生すると、CUPS でプリンターが反応しなくなることがあります。lpq
はプリンターが is not ready
だと報告します。cupsenable
でプリンターを再度有効化できます。CUPS によるプリンターの有効化を自動化するには、ErrorPolicy をデフォルトの stop-printer
から retry-current-job
に変更してください。