Cups

CUPS 無驅動列印伺服器作為具有舊版 PPD 列印機驅動程序的列印機的代理

  • January 4, 2021

在我的網路上,我想通過使用Linux CUPS列印系統的IPPEverywhere使用無驅動程序列印。

我有一些網路列印機,它確實支持使用 IPP 進行無驅動列印,但非常有問題。一個不列印某些pdf文件,另一個不列印多個副本,依此類推。但它們都使用其本機 PPD 列印機驅動程序列印得非常好。所以我想在我的網路上展示一個列印伺服器,它為網路列印機提供自己的列印機驅動程序,但在網路上顯示為(虛擬?)每個網路列印機的全功能 IPP 設備。

這通常意味著列印伺服器正在將來自網路客戶端的無驅動 IPP 列印命令“轉換”為列印機的傳統列印命令,因此我在網路上只有 IPPEverywhere 列印隊列。預設情況下,CUPS 創建一個本地列印隊列,該隊列使用IPPEverywhere無驅動程序或使用其 PPD 文件的列印機舊驅動程序為列印機提供服務。

┏━━━━━━━━━━━━━┓
┃ localhost   ┃
┃   ┌───────┐ ┃                ┏━━━━━━━━━┓
┃   │ Queue │═╋════════════════┫ Printer ┃
┃   └───────┘ ┃                ┗━━━━━━━━━┛
┗━━━━━━━━━━━━━┛

現在的想法是在網路上擁有一個行為類似於無驅動列印機的列印伺服器:

┏━━━━━━━━━━━━━┓                ┏━━━━━━━━━━━━━┓
┃ localhost   ┃                ┃ printserver ┃
┃   ┌───────┐ ┃ IPPEverywhere  ┃   ┌───────┐ ┃  legacy PPD driver  ┏━━━━━━━━━┓
┃   │ Queue │═╋════════════════┫   │ Queue │═╋═════════════════════┫ Printer ┃
┃   └───────┘ ┃                ┃   └───────┘ ┃                     ┗━━━━━━━━━┛
┗━━━━━━━━━━━━━┛                ┗━━━━━━━━━━━━━┛

使用舊版驅動程序將列印機連接到列印伺服器沒有問題。這是舊方法(但將被上游 CUPS 版本棄用和刪除)。

但是我如何才能在網路上找到列印伺服器,以便我可以連接到它,例如使用我的 Android 智能手機並使用 IPPEverywhere 進行列印?

有時我使用的部分解決方案只能用於網路上的 Linux 設備,但不能作為移動設備的通用列印解決方案。但是要記錄下來,我會分享它。也許社區有一些指示或答案,所以我們得到了最終的解決方案。

我假設列印機已成功連接,您可以從列印伺服器列印到它:

printserver ~$ lp -E -d myprinter /usr/share/cups/data/testprint

我使用列印機共享直接訪問列印伺服器上的隊列。為此,我必須將其配置為預設伺服器而不是localhost本地列印隊列。

┏━━━━━━━━━━━━━┓                ┏━━━━━━━━━━━━━┓
┃ localhost   ┃                ┃ printserver ┃
┃             ┃ IPPEverywhere  ┃   ┌───────┐ ┃  legacy PPD driver  ┏━━━━━━━━━━━┓
┃             ┃════════════════╋═══│ Queue │═╋═════════════════════┫ myprinter ┃
┃             ┃                ┃   └───────┘ ┃                     ┗━━━━━━━━━━━┛
┗━━━━━━━━━━━━━┛                ┗━━━━━━━━━━━━━┛

在安裝了 CUPS 的列印伺服器上使用 Debian Buster,您必須啟用共享:

printserver ~$ sudo cupsctl -E --share-printers
printserver ~$ sudo cupsctl -E   # check settings

同樣在安裝了 CUPS 的設備上使用 Debian 將預設列印伺服器設置為/etc/cups/client.conf

client ~$ sudo bash -c 'echo "ServerName printserver" >> /etc/cups/client.conf'

這就是我們訪問列印機所需要做的一切。檢查其狀態和選項:

client ~$ lpstat -E -t
client ~$ lpoptions -E
client ~$ lpoptions -E -l

使用最後一個命令,您會發現列印機的特殊選項不是通用的lp,例如BRMonoColor我的彩色列印機。此範例將以灰色而不是預設顏色列印兩份雙面紙:

client ~$ lp -E -d myprinter -n 2 -o fit-to-page -o collate=true -o sides=two-sided-long-edge -o BRMonoColor=Mono ./two-pages.pdf

例如,如果您有一個本地連接到客戶端的 USB 列印機,則可能會出現問題。您不會在 上看到它的隊列localhost。在這種情況下,您始終可以使用環境變數指定列印伺服器CUPS_SERVER

client ~$ CUPS_SERVER=localhost lpstat -E -t
client ~$ CUPS_SERVER=localhost lp -E ...

參考:

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