CUPS/トラブルシューティング

提供: ArchWiki
2018年8月30日 (木) 00:46時点におけるKusakata.bot (トーク | 投稿記録)による版 (Pkg/AUR テンプレートの更新)
ナビゲーションに移動 検索に移動

関連記事

この記事では一般的な CUPS の問題と印刷ドライバーに関するトラブルシューティングを提供しています (プリンターの共有については取り扱っていません)。問題の原因を調べる方法や特定の問題を解決する方法があります。

目次

イントロダクション

印刷が機能しない時は /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 がどうやって動いているのか知るのが重要です:

  1. '印刷'が選択されると (ほとんどの) アプリケーションは .ps ファイル (PostScript、ページの見た目を記述するスクリプト言語) を CUPS に送信します。
  2. 次に CUPS はプリンターの PPD ファイル (プリンターの定義ファイル) を調べ、プリンターが理解する言語 (PJL, PCL など) に .ps ファイルを変換するにはどのフィルターが必要なのか目星をつけます (通常は GhostScript)。
  3. GhostScript が入力を受け取り、使用するフィルターを調べ、フィルターを適用して .ps ファイルをプリンターが理解するフォーマットに変換します。
  4. そして変換されたものはバックエンドに送信されます。例えば、プリンターが 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 に解決されるようにする必要があります。Avahi を使用している場合、Avahi のホストネーム解決が機能していることを確認してください。

もしくは、URI のホストネームをプリンターの実際の IP アドレスに置き換えてください。

PPD のバージョンが gutenprint と互換性がない

次を実行してください:

# /usr/bin/cups-genppdupdate

そして CUPS を再起動してください (このことは gutenprint のインストール後のメッセージでも指示されます)。

GTK3 アプリケーションの印刷ダイアログでプリンターが表示されない

GTK3 のバージョン 3.22.26 以前までは GTK3 の印刷ダイアログにプリンターを表示するには gtk3-print-backends パッケージが必要でした。インストールしていない場合 geditFirefox などのアプリケーションで印刷ができず、CUPS のウェブインターフェイスや lpstat ではプリンターが認識されるため、コマンドラインや GIMP などの GTK2 アプリケーションからは印刷できる状態でした。

バージョン 3.22.26 から gtk3 パッケージにバックエンドが統合されたためパッケージのインストールは不要になりました。

ネットワークの問題

Unable to locate printer

CUPS でネットワークプリンターが探知されるのに、何か印刷しようとすると "Unable to locate printer" エラーが表示されることがあります。Avahi の .local ホストネーム解決を有効にすることで問題は解決します。詳しくは CUPS#ネットワークを見てください。

ファイアウォールを使っている場合に問題が発生することもあります。ファイアウォールを無効化したり適切なルールを設定する必要がある場合があります。system-config-printer によるネットワークプリンターの検出は自動的に行われます。

古い 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。ポート番号は nmaptelnet your-printer-ip 9100 で確認できます。

ローカルでは共有プリンターが機能するのにリモートマシンから印刷できない

印刷ジョブがローカルマシンとリモートマシンの両方でフィルタを通して送信されているのが原因です。CUPS ページの警告を見てください。

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]

警告: cups バージョン 1.6.0 以上では、usblp カーネルモジュールをブラックリストに入れる必要はありません。ブラックリストに入れるしか解決方法がない場合は上流の CUPS バグトラッカーに報告してください。Till Kamppeter (Debian の CUPS メンテナ) と連絡がとれます。詳しくは [3] を参照。

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

USB 自動サスペンド

USB デバイスのドライバーが自動サスペンドをサポートしており、デバイスが使われていない場合、Linux カーネルは自動的にデバイスをサスペンド状態にします。自動サスペンドは電力を節約することができますが、一部の USB プリンターはカーネルが USB ポートをサスペンドしたときに切断されたと認識して、印刷を停止してしまいます。デバイスの自動サスペンドを無効化することで問題を回避できます。詳しくは電源管理#USB の自動サスペンドを参照。

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"

"filter failed" エラーが発生する原因は様々です。CUPS のエラーログ (デフォルトでは /var/log/cups/error_log) にはどのフィルターがなぜ機能しなかったか記録されます。

Missing ghostscript

ghostscript パッケージをインストールしてください (/usr/lib/cups/filter/gstoraster を実行するのに ghostscript が必要です)。

foomatic-db がインストールされていない

foomatic-dbfoomatic-db-ppds をインストールすることで解決する場合があります。

パーミッションに問題がある

プリンターの 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 サービスを起動・有効化・再起動してください。

プラグインのバージョンが古い

プラグインのバージョンが古い場合も同じエラーが発生します。ログに Plugin error とメッセージが表示されることもあります。hplip-pluginAUR をインストールしている場合、パッケージを更新してください。もしくは hp-setup -i を実行してプラグインの最新版をインストールしてください。

プリンターの設定が古い

hplip-pluginAUR v3.17.11 現在 hpijs はもはや存在しません。hpijs を使用するプリンターの場合、印刷に失敗するようになります。新しい hpcups ドライバーが使われるように設定しなおしてください。

cups の error_log をチェックすることで問題を確認できます:

 $ cat /var/log/cups/error_log | grep hpijs 
...
D [09/Jan/2018:14:32:58 +0000] [Job 97] sh: hpijs: command not found
...

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.statechmod 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

パーミッションの問題

ユーザーを lpsys グループに追加してください。

仮想 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 のグラフィカルモードで PPD ファイルを選択したときに、フィールドが更新されずエラーメッセージが表示されないことがあります。

また、インタラクティブ (コンソール) モードの場合、ppd ファイルのパスを正しく指定しているのに以下のように表示されることがあります:

Please enter the full filesystem path to the PPD file to use (q=quit) :/usr/share/ppd/HP/hp-deskjet_2050_j510_series.ppd.gz
Traceback (most recent call last):
  File "/usr/bin/hp-setup", line 536, in <module>
    desc = nickname_pat.search(nickname).group(1)
TypeError: cannot use a string pattern on a bytes-like object

hp-setup を実行する前に CUPS をインストール・起動することで解決できます。

hp-setup: "Qt/PyQt 4 initialization failed"

hplip の任意の依存パッケージである python-pyqt4AURインストールしてください。もしくは、-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 からまた使えるようになります。

ノート: サードパーティ製のインクカートリッジを使っている場合、プリンターによって示されるインク残量が正確ではないことがあります。サードパーティ製のインクを使っていてプリンターが問題なく動作していたのに、"Rendering completed" 状態で動かなくなった場合は、インクが残っていると表示されていたとしてもまずインクカートリッジを交換してみてください。

パーミッションの問題

cups 2.0.0-2 以前では、Group ディレクティブで設定されるグループが /etc/cups/cups-files.confSystemGroup ディレクティブにも記載されていた場合、cupsdnobody グループでヘルパープログラムを起動します。しかしながら、ヘルパーはプリンターデバイスに書き込みを行う必要があり、プリンターを作成するユーザーは 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

Foomatic ドライバーを削除するか、CUPS/プリンター別の問題#HPLIP ドライバーに書かれている解決方法を見て下さい。

lp: Error - Scheduler Not Responding

このエラーが表示される場合、CUPS が起動していること、環境変数 CUPS_SERVER が設定されていないこと、/etc/cups/client.conf に問題がないことを確認してください。

"Using invalid Host" エラーメッセージ

/etc/cups/cupsd.confServerAlias * を追加してみてください。

LibreOffice から印刷できない

CUPS ウェブインターフェイスからテストページが印刷できるのに LibreOffice から印刷できない場合、a2ps パッケージをインストールしてみてください。

プリンターの出力がずれる

CUPS で設定された用紙サイズが間違っていることが原因です。

問題が発生してプリンターが動作しなくなる

印刷中に問題が発生すると、CUPS でプリンターが反応しなくなることがあります。lpq はプリンターが is not ready だと報告します。cupsenable でプリンターを再度有効化できます。CUPS のウェブインターフェイスでは、プリンターが Paused の場合にプリンターを復帰することで再有効化することが可能です。

CUPS によるプリンターの有効化を自動化するには、ErrorPolicy をデフォルトの stop-printer から retry-this-job に変更してください。

Samsung: URF ERROR - Incomplete Session by time out

IPP を使ってネットワーク経由でファイルを Samsung プリンターで印刷しようとしたときに発生するエラーで、samsung-unified-driverAUR パッケージを使うことで解決します。

ノート: エラーコードの 11-1112 はプリンターの内部接続の問題に対応しているため、Samsung の技術サポートに連絡しても無駄です。

Brother: プリンターがコピーを何枚も印刷する

ときどきプリンターがドキュメントのコピーを複数枚印刷してしまうことがあります (例えば MFC-9330CDW は10枚コピーします)。プリンターのファームウェアを更新することで解決します。

通常ユーザーでプリンターのプロパティを変更したり特定のジョブを削除できない

通常ユーザーでプリンターのプロパティを変更したりプリンターのキューを管理するには、ユーザーを sys グループに追加する必要があります。