CUPS状态变更订阅

时间:2017-04-25 21:31:32

标签: c printing cups intel-ipp

我正在尝试侦听打印机状态更改(例如卡纸,已暂停...)以下代码提供“错误通知 - 收件人 - 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更改属性。关于如何使其发挥作用的任何想法?

1 个答案:

答案 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-changedprinter-state-changednot printer-queue-order-changed的事件,可以通过复制宏并对其进行编辑来调整

此外,这将使订阅在默认租约期限内保持活动状态(定义为86400 in the source,这应该是一天)。可以为无限期订阅指定附加参数notify-lease-duration为零。