CUPS 故障排除
本文涵盖了 CUPS 和打印驱动程序的所有非特定(即,与任何一台打印机无关)故障排除(但不包括与打印机共享相关的问题),包括确定问题确切性质的方法以及解决已识别问题的方法。
调试日志
让打印工作起来的最佳方法是在 /etc/cups/cupsd.conf
中将 LogLevel
设置为
LogLevel debug
然后像这样查看 /var/log/cups/error_log
的输出
# tail -n 100 -f /var/log/cups/error_log
输出左侧的字符代表
- D=调试
- E=错误
- I=信息
- 等等
这些文件也可能被证明是有用的
/var/log/cups/page_log
- 每次打印成功时都会回显一个新条目/var/log/cups/access_log
- 列出所有 cupsd http1.1 服务器活动
打印文档并观察 error_log
,以获得更详细和正确的打印过程图像。
升级导致的问题
CUPS 和相关程序包版本递增后出现的问题
CUPS 停止工作
可能是新版本需要新的配置文件才能正常工作。例如,尝试通过 localhost:631 管理 CUPS 可能会导致“404 - page not found”(404 - 页面未找到)等消息。
要使用新配置,请将 /etc/cups/cupsd.conf.default
复制到 /etc/cups/cupsd.conf
(如果需要,备份旧配置),然后重启 CUPS 以应用新设置。
所有作业都“已停止”
如果发送到打印机的所有作业都变为“已停止”,请首先检查 /var/log/cups/error_log
中的错误日志。如果它没有提供任何有用的提示来指示问题的根源,请删除打印机并重新添加。使用 CUPS Web 界面,转到 Printers > Delete Printer(打印机 > 删除打印机)。
要检查打印机的设置,请转到 Printers(打印机),然后转到 Modify Printer(修改打印机)。复制显示的信息,单击“Modify Printer”(修改打印机)以继续到下一页,依此类推。
所有作业都显示“打印机未响应”
对于网络打印机,您应该检查打印机的 URI 中的主机名是否通过 DNS 解析为打印机的 IP 地址,例如,如果您的打印机连接如下所示
lpd://BRN_020554/BINARY_P1
那么主机名“BRN_020554”需要从运行 CUPS 的服务器解析为打印机的 IP。如果正在使用 Avahi,请确保 Avahi 的主机名解析工作正常。
或者,将 URI 中使用的主机名替换为打印机的 IP 地址。
PPD 版本与 gutenprint 不兼容
运行
# /usr/bin/cups-genppdupdate
并重启 CUPS(如 gutenprint 的安装后消息中指出的那样)。
与 2.3.3 -> 2.4.0 升级相关的问题
CUPS 现在通过报告所需的属性和 DNS-SD TXT 记录键,正式支持 AirPrint 和 Mopria 客户端(包括 Windows 10)。它还包括对 huffy iOS 客户端的有限支持。以下新功能列表摘自 CUPS 发行说明
- 新的
ReadyPaperSizes
指令,用于指定每个打印机的“已加载”(就绪)介质;实际列表基于打印机支持的介质尺寸,并允许用户从简短列表中选择尺寸。默认列表基于区域设置(A4 等,但在北美使用 Letter 等) - 图像/urf 的正确 URF/urf-supported 值。
- 其他所需的属性/键。
作为新的就绪介质传播的副作用,IOS 客户端可能会显示错误的介质类型(例如,US letter 而不是 DIN/ISO A4)。获取 ISO 介质类型的最佳方法是在 /etc/cups/cupsd.conf
中将 DefaultPaperSize
设置为
DefaultPaperSize A4
对于 ISO。此外,应正确配置 系统默认纸张尺寸。
ReadyPaperSizes
)和 PPD 中的尺寸或 DefaultPaperSize
(如果尺寸都不匹配)中匹配。网络问题
无法添加打印机或显示消息“正在打印”,但没有任何反应
例如,在 GNOME 打印机设置中,您可能会发现添加打印机时遇到问题,即使您已安装驱动程序。您可以尝试安装 system-config-printer 并通过终端执行它,然后从那里添加打印机(例如,使用 LPD/LPR 队列“PASSTHRU”)。
无法找到打印机
即使 CUPS 可以检测到网络打印机,在尝试打印某些内容时,您仍然可能会遇到“Unable to locate printer”(无法找到打印机)错误。此问题的解决方案是启用 Avahi 的 .local 主机名解析。有关详细信息,请参阅 CUPS#网络。
当您有防火墙时,也可能出现此问题。您可能需要禁用防火墙或设置正确的规则。使用 system-config-printer 检测网络打印机将自动执行此操作。
同样,连接到 VPN 也可能导致 CUPS 无法找到打印机。临时禁用任何 VPN 连接进行打印可以帮助解决此问题。
旧的 CUPS 服务器
从 CUPS 版本 1.6 开始,客户端默认使用 IPP 2.0。如果服务器使用 CUPS <= 1.5 / IPP <= 1.1,则客户端不会自动降级协议,因此无法与服务器通信。一种解决方法是将 [1] 中记录的 version=1.1
选项附加到 URI。
无法找到 PPD 文件
/var/log/cups/error_log
Cannot connect to remote printer ipp://HP079676.local copy_model: empty PPD file
确保 Avahi 设置正确。特别是,确保安装了 nss-mdns 并在 /etc/nsswitch.conf
中设置。
查找 Windows 打印服务器的 URI
有时,Windows 在确切的设备 URI(设备位置)方面不太配合。如果在 CUPS 中指定正确的设备位置时遇到问题,请运行以下命令以列出特定 Windows 用户名可用的所有共享
$ smbtree -U windowsusername
只要 Samba 设置并运行正常,这将列出本地局域网子网上特定 Windows 用户名可用的每个共享。它应该返回类似这样的内容
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
这里需要的是最后一行的第一部分,即与打印机描述匹配的资源。因此,要打印到 EPSON Stylus 打印机,应输入
smb://username:password@REGULATOR-PC/EPSON%20Stylus%20CX8400%20Series
作为 URI 进入 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 打印机:usblp 内核模块和 libusb。前者是经典方法。它很简单:通过将数据写入设备文件作为简单的串行数据流,将数据发送到打印机。读取同一个设备文件允许双向访问,至少对于读取墨水液位、状态或打印机功能信息 (PJL) 等操作。它对于简单的打印机非常有效,但对于多功能设备(打印机/扫描仪),它不适用,HP 等制造商提供自己的后端。来源:此处[死链 2024-11-05 ⓘ]。
usblp
内核模块列入黑名单。如果您发现这是解决剩余问题的唯一方法,请向上游 CUPS 错误跟踪器报告此问题,也可能与 Till Kamppeter(Debian CUPS 维护者)联系。有关更多信息,请参阅 上游错误。如果您在使 USB 打印机工作时遇到问题,可以尝试将 usblp
内核模块 列入黑名单
/etc/modprobe.d/blacklistusblp.conf
blacklist usblp
自定义内核用户可能需要在继续之前手动加载 usbcore
内核模块。
安装模块后,运行
# journalctl -f
然后插入打印机并检查输出,查看是否检测到它。
如果您正在使用 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 自动挂起
当有驱动程序支持且设备未使用时,Linux 内核会自动挂起 USB 设备。这可以节省电量,但某些 USB 打印机认为当内核挂起 USB 端口时它们已断开连接,从而阻止打印。这可以通过禁用特定设备的自动挂起来解决,请参阅 电源管理#USB 自动挂起。
错误的权限
检查打印机 USB 设备的权限。从 lsusb
获取总线和设备号
$ lsusb
Bus <BUSID> Device <DEVID>: ID <VENDOR>:<PRINTERID> Hewlett-Packard DeskJet D1360
通过查看 devfs 检查所有权
# ls -l /dev/bus/usb/BUSID/DEVID
cups 守护程序以用户“cups”身份运行,并属于组“lp”,因此该用户或组需要对 USB 设备具有读写访问权限。如果您认为权限看起来不正确,可以临时更改组和权限
# chgrp lp /dev/bus/usb/BUSID/DEVID # chmod 664 /dev/bus/usb/BUSID/DEVID
然后检查 cups 现在是否可以正确看到 USB 设备。
要进行持久的权限更改,以便在每次连接 USB 设备时自动触发,请添加以下行
/etc/udev/rules.d/10-local.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="VENDOR", ATTRS{idProduct}=="PRINTERID", GROUP:="lp", MODE:="0664"
编辑后,使用以下命令重新加载 udev 规则
# udevadm control --reload-rules
每个系统可能有所不同,因此请查阅 udev#列出设备的属性 Wiki 页面。
HP 问题
CUPS:“/usr/lib/cups/backend/hp failed”
尝试使用 http:// 协议将打印机添加为网络打印机。
CUPS:作业显示已完成,但打印机无任何反应
当您选择(旧的)hpijs 驱动程序(例如,Deskjet D1600 系列)时,HP 打印机上会发生这种情况。请改用 hpcups 驱动程序。
某些 HP 打印机需要每次打开打印机时都从计算机下载固件。如果 udev(或等效项)存在问题,并且固件下载规则从未触发,您可能会遇到此问题。作为一种解决方法,您可以手动将固件下载到打印机。确保打印机已插入并已打开,然后运行
# hp-firmware -n
CUPS:“'foomatic-rip' 不可用/已停止,状态为 3”
如果在 /var/log/cups/error_log
中使用 HP 打印机时收到以下任何错误消息,并且作业似乎正在处理,但最终都未完成,其状态设置为“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!
CUPS:“Filter failed”(过滤器失败)
“filter failed”(过滤器失败)错误可能是由多种问题引起的。CUPS 错误日志(默认为 /var/log/cups/error_log
)应记录哪个过滤器失败以及原因。
缺少 ghostscript
安装 ghostscript(/usr/lib/cups/filter/gstoraster
需要它才能运行)。
缺少 foomatic-db
安装 foomatic-db 和 foomatic-db-ppds。这在某些情况下可以解决问题。
Avahi 未启用
插件过时
此错误也可能表明插件已过时(版本不匹配),并且可能在系统升级后发生,可能在日志中显示为 Plugin error
消息。如果您已安装 hplip-pluginAUR,您将需要更新软件包,否则重新运行 hp-setup -i
以安装最新版本的插件。
打印机配置过时
从 hplip-pluginAUR v3.17.11 开始,hpijs 不再可用。如果您有使用 hpijs 的打印机,它们将无法打印。您必须修改它们并选择新的 hpcups 驱动程序。
您可以查看 cups error_log 以检查是否是这种情况
$ grep hpijs /var/log/cups/error_log
... D [09/Jan/2018:14:32:58 +0000] [Job 97] sh: hpijs: command not found ...
客户端和主机都运行带有 hpcups 的 CUPS
当主机使用来自 hplip 的 hpcups 驱动程序共享物理连接的 HP 打印机,并且客户端通过 IPP 在其自己的 CUPS 服务器中添加共享打印机时,似乎会影响 CUPS,也使用 hpcups 驱动程序。在每次尝试从客户端打印页面时,客户端的作业页面无限期地返回“正在向打印机发送数据”,而主机的同一页面返回“Filter failed”(过滤器失败)。似乎作业在 CUPS 过滤器中运行两次:第一次在客户端,第二次在主机端,这导致它在主机端失败。从 Windows 客户端打印或直接在主机上打印时,不应观察到相同的错误。这里有一些解决方法(仅使用一种方法)
- 在客户端上使用 Generic IPP Everywhere Printer 驱动程序。在 CUPS Web 界面中选择驱动程序时,您应该在 Generic 制造商中找到它。
- 修改客户端上使用的 PPD,以便作业不通过客户端过滤器。在
/usr/share/ppd/HP
中找到正确的 PPD,并将其复制到您的主目录中。编辑副本:将行*cupsFilter: "application/vnd.cups-raster 0 hpcups"
替换为*cupsFilter: "*/* 0 -"
。现在,在客户端 CUPS 上添加您的打印机,选择位于您主目录中的自定义 PPD。 - 在主机上创建原始队列:当您在主机的 CUPS 界面中添加打印机时,不要选择打印机的特定 PPD,而是从 Raw 制造商中选择 Raw queue(原始队列)。您应该能够在此客户端上添加此共享打印机,这次使用打印机的特定 PPD。使用此方法,主机无法直接打印文档,因为它不运行过滤器。但是,如果主机是一个小型无头嵌入式设备(如 Raspberry Pi),您可能会注意到使用此方法与前两种方法相比,响应时间显着减少,尤其是在处理大型文档时,因为它节省了大量 CPU 使用率。
CUPS:在 HP LaserJet 上只打印空白页或单页以及错误消息页
存在一个错误,导致 CUPS 在 HP LaserJet 上打印图像时失败(在 LasertJet 3380 和 LaserJet 1300 上最近在 2024 年 7 月也观察到)。该错误已由 Ubuntu 报告并修复。第一页是空白页,第二页包含以下错误消息
ERROR: invalidaccess OFFENDING COMMAND: filter STACK: /SubFileDecode endstream ...
此问题也可能以不同的方式出现,即需要很长时间才能开始打印,然后打印单页,然后是另一页包含以下错误消息的页面
ERROR: typecheck OFFENDING COMMAND: idiv STACK: 50000 --nostringval-- --nostringval-- -mark- -mark- -mark- -mark-
为了解决这些问题,以 root 身份运行以下命令
# lpadmin -p printer -o pdftops-renderer-default=pdftops
CUPS:“File "/usr/lib/cups/filter/rastertospl" not available”(文件 "/usr/lib/cups/filter/rastertospl" 不可用)
在通过其他方式将打印机连接到网络后,可以通过 CUPS Web 界面设置 HP 107w 激光打印机;但是,此错误会阻止打印。
似乎 hplip 不提供对此打印机的支持。但是,可以使用 HP 的安装脚本和 PPD 文件安装驱动程序,这些文件可在 HP 下载页面上找到。
解压 .zip 文件并阅读此 gist 以获取更多详细信息和说明。
如果此问题在 PPD 包(如 foomatic-*)更新后出现,请检查打印机是否有新的 PPD,并尝试使用新的 PPD。
截至 2022 年 1 月,三星 M283x 的新驱动程序在名称中包含 PXL,并且 PPD 不引用 rastertospl,打印机再次工作。通过上述方法获取 rastertospl 无效,因为参数传递顺序错误。
HPLIP 3.13:插件已安装,但 HP 设备管理器抱怨未安装
问题可能与对 /var/lib/hp/hplip.state
所做的文件权限更改有关。要纠正此问题,简单的 chmod 644 /var/lib/hp/hplip.state
和 chmod 755 /var/lib/hp
应该就足够了。有关更多信息,请阅读此链接。
hp-toolbox:“Unable to communicate with device”(无法与设备通信)
# hp-toolbox # error: Unable to communicate with device (code=12): hp:/usb/printer id
虚拟 CDROM 打印机
这也可能是由 P1102 等打印机引起的,这些打印机为 MS Windows 驱动程序提供虚拟 CD-ROM 驱动器。lp
出现在 /dev/
中,然后消失。在这种情况下,请尝试 usb_modeswitch 软件包,该软件包允许您关闭“Smart Drive”(软件包中包含 udev 规则)。
网络打印机
如果 avahi-daemon 未运行,则使用动态主机名的网络连接打印机也可能发生这种情况。另一种可能性是 hp-setup 无法找到打印机,因为打印机的 IP 地址由于 DHCP 而更改。如果是这种情况,请考虑在 DHCP 服务器的配置中为打印机添加 DHCP 保留。如果打印机已经具有静态 IP 并且带有自己的 Web 服务器,请检查是否通过在浏览器中调用打印机的 IP 地址来打开 SNMP:Networking > SNMP(网络 > SNMP)。
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”(Qt/PyQt 4 初始化失败)
安装 python-pyqt4AUR[死链:未找到软件包],它是 hplip 的可选依赖项。或者,要使用命令行界面运行 hp-setup,请使用 -i
标志。
hp-setup:自动找到打印机,但在之后立即打印测试页时报告“Unable to communicate with device”(无法与设备通信)
至少对于通过本地网络连接的 HP Officejet 6500A 的 hplip 3.13.5-2 来说,会发生这种情况。要解决此问题,请为 hp-setup 指定 HP 打印机的 IP 地址以找到打印机。
hp-setup:“KeyError: 'family-class'”
如果在 UI 中静默添加打印机失败,或者您从 hp-setup
收到 KeyError: 'family-class'
回溯,则可能需要手动更新 /usr/share/hplip/data/models/models.dat
。检查是否在打印机部分中定义了 family-class=Undefined
,如果未定义,则添加它
/usr/share/hplip/data/models/models.dat
[hp_laserjet_pro_mfp_m225dw] ... family-class=Undefined
Broken pipe(管道破裂)
如果 /var/log/cups/error_log
包含 HTTP_STATE_WAITING Closing for error 32 (Broken pipe)
错误,您可能需要安装 hplip-pluginAUR 并重启 cups 服务。
其他
打印机“已暂停”或“已停止”,状态为“Rendering completed”(渲染完成)
墨水不足
当墨水不足时,某些打印机将卡在“Rendering completed”(渲染完成)状态,如果是网络打印机,则打印机甚至可能从 CUPS 的角度变得不可访问,即使它已正确连接到网络。在这种情况下更换墨水不足/耗尽的墨盒将使打印机恢复到“Ready”(就绪)状态,如果是网络打印机,则将使打印机再次可用于 CUPS。
打印失败,出现未经授权的错误
如果远程打印机请求身份验证,CUPS 将自动在 /etc/cups/printers.conf
中为打印机添加 AuthInfoRequired
指令。但是,某些图形应用程序(例如,某些版本的 LibreOffice [2])无法提示输入凭据,因此打印失败。要解决此问题,请在 URI 中包含所需的用户名和密码。请参阅 [3]、[4]。
Unknown supported format: application/postscript(未知支持的格式:application/postscript)
注释掉 /etc/cups/mime.convs
中的行
application/octet-stream application/vnd.cups-raw 0 -
从 /etc/cups/mime.convs
中注释掉,以及
application/octet-stream
在 /etc/cups/mime.types
中注释掉。
Print-Job client-error-document-format-not-supported(打印作业客户端错误-文档格式不支持)
尝试安装 foomatic 软件包并使用 foomatic 驱动程序。
如果这不能解决问题,您可能需要从打印机列表中删除打印机,然后手动搜索您的打印机驱动程序(通常可以在 AUR 上找到),然后重新添加打印机。
无法获取打印机驱动程序列表
(也适用于错误 "-1 not supported!")
尝试删除 Foomatic 驱动程序,或参考 CUPS/Printer-specific problems#HPLIP 以获取解决方法。
lp: 错误 - 调度器未响应
如果您收到此错误,请确保 CUPS 正在运行,环境变量 CUPS_SERVER
未设置,并且 /etc/cups/client.conf
是正确的。
“Using invalid Host” 错误信息
尝试将 ServerAlias *
添加到 /etc/cups/cupsd.conf
中。
无法从 LibreOffice 打印
如果您可以从 CUPS Web 界面打印测试页,但不能从 LibreOffice 打印,请尝试 安装 a2ps 软件包。
打印机输出偏移
这似乎是由 CUPS 中设置了错误的页面尺寸引起的。
打印机在出现问题后卡住
当打印过程中出现问题时,CUPS 中的打印机可能会变得无响应。 lpq
报告打印机 未就绪
,可以使用 cupsenable
重新激活它。 在 CUPS Web 界面中,打印机显示为暂停,可以通过恢复打印机来重新激活。
要使 CUPS 自动重新激活打印机,请将 ErrorPolicy 从默认的 stop-printer
更改为 retry-current-job
。
Samsung: URF 错误 - 会话超时未完成
此错误通常在通过 IPP 经网络打印文件到三星打印机时遇到,通过使用 samsung-unified-driverAUR 软件包可以解决。
Brother: 打印机打印多份副本
有时打印机会打印文档的多份副本(例如,MFC-9330CDW 打印了 10 份)。 解决方案是 更新打印机固件。
普通用户无法更改打印机的属性或删除某些作业
如果普通用户需要能够更改打印机的属性或管理打印队列,则可能需要将用户添加到 sys
组。
无法登录 Web 界面
检查是否运行了多个 cupsd
进程。 如果是这种情况,请 停止 cups.service
,杀死所有名为 cupsd
的进程,然后再次 启动 cups.service
。
虚拟 PDF 打印机停止作业
如果虚拟 PDF 打印机(驱动程序:Generic CUPS-PDF Printer (w/ options)
)不断停止打印作业,并且错误日志显示 Unable to auto-configure PostScript Printer - no bidirectional I/O available!
,重新安装 cups-filters 可能会有所帮助。
未找到合适的目的地
如果打印机首选 ipps (ipp-secure),Cups 会将打印机的证书存储在 /etc/cups/printers/ssl 中。 但是,即使证书无效,也永远不会删除这些证书。 除了过期外,证书失效有几种情况:例如,如果您从标准、自签名打印机证书切换到官方 SSL 证书;如果您的打印机软件升级并生成了新证书;或者如果打印机只是更换为同名的新打印机。 在任何这些情况下,Cups 都不会续订缓存的证书,而只会发出相当通用的消息“未找到合适的目的地”。
遗憾的是,*不能* 通过删除并重新安装打印机来解决此问题:即使这样,无效的证书也会保留在文件系统中。 解决此问题的唯一方法是手动删除证书。 (注意:执行此操作的确切方法,即仅擦除 /etc/cups/printers/ssl 是否足够,或者您是否需要先停止 cups 和/或删除受影响的打印机,已在历史记录中丢失 - 请随时添加此信息)。