打印机无法向 CUPS 报告问题



CUPS 有 3 个字段用于问题报告,

  1. 打印机状态 (枚举):空闲、正在处理或已停止。
  2. 打印机状态消息:纯文本人类可读的说明。
  3. 打印机状态
  4. 原因:列出的打印机状态说明,如第 152 页RFC8011中所述,这是发生真正问题报告的地方。它有一个逗号分隔的关键字列表,描述了打印机的状态,例如。"需要介质"或"碳粉不足">

使用 ZebraEPL2 标签打印机驱动程序在 Ubuntu 16.04(和 mac,但让我们暂时保持简单)上测试 Zebra LP 2844 时,我得到以下结果。

----Printer out of paper----
Status Enum: processing
Status Message: printer-state-message: 1 textWithoutLanguage {Waiting for 
printer to become available.}
Status Reason: printer-state-reasons: 1 keyword {none}
----Printer rejecting jobs----
Status Enum: idle
Status Message: printer-state-message: 1 textWithoutLanguage {Rejecting Jobs}
Status Reason: printer-state-reasons: 1 keyword {none}

如您所见,"打印机缺纸"问题和大多数阻止打印机打印的问题都解决为"正在处理",并且从未给我更多信息。您可以计算出打印机已经"处理"了多长时间,并从那里推断出是否存在问题,但除此之外,问题的原因仍然未知。

同时,"打印机拒绝作业"状态绝对没有告诉我任何东西(请记住,状态消息只是人类可读的纯文本,由于没有关于放置在那里的内容的指南,因此不可解析)。除了雇用某人读取状态消息之外,我的程序无法知道存在问题。

并非所有打印机都是这种情况,例如,这是兄弟HL-L2380DW的输出

----Printer out of paper----
Status Enum: processing
Status Message: printer-state-message: 1 textWithoutLanguage {Waiting for job to complete.}
Status Reason: printer-state-reasons: 2 keyword {cups-waiting-for-job-completed, media-needed-error} 

在迄今为止测试的 3 台打印机(惠普、兄弟和斑马)中,Brother HL-L2380DW 是唯一能够正确传达问题的打印机。如果你想自己测试它,你可以运行这个粗糙的CUPS工具,我在java中扔在一起 https://github.com/Vzor-/cupstool 更多数据有帮助!

我不知道问题出在杯子上还是出在制造商身上。无论哪种方式,我都需要一条前进的道路,无论是作为修复还是我可以帮助修复的小组。

编辑:Zebra似乎不制作或维护自己的Linux驱动程序。

来自迈克尔·斯威特,

凯尔

状态报告很复杂,但总的来说,问题在于 基于驱动程序的队列可能来自未实现 STATE 的驱动程序: 消息支持(通常是因为打印机的通信通道 不提供支持)或打印机本身不支持 任何类型的状态报告。

对于 Zebra 打印机,它不支持带内状态 报告,以便 CUPS 捆绑的驱动程序无法从中获取状态 打印机就是这样。 它也不支持 SNMP 打印机 MIB 对于状态,所以我们甚至没有得到带外状态... :/可悲的是 这些类型的打印机通常不支持状态报告,即 有趣的是,许多部署在远程工业环境中 监控很常见...

实现 IPP 的打印机(通常目前除 标签打印机 - 因此 98%+ 的打印机)支持 IPP 状态的打印机状态原因关键字,以及其他 IPP 属性和(在许多情况下)SNMP 打印机 MIB 属性。

因此,这似乎主要只是某些标签打印机的问题。

最新更新