CUPS/トラブルシューティング
この記事では一般的な CUPS の問題と印刷ドライバーに関するトラブルシューティングを提供しています (プリンターの共有については取り扱っていません)。問題の原因を調べる方法や特定の問題を解決する方法があります。
目次
- 1 イントロダクション
- 2 アップグレードによる問題
- 3 ネットワークの問題
- 4 HP のプリンター
- 4.1 HPLIP プリンターが "/usr/lib/cups/backend/hp failed" エラーを送る
- 4.2 HPLIP プリンターはジョブが完了したと言ってるのにプリンターが何もしない
- 4.3 hp-setup が見つかったプリンターの PPD ファイルを指定するように要求する
- 4.4 Qt をインストールしたのに、hp-setup が "Qt/PyQt 4 initialization failed" と表示する
- 4.5 hp-setup でプリンターが自動的に見つかったがテストページを印刷しようとするとすぐ "Unable to communicate with device" と表示する
- 4.6 hp-toolbox がエラーを送信する, "Unable to communicate with device"
- 4.7 HP プリンターで CUPS が '"foomatic-rip" not available/stopped with status 3' と返す
- 4.8 HPLIP 3.13: Plugin is installed, but HP Device Manager complains it is not
- 4.9 プリンターが印刷をせず CUP ウェブインターフェイスには "Filter failed" メッセージが残る (HP プリンター)
- 4.10 HP LaserJet で CUPS が空のページまたはエラーメッセージしか印刷しない
- 5 その他
- 5.1 プリンターが "Rendering completed" 状態で止まってしまう
- 5.2 CUPS のパーミッションエラー
- 5.3 unauthorised エラーで印刷が失敗する
- 5.4 Unknown supported format: application/postscript
- 5.5 Print-Job client-error-document-format-not-supported
- 5.6 Unable to get list of printer drivers
- 5.7 lp: Error - Scheduler Not Responding
- 5.8 "Using invalid Host" エラーメッセージ
- 5.9 プリンターが CUPS から認識されない
- 5.10 Can't load /etc/samba/smb.conf
- 5.11 CUPS の systemd サービスが有効になっているのに起動しない
- 5.12 プリンターを追加するときに "Forbidden" エラーが発生する
- 5.13 LibreOffice から印刷できない
イントロダクション
印刷が機能しない時は /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 のインストール後のメッセージでも指示されます)。
ネットワークの問題
CUPS によってプリンターが認識されるのに接続できない
デバッグログを有効にしてください。Executing backend "/usr/lib/cups/backend/dnssd"...
と何度も表示されるときはプリンター設定の dnssd を socket に変更してください。
例: socket://192.168.11.6:9100
。ポート番号は nmap や telnet your-printer-ip 9100
で確認できます。
Windows 印刷サーバーの URI
ときどき Windows では実際のデバイスの URI (デバイスの場所) がよくわからない場合があります。CUPS で適切なデバイスの場所を指定するのに困ったときは、次のコマンドを実行して特定の windows のユーザー名で利用できる共有を全て表示してみてください:
$ smbtree -U windowsusername
This will list every share available to a certain Windows username on the local area network subnet, as long as Samba is set up and running properly. It should return something like this:
WORKGROUP \\REGULATOR-PC \\REGULATOR-PC\Z \\REGULATOR-PC\Public \\REGULATOR-PC\print$ Printer Drivers \\REGULATOR-PC\G \\REGULATOR-PC\EPSON Stylus CX8400 Series EPSON Stylus CX8400 Series
What is needed here is first part of the last line, the resource matching the printer description. So to print to the EPSON Stylus printer, one would enter:
smb://username.password@REGULATOR-PC/EPSON Stylus CX8400 Series
as the URI into CUPS. Notice that whitespaces are allowed in URIs, whereas backslashes get replaced with forward slashes. If it won't work try '%20' instead of spaces.
HP のプリンター
HPLIP プリンターが "/usr/lib/cups/backend/hp failed" エラーを送る
Make sure dbus is installed and running. If the error persists, try starting avahi-daemon.
Try adding the printer as a Network Printer using the http:// protocol. Generate the printer URI with hp-makeuri
.
HPLIP プリンターはジョブが完了したと言ってるのにプリンターが何もしない
This happens on HP printers when you select the (old) hpijs driver (e.g. the Deskjet D1600 series). Instead, use the hpcups driver when adding the printer.
Some HP printers (e.g HP LaserJet) require their firmware to be downloaded from the computer every time the printer is switched on. If there is an issue with udev (or equivalent) and the firmware download rule is never fired, you may experience this issue. As a workaround, you can manually download the firmware to the printer. Ensure the printer is plugged in and switched on, then enter
hp-firmware -n
hp-setup が見つかったプリンターの PPD ファイルを指定するように要求する
hp-setup を実行する前に CUPS をインストールしてください。
Qt をインストールしたのに、hp-setup が "Qt/PyQt 4 initialization failed" と表示する
"hp-check -t" won't give you useful information to find the required package. You have to install all the "Dependent Packages" prefixed with "python2" in https://www.archlinux.org/packages/extra/x86_64/hplip/
hp-setup でプリンターが自動的に見つかったがテストページを印刷しようとするとすぐ "Unable to communicate with device" と表示する
This at least happens to hplip 3.13.5-2 for HP Officejet 6500A through local network connection. To solve the problem, specify the IP address of the HP printer for hp-setup to locate the printer.
hp-toolbox がエラーを送信する, "Unable to communicate with device"
hp-toolbox を通常のユーザーとして実行すると以下のようなメッセージが表示される場合:
# hp-toolbox # error: Unable to communicate with device (code=12): hp:/usb/printer id
おそらくユーザーを lp と sys グループに追加する必要があります。
この問題は MS Windows のドライバーのために仮想 CD-ROM ドライブを持っている P1102 などのプリンターでも発生します。lp dev が現れたり消えたりします。そのようなときは、usb_modeswitch パッケージを試して下さい。"Smart Drive" がオフになります (パッケージに udev ルールが含まれています)。
ネットワークプリンターで avahi-daemon が動作していないときにもこのエラーが起こることがあります。また、プリンターの IP アドレスが DHCP によって変更されたために、hp-setup で設定したプリンターの IP アドレスでプリンターが見つからないという可能性もあります。この場合、DHCP サーバーの設定で DHCP の予約をプリンターに追加してください。
HP プリンターで CUPS が '"foomatic-rip" not available/stopped with status 3' と返す
If receiving any of the following error messages in /var/log/cups/error_log
while using a HP printer, with jobs appearing to be processed while they all end up not being completed with their status set to 'stopped':
Filter "foomatic-rip" for printer printer_name not available: No such file or director
or:
PID 5771 (/usr/lib/cups/filter/foomatic-rip) stopped with status 3!
make sure hplip has been installed, in addition to the packages mentioned above. See this forum post for more information.
HPLIP 3.13: Plugin is installed, but HP Device Manager complains it is not
The issue might have to do with the file permission change that had been made to /var/lib/hp/hplip.state
. To correct the issue, a simple chmod 644 /var/lib/hp/hplip.state
and chmod 755 /var/lib/hp
should be sufficient. For further information, please read this link.
プリンターが印刷をせず CUP ウェブインターフェイスには "Filter failed" メッセージが残る (HP プリンター)
パーミッションに問題がある
プリンターの 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
サービスを起動・有効化・再起動してください。
HP LaserJet で CUPS が空のページまたはエラーメッセージしか印刷しない
There is a bug that causes CUPS to fail when printing images on HP LaserJet (in my case 3380). The bug has been reported and fixed by Ubuntu. The first page is empty, the second page contains the following error message:
ERROR: invalidaccess OFFENDING COMMAND: filter STACK: /SubFileDecode endstream ...
この問題を修正するには、root で以下のコマンドを実行します:
# lpadmin -p printer -o pdftops-renderer-default=pdftops
その他
プリンターが "Rendering completed" 状態で止まってしまう
インクの残量が少なくなると、"Rendering completed" 状態でプリンターが止まってしまうことがあります。また、ネットワークプリンターの場合、それによってネットワークに正しく接続されているのにもかかわらず、CUPS からプリンターが制御できなくなっているのかもしれません。この場合、インクカートリッジを交換することでプリンターは "Ready" 状態に戻り、ネットワークプリンターならば、プリンターが CUPS からまた使えるようになります。
インクがなくなっているのが原因ではないときは /etc/cups
と /var/log/cups
の "Group ID" を確認してください。"root" 権限がある場合は、/var/spool/cups
も確認します。ファイルには GID lp
がなくてはなりません。ファイルに GID nobody
が書かれている場合は、/etc/cups/cups-files.conf
ファイルの "Group" と "SystemGroup" ディレクティブのグループを確認してください。通常は Group lp
と SystemGroup lpadmin sys root
になっています。"Group" に書かれているグループが "SystemGroup" の方には入ってないことになってないかチェックしてください。特に、lp
が "Group" ディレクティブにはあるのに、"SystemGroup" ディレクティブの方では載っていないか確認してください。これは昔に CUPS と KDE の wiki ページで推奨されていたのと逆です。"SystemGroup" ディレクティブに lp
を追加していたときは、"SystemGroup" から lp
を削除するか、次のコマンドを実行して "SystemGroup" ディレクティブの lp
を lpadmin
に変更してください:
# groupadd -g107 lpadmin
GID 問題の説明
For security reasons, cupsd
does not allow external CUPS helper programs, which are run with the GID selected with the "Group" directive, to run with any GID of the administrative groups, which are those GIDs listed in the "SystemGroup" directive. If the named group in the Group directive is also in the SystemGroup directive, then cupsd
will instead run the helper programs with GID nobody
, without warning. Note that the printer devices in /dev/
, for instance /dev/parport0
, are created with user root
and group lp
. When cupsd
then tries to print, it "pauses" or "stops" because it does not have permission to write the printer device file, and does not provide any useful error message. The printer device files can be made "world writable" to bypass the problem, but that is insecure and is not the proper solution.
As of CUPS version 2.0.0-2, if the group in the Group directive is also in the SystemGroup directive, cupsd
will exit immediately after starting, and, at a log level of "notice" or higher, will log an error message to the default error log, but not to the system log.
/var/log/cups/error_log
Group and SystemGroup cannot use the same groups.
This solves the problem of cupsd
running in a non-functional state and failing to print without explanation.
At the default log level of "warn", no group collision error message is logged. To see this error message, increase the log level to "notice", "info", "debug", or "debug2".
/etc/cups/cupsd.conf
LogLevel notice
Error messages can be sent to the systemd-journald log instead of to the default /var/log/cups/error_log
, but not to both, by explicitly setting the ErrorLog directive.
/etc/cups/cups-files.conf
ErrorLog syslog
Currently, even then, the command systemctl status org.cups.cupsd.service
will not properly display the final group collision error message, but the error message can still be seen in the journal, with for instance, sudo journalctl -f
.
CUPS のパーミッションエラー
以下のようなパスを使うことで 'NT_STATUS_ACCESS_DENIED' (Windows クライアント) エラーを回避できることがあります:
smb://workgroup/username:password@hostname/printer_name
unauthorised エラーで印刷が失敗する
If the user has been added to the lp group, and allowed to print (set in cupsd.conf
), then the problem lies in /etc/cups/printers.conf
. This line could be the culprit:
AuthInfoRequired negotiate
Comment it out and restart CUPS.
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#HP プリンター に書かれている解決方法を見て下さい。
lp: Error - Scheduler Not Responding
次のコマンドを使って文章を印刷する際にこのエラーが表示される場合:
$ lp document-to-print
CUPS_SERVER
環境変数を設定してみてください:
$ export CUPS_SERVER=localhost
これで問題が解決するときは、~/.bash_profile
に上記の行を追加することで永続化できます。
"Using invalid Host" エラーメッセージ
/etc/cups/cupsd.conf
に ServerAlias *
を追加してみてください。
プリンターが CUPS から認識されない
CUPS のウェブインターフェイスの "Add Printers" ページにプリンターが表示されなかったり、lpinfo -v
で確認できない場合、以下を試してみて下さい (このスレッド を参照):
- ブラックリストから
usblp
を削除 usblp
モジュールをロード
# modprobe usblp
- CUPS を停止
- 以下の udev ルールを追加:
/etc/udev/rules.d/10-cups_device_link.rules
KERNEL=="lp[0-9]", SYMLINK+="%k", GROUP="lp"
- udev ルールをリロード:
# udevadm control --reload-rules
- プリンターの接続を一度抜いてから再接続
- 数秒待ってから CUPS サービスを起動
SANE と衝突する
Sane も使っている場合、CUPS と衝突している可能性があります。
修正するには以下のファイルを作成してください:
/etc/udev/rules.d/99-printer.rules
# idProduct and idVendor needs to match your printer ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="341b", MODE="0664", GROUP="lp", ENV{libsane_matched}="yes"
Can't load /etc/samba/smb.conf
SMB 上のリモートプリンターに印刷しようとすると "Can't load /etc/samba/smb.conf - run testparm to debug it" というエラーメッセージが表示される場合、空の /etc/samba/smb.conf
ファイルを作成してください:
# mkdir /etc/samba # touch /etc/samba/smb.conf
そして cupsd を再起動してください。
CUPS の systemd サービスが有効になっているのに起動しない
CUPS によって提供されている systemd の .service ファイルはソケットアクティベーションを使用しており、アプリケーションが CUPS のソケットに接続したときに初めてサービスが起動するようになっています。しかしながら、CUPS によって提供されている systemd の .socket ファイルはローカルの /run/cups/cups.sock
ソケットでしか動作しません。
ネットワーク上に印刷ジョブが開始されたときに CUPS が起動するようにするには、以下のファイルを作成します:
/etc/systemd/system/org.cups.cupsd.socket
.include /usr/lib/systemd/system/org.cups.cupsd.socket [Socket] ListenDatagram=0.0.0.0:631
そして systemd をリロードします:
# systemctl --system daemon-reload
ちゃんと全てが動作するか確認してください:
# systemctl is-enabled org.cups.cupsd.service || systemctl enable org.cups.cupsd.service # systemctl status org.cups.cupsd.socket org.cups.cupsd.socket - CUPS Printing Service Sockets Loaded: loaded (/etc/systemd/system/org.cups.cupsd.socket; enabled) Active: inactive (dead) Listen: /run/cups/cups.sock (Stream) 0.0.0.0:631 (Stream) 0.0.0.0:631 (Datagram)
これでローカルでもネットワークごしでも印刷がされると CUPS が自動的に起動するはずです。
プリンターを追加するときに "Forbidden" エラーが発生する
If adding a printer through the web interface returns an error: Forbidden, the most likely reason is that the privileges are not set correctly. One way to fix it is to add the administering user to the group sys
. For example,
# usermod -a -G sys username
LibreOffice から印刷できない
CUPS のウェブインターフェイスからテストページの印刷はできるが、LibreOffice から印刷できないという場合、a2ps パッケージをインストールしてみてください。