我需要以編程方式將打印機添加到安裝了System V過濾器的杯子中。現在我用下面的代碼創建請求添加打印機:如何使用cups API添加System V過濾器?
pstRequest = ippNew();
pstRequest->request.op.operation_id = CUPS_ADD_PRINTER;
pstRequest->request.any.request_id = 1;
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "us-ascii");
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, "en");
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_URI, "device-uri", NULL, szUri);
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, szPrinterUri);
ippAddInteger(pstRequest, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PRINTER_IDLE);
ippAddBoolean(pstRequest, IPP_TAG_PRINTER, "printer-is-accepting-jobs", true);
對於conversaion的緣故:
szUri = "serial:/dev/pts/12?baud=2400+bits=7+parity=none+flow=none";
szPrinterUri = "ipp://localhost/printers/myptr";
這似乎與打印機正確添加到杯子的系統,因爲我然後,可以使用下面的命令發送打印它:
lp -d myptr test.print
我首先想到的是把剛纔複製,我想作爲過濾器使用到/etc/cups/interfaces
d文件irectory並將其稱爲myptr
。我這樣做,給了它正確的用戶,組和權限,它似乎沒有工作。我甚至嘗試在腳本的前面粘貼sleep 60
,並且它從未出現在ps
中。
我嘗試添加使用lpadmin
如下打印機,它能夠正常工作:
lpadmin -h localhost -p myptr2 -v "serial:/dev/pts/12?baud=2400+bits=7+parity=none+flow=none" -i /tmp/my.serial.filter
我要叫cupsaccept
和cupsenable
之後,但打印機的工作原理,並通過我的過濾器將打印。 lpadmin
正確地複製文件/tmp
到/etc/cups/interfaces
並將其命名爲myptr2
,就像我在我的程序中所做的一樣,並且在我的生活中,我無法找到任何引用過濾器的任何cup配置文件,這些文件使我想到我錯過了一步。儘管如此,我用lpadmin
添加的myptr2
打印機工作正常,而我使用API添加的myptr
打印機,而它確實打印,確實不是打印通過過濾器。
在我所做的各種谷歌搜索,我已經通過CUPS Implementation和HTTP and IPP APIs Documentation閱讀,那我來最接近的是,在前者中,存在對讀取CUPS-Add-Modify-Printer Operation評論:
CUPS-Add-Modify-Printer請求可以選擇跟隨一個PPD文件或系統V接口腳本來用於打印機。 「ppd-name」屬性用本地CUPS PPD文件覆蓋附加到請求末尾的任何文件。
這使我使用
ippAddString(pstRequest, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name", NULL, szFilter);
與szFilter設置爲兩個"/tmp/my.serial.filter"
和"/etc/cups/interfaces/myptr"
(在單獨的測試,當然)的嘗試,但都無濟於事。
任何人都可以告訴我哪裏可能會出錯嗎?