openEuler 系统打印机故障排查全记录:从"等待处理"到成功出纸
2026-07-30 11:09 taozsay 阅读(12) 评论(0) 收藏 举报背景
在使用 openEuler 系统对接 GODEX G500 标签打印机的过程中,先后遇到了打印任务卡在队列、打印机被禁用、任务"处理完成"却不出纸等一系列问题。整个排查过程涉及 CUPS 服务、驱动配置、指令集匹配等多个层面,这里把完整的排查思路和解决步骤记录下来,方便日后查阅,也希望能帮到遇到类似问题的朋友。
环境说明
- 操作系统:openEuler
- 打印服务:CUPS
- 打印机型号:GODEX G500(标签/条码打印机)
- 连接方式:USB 直连
问题一:打印任务一直卡在队列,状态"等待处理"
现象
提交打印任务后,任务长时间停留在队列里,状态显示为 pending(等待处理),既不报错也不出纸。
排查思路
先确认打印机本身的状态:
lpstat -p -d
如果打印机被标记为 disabled,需要重新启用:
cupsenable 打印机名称
cupsaccept 打印机名称
同时可以查看更详细的错误原因:
lpstat -l -p 打印机名称
以及实时的 CUPS 错误日志,这是定位问题最直接的方式:
sudo tail -f /var/log/cups/error_log
常见成因排查清单
- 打印机离线:确认 USB 连接或网络连通性
- 驱动不匹配:卡队列却不报错,往往是驱动版本或类型选错
- SELinux 拦截:openEuler 默认开启 SELinux,可临时切换宽容模式验证:
如果切换后能正常打印,说明是 SELinux 策略问题,需要针对性配置策略,而不是长期关闭getenforcesudo setenforce 0 - CUPS 服务假死:
sudo systemctl restart cups
问题二:打印机显示"被禁用"
现象
执行 lpstat -l -p 查看时,输出显示打印机从某个时间点开始被禁用,具体提示为:
无法向打印机发送数据。
分析
CUPS 在多次发送数据失败后,会自动禁用打印机以避免任务持续堆积。由于当前连接方式是"直接"(Direct,即 USB),问题大概率出在物理连接或系统识别层面,而不是网络配置。
排查步骤
1. 检查系统是否识别到 USB 设备
如果系统提示 lsusb: 未找到命令,说明没有安装 usbutils 工具包:
sudo dnf install usbutils
lsusb
安装后再次查看输出中是否有 GODEX 相关设备信息。
2. 确认 CUPS 探测到的打印机接口
lpinfo -v
3. 检查设备节点权限
确认 lp 用户组对打印机设备节点有读写权限。
4. 重新启用并测试
sudo cupsenable 打印机名称
echo "test" | lp -d 打印机名称
问题三:任务"处理完成"却不出纸
这是整个排查过程中最容易让人误判的一环,专门拿出来说一下。
现象
生产环境验证时,打印机状态显示空闲(idle)、无警告,一切看起来正常:
打印机 G500 目前空闲。启用中,警告:none
提交测试任务:
echo "test" | lp -d G500
返回:
请求 ID 为 G500-143(0 个文件)
随后查看队列:
lpstat -o G500
没有任何输出——任务已经从队列消失,说明 CUPS 认为处理完成了,但打印机没有实际出纸。
根本原因
GODEX G500 是标签/条码打印机,需要的是专用的打印指令语言(如 EZPL/GEPL 指令集),而不是普通的纯文本。用 echo "test" | lp 发送的仅仅是一行纯文本,经过 CUPS 过滤器链转换后,很可能因为内容过于简单或格式不匹配,没有生成打印机能识别的有效指令。结果就是:
- CUPS 层面:任务已发送,队列清空,视为"处理完成"
- 打印机层面:收到的数据无法解析,直接丢弃,不产生任何输出
这也是为什么"任务完成"不等于"打印成功"——CUPS 只负责把数据送到打印机接口,至于打印机认不认得这份数据,它并不关心。
排查与验证方法
1. 确认驱动是否为厂商专用驱动
lpoptions -p G500 -l
head -20 /etc/cups/ppd/G500.ppd
确认 PPD 文件中包含 gdxMode、gdxRate、cupsDarkness 等 GODEX 专有参数,说明使用的是正规厂商驱动,而非通用驱动,驱动本身没有问题。
2. 用真实文件而非管道测试
echo "Hello World Test Label" > /tmp/test.txt
lp -d G500 /tmp/test.txt
3. 查看已完成任务历史
lpstat -W completed -o G500
4. 重点排查 CUPS 过滤器链是否报错
打印前后对比日志,能精准定位是哪一环过滤器(如文本转光栅、光栅转标签指令)出的问题:
sudo tail -50 /var/log/cups/error_log
5. 检查介质与浓度设置
确认打印机实际装载的标签纸尺寸与 PPD 中的 PageSize 设置一致,同时检查打印浓度(Darkness)参数,浓度过低即使打印成功也可能几乎看不出内容:
lpoptions -p G500 -o cupsDarkness=10
总结
整个排查过程按照"CUPS 服务状态 → 系统层面设备识别 → 驱动匹配 → 指令集/介质适配"的顺序层层深入,最终问题得以解决。几点经验总结:
- 任务从队列消失 ≠ 打印成功,尤其是标签打印机这类对指令格式有特殊要求的设备,一定要以实际出纸为准;
lsusb、lpinfo -v是判断"系统有没有识别到打印机"的第一道关卡,装好usbutils工具包能省不少事;/var/log/cups/error_log是排查 CUPS 相关问题最直接的信息来源,遇到问题优先看日志;- 对于标签/条码打印机,用简单的
echo纯文本测试意义有限,最好用符合打印机指令集的测试数据或正式的打印文件来验证。
希望这篇记录能帮到同样在 openEuler 上折腾打印机的朋友,少走一些弯路。
作者:taoz
出处:www.cnblogs.com/bigbrid
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
本文如对您有帮助,还请多帮 【推荐】 下此文。
如果喜欢我的文章,请关注我的公众号
浙公网安备 33010602011771号