我正在尝试侦听打印机状态更改(例如卡纸、暂停…)以下代码给出“错误通知收件人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-changedprinter-state-changednot printer-queue-order-changed的事件,可以通过复制宏并对其进行编辑来进行调整。
此外,这将使订阅在默认租赁期限内保持活动状态(定义为86400 in the source,应为一天)可以为不确定订阅指定一个附加参数notify-lease-duration为零。

关于c - CUPS状态更改订阅,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43621322/

10-08 23:59