Linux

是否可以阻止使用者修改 CUPS 中的列印機選項?

  • February 21, 2021

一個小型的家庭設置…

我有一台彩色列印機和一台安裝了 CUPS 的 Linux 電腦。我想讓孩子們列印,但只能在草稿模式下,而且只能在灰度模式下。

使用 CUPS,我阻止了孩子們的帳戶訪問列印機。然後我為相同的硬體列印機設置了第二台列印機,但具有不同的預設選項(草稿和灰度),並允許孩子們使用這台新列印機。

它有效,當他們列印這台新列印機的預設選項時,確實是草稿和灰度。但它們只是預設選項。他們可以改變它。

有沒有辦法阻止使用者更改列印機的選項?

因此,在 meuh 的幫助下,實施一個可行的解決方案實際上非常容易。

編輯列印機的 PPD,找到有關顏色設置和列印模式的 GUI 條目,並註釋掉不需要的選項(註釋是*%PPD 文件中以開頭的行)。

就我而言,它是:

*OpenUI *ColorModel/Output Mode: PickOne
*OrderDependency: 10 AnySetup *ColorModel
*DefaultColorModel: KGray
*%*ColorModel RGB/Color: "<</cupsColorSpace 1/cupsBitsPerColor 8/cupsRowStep 0>>setpagedevice"
*%*ColorModel CMYGray/High Quality Grayscale: "<</cupsColorSpace 1/cupsBitsPerColor 8/cupsRowStep 1>>setpagedevice"
*ColorModel KGray/Black Only Grayscale: "<</cupsColorSpace 1/cupsBitsPerColor 8/cupsRowStep 2>>setpagedevice"
*CloseUI: *ColorModel

*OpenUI *OutputMode/Print Quality: PickOne
*OrderDependency: 10 AnySetup *OutputMode
*DefaultOutputMode: FastDraft
*%*OutputMode Normal/Normal: "<</OutputType(0)/HWResolution[600 600]>>setpagedevice"
*OutputMode FastDraft/Draft: "<</OutputType(-2)/HWResolution[300 300]>>setpagedevice"
*%*OutputMode Best/Best: "<</OutputType(1)/HWResolution[600 600]>>setpagedevice"
*%*OutputMode Photo/High-Resolution Photo: "<</OutputType(2)/HWResolution[1200 1200]>>setpagedevice"
*CloseUI: *OutputMode

簡單的 !

我想這樣做的唯一方法是複制 PPD 文件並刪除適當的選項,創建一個新的文件名和模型名稱。由於 Adob​​e 的文件格式相當複雜(pdf),為了避免副作用,可以保留這些選項但對其進行操作使其不起作用。例如,Brother 列印機 PPD 具有以下節:

*OpenUI *TonerSaveMode/Toner Save: PickOne
*DefaultTonerSaveMode: Off
*OrderDependency: 10 AnySetup  *TonerSaveMode
*TonerSaveMode Off/Off: "statusdict/tonersave known{statusdict begin false tonersave end}if"
*TonerSaveMode On/On: "statusdict/tonersave known{statusdict begin true tonersave end}if"
*CloseUI: *TonerSaveMode

這將創建一個布爾選項來節省碳粉,預設為關閉。您可以嘗試將預設值更改為On,並刪除 off 選項:

*OpenUI *TonerSaveMode/Toner Save: PickOne
*DefaultTonerSaveMode: On
*OrderDependency: 10 AnySetup  *TonerSaveMode
*TonerSaveMode On/On: "statusdict/tonersave known{statusdict begin true tonersave end}if"
*CloseUI: *TonerSaveMode

原則上,提供一個只有一個選項的菜單可能會奏效。

或者相反,為了將 off 選項與 on 相同,可以將實現的 PostScript 程式碼 (in "")複製On到該Off部分並保留這兩個選項:

*TonerSaveMode Off/Not really off: "statusdict/tonersave known{statusdict begin true tonersave end}if"

對於沒有選擇的選項,應該可以刪除該OpenUI/CloseUI部分,以便使用者無法使用它,但是我根本不知道TonerSaveMode程式碼是否得到輸出。你需要嘗試一下。(這OrderDependency有助於將程式碼與所有其他發出的程式碼按正確的順序排列。NonUIOrderDependency可能需要一個)。

在 PPD 的標題中,您可能需要更改NickNameand ModelName

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