我正在尝试侦听打印机状态更改(例如卡纸,已暂停...)以下代码提供“错误通知 - 收件人 - uri”响应,然后锁定ippReadFile并且在打印机暂停时不会释放/取消暂停。
{
account: "Kasper",
rooms: "Room301",
audit: [
{
user: "Admin123",
log: "Admin123 added Room301"
}
]
},
{
account: "Kasper",
rooms: "Room302",
audit: [
{
user: "Admin234",
log: "Admin234 created account Kasper for room Room302"
}
]
}
在筛选打印机属性后,我发现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);
}
}
属性设置为“dbus”。我无法使用notify-schemes-supported
更改属性。关于如何使其发挥作用的任何想法?
答案 0 :(得分:1)
不需要任何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
为零。