首页 文章

CUPS在仍在打印的作业上返回'complete'

提问于
浏览
1

我正在使用IPP协议与CUPS通信 . 我在CUPS中安装了所有打印机驱动程序(使用.ppd文件),打印机获得了最新固件 .

当我查询打印机正在打印的作业时,它表示在打印机完成打印之前作业的状态是“完成” . 似乎CUPS在完成“上传”文件时将该作业标记为“完整” .

我不希望这种行为,我基本上需要知道什么时候打印机打印完毕的最后一张纸 . 代码如下所示 . self.printer().ippPrinter()node-ipp 的一个实例,它指向打印机 . 要读取我正在使用属性 'job-state' 的作业状态 .

var msg = {
  "operation-attributes-tag": {
    'job-id': id
  }
};

self.printer().ippPrinter().execute("Get-Job-Attributes", msg, function(err, res){
  var attributes = res['job-attributes-tag'];

  self.setAttributes = attributes;
  callback.call(self, attributes);
});

有谁知道为什么我有这个问题或..如何让它工作?谢谢!

2 回答

  • 0

    CUPS只能转发从打印机接收的作业状态 . 许多打印机驱动程序和协议的工作方式类似于“即发即忘” .

    通常,IPP打印机允许CUPS和其他客户端监视当前的作业状态,直到完成/打印为止 . 有些制造商没有正确实施IPP并将提交的作业分类为打印 - 即使打印机有卡纸!

    结论:

    如果您的打印机不支持指定的IPP,您可能无法检查“打印成功” .

  • 2

    @Jakub, you 可能正在使用IPP与 CUPS 进行通信......但是你确定 CUPS 正在通过IPP与 print device 进行通信吗?

    您可以通过运行来检查

    lpstat -h cupsservername -v
    

    这应该返回分配给每个打印队列的设备URI,CUPS用它来寻址实际的打印设备:

    • 如果该URI确实包含 ipp://ipps://http://https:// CUPS确实会将IPP与打印设备进行对话,您应该能够获得实际正确的状态消息 .

    • 但是如果你看到 socket:// ,那么CUPS被配置为使用AppSocket方法(有时也称为'HP Jet Direct'或'IP Direct Printing')来转发作业 . 这是一个"fire and forget"协议 . 基本上它就像你运行 netcat print-device 9100 < myprintfile 将可打印数据铲到打印机的端口9100一样 . 处理此假脱机到打印机的CUPS socket 后端将不会从打印机获得任何其他确认,而不是TCP / IP提供的确认最后一个数据包被转移的确认 . 因此,它必须关闭其进程并向CUPS守护程序 successful-ok 报告,即使打印机仍在忙着吐出大量纸张,并且可能永远不会完成整个作业,因为它会发生卡纸...

    • 如果您看到 lpd:// 情况类似(但使用端口515) .

    通过将CUPS-to-printdevice路径从AppSocket或LPD切换到IPP,您可以获得完整的状态报告,如下所示:

    sudo lpadmin -p printername ipp://ipaddress-of-printer
    

    要么

    sudo lpadmin -p printername http://ipaddress-of-printer:631
    

相关问题