Command-Line

獲取已安裝列印機列表

  • June 30, 2020

lpr在腳本內部,我使用使用者選擇的列印機上的命令發送某個文件以進行列印。

列印機列表,使用者從中選擇要使用的列印機,我使用該lpstat -a命令,然後將第一個空格之前的所有內容視為列印機的名稱。

這可行,但在很大程度上依賴於lpstat -a命令的特定輸出格式。恐怕將來(或現在在不同的發行版上)如果輸出格式發生變化,它會破壞腳本。

那麼,有沒有辦法以一種比我正在使用的更安全的方式獲取所有已安裝列印機的名稱?

我還需要一份列印機列表,並且有同樣的擔憂。按照上述建議,我檢查了 lpstat.c 的來源。我期待它是一個 suid,所以它可以讀取 “/etc/cups/printers.conf” 。我現在意識到它不會這樣做。

相反,它會向執行 cupsd 的 localhost:631 發送 HTTP POST 請求。請求的形式為 Content-Type: application/ipp 和諸如 requested-attributes auth-info-required 之類的東西。不更具體的原因是它使用了非標準編碼(參見:http ://en.wikipedia.org/wiki/Internet_Printing_Protocol )……所以我懷疑實際上解析 lpstat -a 的輸出實際上更乾淨.

自最初的問題以來已經六年了,我使用的是 Cups 2.2.7 並且仍然 ’lpstat -a’ 在第一個單詞中返回列印機的名稱。因此,我認為可以安全地假設它將繼續作為獲取已安裝列印機列表的正確方法。

引用自:https://unix.stackexchange.com/questions/57968