Printing 杯子返回';完成';在仍在打印的作业上
我正在使用IPP协议与CUPS通信。我的打印机的所有驱动程序都安装在CUPS中(使用.ppd文件),打印机得到了最新的固件 当我查询打印机正在打印的作业时,它会在打印机完成打印之前说明该作业的状态为“完成”。似乎CUPS在完成文件“上传”后会将作业标记为“完成” 我不希望出现这种情况,我基本上需要知道打印机打印作业的最后一张纸的确切时间。 代码如下所示。Printing 杯子返回';完成';在仍在打印的作业上,printing,cups,ipp-protocol,Printing,Cups,Ipp Protocol,我正在使用IPP协议与CUPS通信。我的打印机的所有驱动程序都安装在CUPS中(使用.ppd文件),打印机得到了最新的固件 当我查询打印机正在打印的作业时,它会在打印机完成打印之前说明该作业的状态为“完成”。似乎CUPS在完成文件“上传”后会将作业标记为“完成” 我不希望出现这种情况,我基本上需要知道打印机打印作业的最后一张纸的确切时间。 代码如下所示。self.printer().ippPrinter()是节点ipp的一个实例,它指向打印机。要读取作业状态,我使用属性“作业状态” var ms
self.printer().ippPrinter()
是节点ipp
的一个实例,它指向打印机。要读取作业状态,我使用属性“作业状态”
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);
});
有人知道我为什么会有这个问题吗。。如何让它工作?
谢谢大家! CUPS只能转发从打印机接收的作业状态。许多打印机驱动程序和协议的工作方式类似于“开火并忘记” 通常,IPP打印机允许CUPS和其他客户端监视当前作业状态,直到作业完成/打印。一些制造商没有正确实施IPP,并将提交的作业分类为打印作业-即使打印机卡纸 结论: 如果您的打印机不支持指定的IPP,您可能无法检查“打印成功”。@Jakub,您可能正在使用IPP与CUPS进行通信。。。但是您确定CUPS正在通过IPP与打印设备进行通信吗 您可以通过运行
lpstat -h cupsservername -v
这将返回分配给每个打印队列的设备URI,CUPS使用该URI来寻址实际的打印设备:
- 如果该URI确实包含
、ipp://
、ipp://
或http://
CUPS,则该URI确实会将ipp与打印设备进行通信,并且您应该能够获得实际正确的状态消息https://
- 但如果您看到
,则CUPS配置为使用AppSocket方法(有时也称为“HP Jet Direct”或“IP Direct Printing”)转发作业。这是一个“开火后忘记”的协议。基本上,这与运行netcat打印设备9100socket://
将可打印数据铲到打印机端口9100的情况相同。CUPS
后端处理此后台打印到打印机时,除了TCP/IP提供的确认最后一个数据包已传输的确认之外,不会从打印机获得任何其他确认。因此,它必须关闭进程并向CUPS守护进程报告“成功确定”,即使打印机仍在忙于吐出大量纸张,并且可能永远无法完成全部作业,因为它遇到卡纸socket
- 如果看到
,情况类似(但使用端口515)lpd://
sudo lpadmin -p printername ipp://ipaddress-of-printer
或
Peter,当打印机甚至没有打印一页(但它已收到所有输入数据,我可以稍后要求打印机手动继续打印作业)时,我将以完成的作业结束。我猜,谈论打印机协议的用户(即HP的AppSocket)只能执行您提到的“点火并忘记”,CUPS只能将该作业标记为已完成。对于lpd和套接字协议,更改驱动程序是否有可能改善这种情况?不同的驱动程序可以安装更好的后端吗?谢谢。我不知道lpd或套接字协议提供了更好的方法来监控作业。在任何情况下,打印机都必须支持这种监控。根据我的经验,ipp提供了更多选项,但这可能是一种偏见:-)如果URI包含
usb://
?@JoeVanDyk:…那么可以肯定的是,CUPS没有通过ipp与打印设备通信。
sudo lpadmin -p printername http://ipaddress-of-printer:631