我正在尝试侦听打印机状态更改(例如卡纸、暂停…)以下代码给出“错误通知收件人uri”响应,然后锁定ippReadFile,并且在打印机暂停/未暂停时不会释放。
int main()
{
http_t *http = httpConnectEncrypt(cupsServer(), ippPort(),
cupsEncryption());
ipp_t *request = ippNewRequest(IPP_CREATE_PRINTER_SUBSCRIPTION);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, "ipp://localhost:631/printers/Generic-text-only");
ippAddString(request, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-recipient-uri",
NULL, "cups_test://");
ippAddString(request, IPP_TAG_SUBSCRIPTION, IPP_TAG_KEYWORD, "notify-events",
NULL, "printer-state-changed");
ipp_t *response = cupsDoRequest(http, request, "/");
while (1)
{
ipp_state_t state;
ipp_t *event = ippNew();
while ((state = ippReadFile(0, event)) != IPP_DATA)
{
printf("%s\n","Got Data");
}
printf("%s\n","Repeating");
ippDelete(event);
}
}
在对printers属性进行筛选之后,我发现一个
notify-schemes-supported
属性设置为“dbus”我无法使用IPP_SET_PRINTER_ATTRIBUTES
更改属性有什么办法让它工作吗? 最佳答案
不需要任何C代码的一个非常基本的示例是对ipptool
宏使用create-printer-subscription
来订阅事件的rss URI这是pyipptool
所说明的方法。ipptool
通常与CUPS一起提供,但是对于现代的Ubuntu版本,您可能需要安装cups-ipp-utils
。
首先,创建一个可以接收事件的HTTP套接字侦听器。。。
python -m SimpleHTTPServer 9876
其次,将事件发送到套接字侦听器。
ipptool -d recipient=rss://localhost:9876 ipp://localhost:631/printers /usr/share/cups/ipptool/create-printer-subscription.test
最后,触发一个事件,例如禁用打印机。
cupsdisable PDFWriter # or some valid printer name
cupsenable PDFWriter
rss://
URI方案将对HTTP套接字服务器使用PUT
命令由于SimpleHTTPServer
没有内置的PUT
命令支持,因此会发生501
错误您必须自定义HTTP侦听器来处理这些命令,但您将看到触发的事件。注意,默认的
create-printer-subscription
宏配置为发送printer-config-changed
和printer-state-changed
但not printer-queue-order-changed
的事件,可以通过复制宏并对其进行编辑来进行调整。此外,这将使订阅在默认租赁期限内保持活动状态(定义为
86400
in the source,应为一天)可以为不确定订阅指定一个附加参数notify-lease-duration
为零。关于c - CUPS状态更改订阅,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43621322/