歡迎光臨
每天分享高質量文章

完全指南:在 Linux 中如何列印和管理印表機 | Linux 中國

本教程將介紹在 Linux 中如何使用 CUPS 去列印。
— Ian Shields


致謝
編譯自 | https://www.ibm.com/developerworks/library/l-lpic1-108-4/index.html 
 作者 | Ian Shields
 譯者 | qhwdw ? ? ? ? ? 共計翻譯:104 篇 貢獻時間:164 天

Linux 中的列印

雖然現在大量的溝通都是電子化和無紙化的,但是在我們的公司中還有大量的材料需要列印。銀行結算單、公用事業帳單、財務和其它報告、以及收益結算單等一些東西還是需要列印的。本教程將介紹在 Linux 中如何使用 CUPS 去列印。

CUPS,是通用 Unix 列印系統Common UNIX Printing System的首字母縮寫,它是 Linux 中的印表機和列印任務的管理者。早期計算機上的印表機一般是在特定的字符集和字型大小下列印文字檔案行。現在的圖形印表機可以列印各種字型和大小的文字和圖形。儘管如此,現在你所使用的一些命令,在古老的行式列印守護行程(LPD)技術的歷史中仍能找到它們。

本教程將幫你瞭解 Linux 伺服器專業考試(LPIC-1)的第 108 號主題的 108.4 標的。這個標的的權重為 2。

前提條件

為了更好地學習本系列教程,你需要具備基本的 Linux 知識,和使用 Linux 系統實踐本教程中的命令的能力,你應該熟悉 GNU 和 UNIX® 命令的使用。有時不同版本的程式輸出可能會不同,因此,你的結果可能與本教程中的示例有所不同。

本教程中的示例使用的是 Fedora 27 的系統。

有關列印的一些歷史

這一小部分歷史並不是 LPI 標的的,但它有助於你理解這個標的的相關環境。

早期的計算機大都使用行式印表機。這些都是擊打式印表機,那時,它們使用固定間距的字元和單一的字型來列印文字行。為提升整個系統效能,早期的主機要與慢速的外圍裝置(如讀卡器、卡片穿孔機、和執行其它工作的行式印表機)交叉進行工作。因此就產生了線上的或者假離線的同步外圍操作,這一術語目前在談到計算機列印時仍然在使用。

在 UNIX 和 Linux 系統上,列印初始化使用的是 BSD(伯克利軟體分發版Berkeley Software Distribution)列印子系統,它是由一個作為伺服器執行的行式列印守護程式(LPD)組成,而客戶端命令如 lpr是用於提交列印作業。這個協議後來被 IETF 標準化為 RFC 1179 —— 行式印表機守護行程協議

System V 也有一個列印守護程式。它的功能與BSD 的 LPD 守護程式類似,但是它們的命令集不一樣。你在後面會經常看到完成相同的任務使用不同選項的兩個命令。例如,對於列印檔案的命令,伯克利實現版本是 lpr,而 System V 實現版本是 lp

隨著印表機技術的進步,在一個頁面上混合出現不同字型成為可能,並且可以將圖片像文字一樣列印。可變間距字型,以及更多先進的列印技術,比如間距和連字元,現在都已經標準化。出現了幾種對基本的 lpd/lpr 方法等改進設計,比如 LPRng,下一代的 LPR,以及 CUPS。

許多可以列印圖形的印表機,使用 Adobe PostScript 語言進行初始化。一個 PostScript 印表機有一個直譯器引擎,它可以解釋列印任務中的命令並從這些命令中生成最終的頁面。PostScript 經常被用做原始檔案(比如一個文字檔案或者一個影象檔案)和最終格式沒有適合的 PostScript 功能的特定印表機之間的中間層。轉換這些特定的列印任務,比如將一個 ASCII 文字檔案或者一個 JPEG 影象轉換為 PostScript,然後再使用過濾器轉換 PostScript 到非 PostScript 印表機所需要的最終光柵格式。

現在的行動式檔案格式Portable Document Format(PDF),它就是基於 PostScript 的,已經替換了傳統的原始 PostScript。PDF 設計為與硬體和軟體無關,它封裝了要列印的頁面的完整描述。你可以檢視 以及列印 PDF 檔案。

管理列印佇列

使用者直接列印作業到一個名為列印佇列print queue的邏輯物體。在單使用者系統中,列印佇列和印表機通常是幾乎相同的意思。但是,CUPS 允許系統不用連線到一個印表機上,而最終在一個遠端系統上的排隊列印作業,並且透過使用分類,允許將定向到一個分類的列印作業在該分類第一個可用的印表機上列印。

你可以檢查和管理列印佇列。對於 CUPS 來說,其中一些命令實現了一些新操作。另外的一些是源於 LPD 的相容命令,不過現在的一些選項通常是最初的 LPD 列印系統選項的有限子集。

你可以使用 CUPS 的 lpstat 命令去檢查佇列,以瞭解列印系統。一些常見選項如下表 1。

< 如顯示不全,請左右滑動 >
選項 作用
-a 顯示印表機狀態
-c 顯示列印分類
-p 顯示列印狀態:enabled 或者 disabled
-s 顯示預設印表機、印表機和類。相當於 -d -c -v註意:要指定多個選項,這些選項必須像值一樣分隔開。
-v 顯示印表機和它們的裝置。

表 1. lpstat 命令的選項

你也可以使用 LPD 的 lpc 命令(它可以在 /usr/sbin 中找到)使用它的 status 選項。如果你不想指定印表機名字,將列出所有的佇列。串列 1 展示了命令的一些示例。

  1. [ian@atticf27 ~]$ lpstat -d

  2. system default destination: HL-2280DW

  3. [ian@atticf27 ~]$ lpstat -v HL-2280DW

  4. device for HL-2280DW: dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/

  5. [ian@atticf27 ~]$ lpstat -s

  6. system default destination: HL-2280DW

  7. members of class anyprint:

  8.    HL-2280DW

  9.    XP-610

  10. device for anyprint: ///dev/null

  11. device for HL-2280DW: dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/

  12. device for XP-610: dnssd://EPSON%20XP-610%20Series._ipp._tcp.local/?uuid=cfe92100-67c4-11d4-a45f-ac18266c48aa

  13. [ian@atticf27 ~]$ lpstat -a XP-610

  14. XP-610 accepting requests since Thu 27 Apr 2017 05:53:59 PM EDT

  15. [ian@atticf27 ~]$ /usr/sbin/lpc status HL-2280DW

  16. HL-2280DW:

  17.    printer is on device 'dnssd' speed -1

  18.    queuing is disabled

  19.    printing is enabled

  20.    no entries

  21.    daemon present

串列 1. 顯示可用列印佇列

這個示例展示了兩臺印表機 —— HL-2280DW 和 XP-610,和一個分類 anyprint,它允許列印作業定向到這兩臺印表機中的第一個可用印表機。

在這個示例中,已經禁用了列印到 HL-2280DW 佇列,但是列印功能是啟用的,這樣便於將印表機離線維護之前可以完成列印佇列中的任務。啟用還是禁用佇列,可以使用 cupsaccept和 cupsreject 命令來管理。以前它們叫做 accept 和 reject,你或許可能在 /usr/sbin 中找到這些命令,但它們現在都是符號連結到新的命令上了。同樣,啟用還是禁用列印,你可以使用 cupsenable 和 cupsdisable 命令來管理。在早期版本的 CUPS 中,這些被稱為 enable 和 disable,它也許會與 bash shell 內建的 enable 混淆。串列 2 展示瞭如何去啟用印表機 HL-2280DW 上的佇列,而禁止它的列印。CUPS 的幾個命令支援使用 -r 選項去提供一個該操作的理由。這個理由會在你使用 lpstat 時顯示,但是如果你使用的是 lpc 命令則不會顯示它。

  1. [ian@atticf27 ~]$ lpstat -a -p HL-2280DW

  2. anyprint accepting requests since Mon 29 Jan 2018 01:17:09 PM EST

  3. HL-2280DW not accepting requests since Thu 27 Apr 2017 05:52:27 PM EDT -

  4.    Maintenance scheduled

  5. XP-610 accepting requests since Thu 27 Apr 2017 05:53:59 PM EDT

  6. printer HL-2280DW is idle. enabled since Thu 27 Apr 2017 05:52:27 PM EDT

  7.    Maintenance scheduled

  8. [ian@atticf27 ~]$ accept HL-2280DW

  9. [ian@atticf27 ~]$ cupsdisable -r "waiting for toner delivery" HL-2280DW

  10. [ian@atticf27 ~]$ lpstat -p -a

  11. printer anyprint is idle. enabled since Mon 29 Jan 2018 01:17:09 PM EST

  12. printer HL-2280DW disabled since Mon 29 Jan 2018 04:03:50 PM EST -

  13.    waiting for toner delivery

  14. printer XP-610 is idle. enabled since Thu 27 Apr 2017 05:53:59 PM EDT

  15. anyprint accepting requests since Mon 29 Jan 2018 01:17:09 PM EST

  16. HL-2280DW accepting requests since Mon 29 Jan 2018 04:03:50 PM EST

  17. XP-610 accepting requests since Thu 27 Apr 2017 05:53:59 PM EDT

串列 2. 啟用佇列和禁用列印

註意:使用者執行這些任務必須經過授權。它可能要求是 root 使用者或者其它的授權使用者。在 /etc/cups/cups-files.conf 中可以看到 SystemGroup 的條目,cups-files.conf 的 man 頁面有更多授權使用者組的資訊。

管理使用者列印作業

現在,你已經知道了一些如何去檢查列印佇列和類的方法,我將給你展示如何管理列印佇列上的作業。你要做的第一件事是,如何找到一個特定印表機或者全部印表機上排隊的任意作業。完成上述工作要使用 lpq 命令。如果沒有指定任何選項,lpq 將顯示預設印表機上的佇列。使用 -P 選項和一個印表機名字將指定印表機,或者使用 -a 選項去指定所有的印表機,如下麵的串列 3 所示。

  1. [pat@atticf27 ~]$ # As user pat (non-administrator)

  2. [pat@atticf27 ~]$ lpq

  3. HL-2280DW is not ready

  4. Rank Owner Job File(s) Total Size

  5. 1st unknown 4 unknown 6144 bytes

  6. 2nd pat 6 bitlib.h 6144 bytes

  7. 3rd pat 7 bitlib.C 6144 bytes

  8. 4th unknown 8 unknown 1024 bytes

  9. 5th unknown 9 unknown 1024 bytes

  10. [ian@atticf27 ~]$ # As user ian (administrator)

  11. [ian@atticf27 ~]$ lpq -P xp-610

  12. xp-610 is ready

  13. no entries

  14. [ian@atticf27 ~]$ lpq -a

  15. Rank Owner Job File(s) Total Size

  16. 1st ian 4 permutation.C 6144 bytes

  17. 2nd pat 6 bitlib.h 6144 bytes

  18. 3rd pat 7 bitlib.C 6144 bytes

  19. 4th ian 8 .bashrc 1024 bytes

  20. 5th ian 9 .bashrc 1024 bytes

串列 3. 使用 lpq 檢查列印佇列

在這個示例中,共有五個作業,它們是 4、6、7、8、和 9,並且它是名為 HL-2280DW 的印表機的佇列,而不是 XP-610 的。在這個示例中使用 -P 選項,可簡單地顯示哪個印表機已經準備好,但是沒有佇列任務。註意,CUPS 的印表機命名,是大小寫不敏感的。還要註意的是,使用者 ian 提交了同樣的作業兩次,當一個作業沒有第一時間列印時,經常能看到使用者的這種動作。

一般情況下,你可能會檢視或者維護你自己的列印作業,但是,root 使用者或者其它授權的使用者通常會去管理其它列印作業。大多數 CUPS 命令都可以使用一個 -E 選項,對 CUPS 伺服器與客戶端之間的通訊進行加密。

使用 lprm 命令從佇列中去刪除一個 .bashrc 作業。如果不使用選項,將刪除當前的作業。使用 - 選項,將刪除全部的作業。要麼就如串列 4 那樣,指定一個要刪除的作業串列。

  1. [[pat@atticf27 ~]$ # As user pat (non-administrator)

  2. [pat@atticf27 ~]$ lprm

  3. lprm: Forbidden

  4. [ian@atticf27 ~]$ # As user ian (administrator)

  5. [ian@atticf27 ~]$ lprm 8

  6. [ian@atticf27 ~]$ lpq

  7. HL-2280DW is not ready

  8. Rank Owner Job File(s) Total Size

  9. 1st ian 4 permutation.C 6144 bytes

  10. 2nd pat 6 bitlib.h 6144 bytes

  11. 3rd pat 7 bitlib.C 6144 bytes

  12. 4th ian 9 .bashrc 1024 bytes

串列 4. 使用 lprm 刪除列印作業

註意,使用者 pat 不能刪除佇列中的第一個作業,因為它是使用者 ian 的。但是,ian 可以刪除他自己的 8 號作業。

另外的可以幫你操作列印佇列中的作業的命令是 lp。使用它可以去修改作業屬性,比如列印數量或者優先順序。我們假設使用者 ian 希望他的作業 9 在使用者 pat 的作業之前列印,並且希望列印兩份。作業優先順序的預設值是 50,它的優先順序範圍從最低的 1 到最高的 100 之間。使用者 ian 可以使用 -i-n、以及 -q 選項去指定一個要修改的作業,而新的列印數量和優先順序可以如下麵的串列 5 所示的那樣去修改。註意,使用 -l 選項的 lpq 命令可以提供更詳細的輸出。

  1. [ian@atticf27 ~]$ lpq

  2. HL-2280DW is not ready

  3. Rank Owner Job File(s) Total Size

  4. 1st ian 4 permutation.C 6144 bytes

  5. 2nd pat 6 bitlib.h 6144 bytes

  6. 3rd pat 7 bitlib.C 6144 bytes

  7. 4th ian 9 .bashrc 1024 bytes

  8. [ian@atticf27 ~]$ lp -i 9 -q 60 -n 2

  9. [ian@atticf27 ~]$ lpq

  10. HL-2280DW is not ready

  11. Rank Owner Job File(s) Total Size

  12. 1st ian 9 .bashrc 1024 bytes

  13. 2nd ian 4 permutation.C 6144 bytes

  14. 3rd pat 6 bitlib.h 6144 bytes

  15. 4th pat 7 bitlib.C 6144 bytes

串列 5. 使用 lp 去改變列印數量和優先順序

最後,lpmove 命令可以允許一個作業從一個佇列移動到另一個佇列。例如,我們可能因為印表機 HL-2280DW 現在不能使用,而想去移動一個作業到另外的佇列上。你可以指定一個作業編號,比如 9,或者你可以用一個佇列名加一個連字元去限定它,比如,HL-2280DW-0。lpmove 命令的操作要求是授權使用者。串列 6 展示瞭如何去從一個佇列移動作業到另外的佇列,先是指定印表機和作業 ID 移動,然後是移動指定印表機的所有作業。稍後我們可以去再次檢查佇列,其中一個作業已經在列印中了。

  1. [ian@atticf27 ~]$ lpmove HL-2280DW-9 anyprint

  2. [ian@atticf27 ~]$ lpmove HL-2280DW xp-610

  3. [ian@atticf27 ~]$ lpq -a

  4. Rank Owner Job File(s) Total Size

  5. active ian 9 .bashrc 1024 bytes

  6. 1st ian 4 permutation.C 6144 bytes

  7. 2nd pat 6 bitlib.h 6144 bytes

  8. 3rd pat 7 bitlib.C 6144 bytes

  9. [ian@atticf27 ~]$ # A few minutes later

  10. [ian@atticf27 ~]$ lpq -a

  11. Rank Owner Job File(s) Total Size

  12. active pat 6 bitlib.h 6144 bytes

  13. 1st pat 7 bitlib.C 6144 bytes

串列 6. 使用 lpmove 移動作業到另外一個列印佇列

如果你使用的是 CUPS 之外的列印伺服器,比如 LPD 或者 LPRng,大多數的佇列管理功能是由 lpc 命令的子命令來處理的。例如,你可以使用 lpc topq 去移動一個作業到佇列的頂端。其它的 lpc 子命令包括 disabledownenableholdmoveredirectrelease、和 start。這些子命令在 CUPS 的相容命令中沒有實現。

列印檔案

如何去列印建立的作業?大多數圖形介面程式都提供了一個列印方法,通常是 檔案 選單下麵的選項。這些程式為選擇印表機、設定頁邊距、彩色或者黑白列印、列印數量、選擇每張紙列印的頁面數(每張紙列印兩個頁面,通常用於講義)等等,都提供了圖形化的工具。現在,我將為你展示如何使用命令列工具去管理這些功能,然後和圖形化實現進行比較。

列印檔案最簡單的方法是使用 lpr 命令,然後提供一個檔案名字。這將在預設印表機上列印這個檔案。而 lp 命令不僅可以列印檔案,也可以修改列印作業。串列 7 展示了使用這個命令的一個簡單示例。註意,lpr 會靜默處理這個作業,但是 lp 會顯示處理後的作業的 ID。

  1. [ian@atticf27 ~]$ echo "Print this text" > printexample.txt

  2. [ian@atticf27 ~]$ lpr printexample.txt

  3. [ian@atticf27 ~]$ lp printexample.txt

  4. request id is HL-2280DW-12 (1 file(s))

串列 7. 使用 lpr 和 lp 列印

表 2 展示了 lpr 上你可以使用的一些選項。註意, lp 的選項和 lpr 的很類似,但是名字可能不一樣;例如,-# 在 lpr 上是相當於 lp 的 -n 選項。檢視 man 頁面瞭解更多的資訊。

< 如顯示不全,請左右滑動 >
選項 作用
-C, -J 或 -T 設定一個作業名字。
-P 選擇一個指定的印表機。
-# 指定列印數量。註意這不同於 lp 命令的 -n 選項。
-m 在作業完成時傳送電子郵件。
-l 表示列印檔案已經為列印做好格式準備。相當於 -o raw
-o 設定一個作業選項。
-p 格式化一個帶有陰影標題的文字檔案。相關於 -o prettyprint
-q 暫緩(或排隊)後面的列印作業。
-r 在檔案進入列印池之後,刪除檔案。

表 2. lpr 的選項

串列 8 展示了一些選項。我要求列印之後給我發確認電子郵件,那個作業被暫緩執行,並且在列印之後刪除檔案。

  1. [ian@atticf27 ~]$ lpr -P HL-2280DW -J "Ian's text file" -#2 -m -p -q -r printexample.txt

  2. [[ian@atticf27 ~]$ lpq -l

  3. HL-2280DW is ready

  4. ian: 1st [job 13 localhost]

  5. 2 copies of Ian's text file 1024 bytes

  6. [ian@atticf27 ~]$ ls printexample.txt

  7. ls: cannot access 'printexample.txt': No such file or directory

串列 8. 使用 lpr 列印

我現在有一個在 HL-2280DW 列印佇列上暫緩執行的作業。然後怎麼做?lp 命令可以透過使用 -H 的各種選項來暫緩或者投放作業。串列 9 展示瞭如何投放被暫緩的作業。檢視 lp 命令的 man 頁面瞭解其它選項的資訊。

  1. [ian@atticf27 ~]$ lp -i 13 -H resume

串列 9. 重啟一個暫緩的列印作業

並不是所有的可用印表機都支援相同的選項集。使用 lpoptions 命令去檢視一個印表機的常用選項。新增 -l 選項去顯示印表機專用的選項。串列 10 展示了兩個示例。許多常見的選項涉及到人像/風景列印、頁面大小和輸出在紙張上的佈局。詳細資訊檢視 man 頁面。

  1. [ian@atticf27 ~]$ lpoptions -p HL-2280DW

  2. copies=1 device-uri=dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/

  3. finishings=3 job-cancel-after=10800 job-hold-until=no-hold job-priority=50

  4. job-sheets=none,none marker-change-time=1517325288 marker-colors=#000000,#000000

  5. marker-levels=-1,92 marker-names='Black\ Toner\ Cartridge,Drum\ Unit'

  6. marker-types=toner,opc number-up=1 printer-commands=none

  7. printer-info='Brother HL-2280DW' printer-is-accepting-jobs=true

  8. printer-is-shared=true printer-is-temporary=false printer-location

  9. printer-make-and-model='Brother HL-2250DN - CUPS+Gutenprint v5.2.13 Simplified'

  10. printer-state=3 printer-state-change-time=1517325288 printer-state-reasons=none

  11. printer-type=135188 printer-uri-supported=ipp://localhost/printers/HL-2280DW

  12. sides=one-sided

  13. [ian@atticf27 ~]$ lpoptions -l -p xp-610

  14. PageSize/Media Size: *Letter Legal Executive Statement A4

  15. ColorModel/Color Model: *Gray Black

  16. InputSlot/Media Source: *Standard ManualAdj Manual MultiPurposeAdj MultiPurpose

  17. UpperAdj Upper LowerAdj Lower LargeCapacityAdj LargeCapacity

  18. StpQuality/Print Quality: None Draft *Standard High

  19. Resolution/Resolution: *301x300dpi 150dpi 300dpi 600dpi

  20. Duplex/2-Sided Printing: *None DuplexNoTumble DuplexTumble

  21. StpiShrinkOutput/Shrink Page If Necessary to Fit Borders: *Shrink Crop Expand

  22. StpColorCorrection/Color Correction: *None Accurate Bright Hue Uncorrected

  23. Desaturated Threshold Density Raw Predithered

  24. StpBrightness/Brightness: 0 100 200 300 400 500 600 700 800 900 *None 1100

  25. 1200 1300 1400 1500 1600 1700 1800 1900 2000 Custom.REAL

  26. StpContrast/Contrast: 0 100 200 300 400 500 600 700 800 900 *None 1100 1200

  27. 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700

  28. 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 Custom.REAL

  29. StpImageType/Image Type: None Text Graphics *TextGraphics Photo LineArt

串列 10. 檢查印表機選項

大多數的 GUI 應用程式有一個列印對話方塊,通常你可以使用 檔案 >列印 選單去選擇它。圖 1 展示了在 GIMP 中的一個示例,GIMP 是一個影象處理程式。

圖 1. 在 GIMP 中列印

到目前為止,我們所有的命令都是隱式指向到本地的 CUPS 列印伺服器上。你也可以透過指定 -h 選項和一個埠號(如果不是 CUPS 的預設埠號 631 的話)將列印轉向到另外一個系統上的伺服器。

CUPS 和 CUPS 伺服器

CUPS 列印系統的核心是 cupsd 列印伺服器,它是一個執行的守護行程。CUPS 配置檔案一般位於 /etc/cups/cupsd.conf/etc/cups 目錄也有與 CUPS 相關的其它的配置檔案。CUPS 一般在系統初始化期間啟動,根據你的發行版不同,它也可能透過位於 /etc/rc.d/init.d 或者 /etc/init.d 目錄中的 CUPS 指令碼來控制。對於 最新使用 systemd 來初始化的系統,CUPS 服務指令碼可能在 /usr/lib/systemd/system/cups.service 中。和大多數使用指令碼的服務一樣,你可以停止、啟動、或者重啟守護程式。檢視我們的教程:學習 Linux,101:執行級別、引導標的、關閉、和重啟動[1],瞭解使用初始化指令碼的更多資訊。

配置檔案 /etc/cups/cupsd.conf 包含一些管理引數,比如訪問列印系統、是否允許遠端列印、本地列印池檔案等等。在一些系統上,第二部分單獨描述了列印佇列,它一般是由配置工具自動生成的。串列 11 展示了一個預設的 cupsd.conf 檔案中的一些條目。註意,註釋是以 # 字元開頭的。預設值通常以註釋的方式顯示,並且可以透過刪除前面的 # 字元去改變預設值。

  1. # Only listen for connections from the local machine.

  2. Listen localhost:631

  3. Listen /var/run/cups/cups.sock

  4. # Show shared printers on the local network.

  5. Browsing On

  6. BrowseLocalProtocols dnssd

  7. # Default authentication type, when authentication is required...

  8. DefaultAuthType Basic

  9. # Web interface setting...

  10. WebInterface Yes

  11. # Set the default printer/job policies...

  12. <Policy default>

  13. # Job/subscription privacy...

  14. JobPrivateAccess default

  15. JobPrivateValues default

  16. SubscriptionPrivateAccess default

  17. SubscriptionPrivateValues default

  18. # Job-related operations must be done by the owner or an administrator...

  19. <Limit Create-Job Print-Job Print-URI Validate-Job>

  20. Order deny,allow

  21. Limit>

串列 11. 預設的 /etc/cups/cupsd.conf 檔案的部分內容

可以用在 cupsd.conf 中使用的檔案、目錄、和使用者配置命令,現在都儲存在作為替代的 cups-files.conf 中。這是為了防範某些型別的提權攻擊。串列 12 展示了 cups-files.conf 檔案中的一些條目。註意,正如在檔案層次結構標準(FHS)中所期望的那樣,列印池檔案預設儲存在檔案系統的 /var/spool 目錄中。檢視 man 頁面瞭解 cupsd.conf 和 cups-files.conf 配置檔案的更多資訊。

  1. # Location of the file listing all of the local printers...

  2. #Printcap /etc/printcap

  3. # Format of the Printcap file...

  4. #PrintcapFormat bsd

  5. #PrintcapFormat plist

  6. #PrintcapFormat solaris

  7. # Location of all spool files...

  8. #RequestRoot /var/spool/cups

  9. # Location of helper programs...

  10. #ServerBin /usr/lib/cups

  11. # SSL/TLS keychain for the scheduler...

  12. #ServerKeychain ssl

  13. # Location of other configuration files...

  14. #ServerRoot /etc/cups

串列 12. 預設的 /etc/cups/cups-files.conf 配置檔案的部分內容

串列 12 提及了 /etc/printcap 檔案。這是 LPD 列印伺服器的配置檔案的名字,並且一些應用程式仍然使用它去確定可用的印表機和它們的屬性。它通常是在 CUPS 系統上自動生成的,因此,你可能沒有必要去修改它。但是,如果你在診斷使用者列印問題,你可能需要去檢查它。串列 13 展示了一個示例。

  1. # This file was automatically generated by cupsd(8) from the

  2. # /etc/cups/printers.conf file. All changes to this file

  3. # will be lost.

  4. HL-2280DW|Brother HL-2280DW:rm=atticf27:rp=HL-2280DW:

  5. anyprint|Any available printer:rm=atticf27:rp=anyprint:

  6. XP-610|EPSON XP-610 Series:rm=atticf27:rp=XP-610:

串列 13. 自動生成的 /etc/printcap

這個檔案中的每一行都有一個印表機名字、印表機描述,遠端機器(rm)的名字、以及那個遠端機器上的遠端印表機(rp)。老的 /etc/printcap 檔案也描述了印表機的能力。

檔案轉換過濾器

你可以使用 CUPS 列印許多型別的檔案,包括明文的文字檔案、PDF、PostScript、和各種格式的影象檔案,你只需要提供要列印的檔案名,除此之外你再無需向 lpr 或 lp 命令提供更多的資訊。這個神奇的壯舉是透過使用過濾器來實現的。實際上,這些年來最流行的過濾器就就叫做 magicfilter(神奇的過濾器)。

當列印一個檔案時,CUPS 使用多用途因特網郵件擴充套件(MIME)型別去決定合適的轉換過濾器。其它的列印資料包可能使用由 file 命令使用的神奇數字機制。關於 file 或者神奇數的更多資訊可以檢視它們的 man 頁面。

輸入檔案被過濾器轉換成中間層的光柵格式或者 PostScript 格式。一些作業資訊,比如列印數量也會被新增進去。資料最終透過一個後端傳送到標的印表機。還有一些可以用手動過濾的輸入檔案的過濾器(如 a2ps 或 dvips)。你可以透過這些過濾器獲得特殊格式的結果,或者去處理一些 CUPS 原生並不支援的檔案格式。

新增印表機

CUPS 支援多種印表機,包括:

◈ 本地連線的並行口和 USB 口印表機
◈ 因特網列印協議(IPP)印表機
◈ 遠端 LPD 印表機
◈ 使用 SAMBA 的 Microsoft® Windows® 印表機
◈ 使用 NCP 的 Novell 印表機
◈ HP Jetdirect 印表機

當系統啟動或者裝置連線時,現在的大多數系統都會嘗試自動檢測和自動配置本地硬體。同樣,許多網路印表機也可以被自動檢測到。使用 CUPS 的 web 管理工具(http://localhost:631或者 http://127.0.0.1:631)去搜索或新增印表機。許多發行版都包含它們自己的配置工具,比如,在 SUSE 系統上的 YaST。圖 2 展示了使用 localhost:631 的 CUPS 介面,圖 3 展示了 Fedora 27 上的 GNOME 印表機設定對話方塊。

圖 2. 使用 CUPS 的 web 介面

圖 3. Fedora 27 上的印表機設定

你也可以從命令列配置印表機。在配置印表機之前,你需要一些關於印表機和它的連線方式的基本資訊。如果是一個遠端系統,你還需要一個使用者 ID 和密碼。

你需要去知道你的印表機使用什麼樣的驅動程式。不是所有的印表機都支援 Linux,有些印表機在 Linux 上壓根就不能使用,或者功能受限。你可以去 OpenPrinting.org 去檢視是否有你的特定的印表機的驅動程式。lpinfo 命令也可以幫你識別有效的裝置型別和驅動程式。使用 -v 選項去列出支援的裝置,使用 -m 選項去列出驅動程式,如串列 14 所示。

  1. [ian@atticf27 ~]$ lpinfo -m | grep -i xp-610

  2. lsb/usr/Epson/epson-inkjet-printer-escpr/Epson-XP-610_Series-epson-escpr-en.ppd.gz

  3. EPSON XP-610 Series, Epson Inkjet Printer Driver (ESC/P-R) for Linux

  4. [ian@atticf27 ~]$ locate "Epson-XP-610_Series-epson-escpr-en.ppd.gz"

  5. /usr/share/ppd/Epson/epson-inkjet-printer-escpr/Epson-XP-610_Series-epson-escpr-en.ppd.gz

  6. [ian@atticf27 ~]$ lpinfo -v

  7. network socket

  8. network ipps

  9. network lpd

  10. network beh

  11. network ipp

  12. network http

  13. network https

  14. direct hp

  15. serial serial:/dev/ttyS0?baud=115200

  16. direct parallel:/dev/lp0

  17. network smb

  18. direct hpfax

  19. network dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/

  20. network dnssd://EPSON%20XP-610%20Series._ipp._tcp.local/?uuid=cfe92100-67c4-11d4-a45f-ac18266c48aa

  21. network lpd://BRN001BA98A1891/BINARY_P1

  22. network lpd://192.168.1.38:515/PASSTHRU

串列 14. 可用的印表機驅動程式

這個 Epson-XP-610_Series-epson-escpr-en.ppd.gz 驅動程式在我的系統上位於 /usr/share/ppd/Epson/epson-inkjet-printer-escpr/ 目錄中。

如果你找不到驅動程式,你可以到印表機生產商的網站看看,說不定會有專用的驅動程式。例如,在寫這篇文章的時候,Brother 就有一個我的 HL-2280DW 印表機的驅動程式,但是,這個驅動程式在 OpenPrinting.org 上還沒有列出來。

如果你收集齊了基本資訊,你可以如串列 15 所示的那樣,使用 lpadmin 命令去配置印表機。為此,我將為我的 HL-2280DW 印表機建立另外一個實體,以便於雙面列印。

  1. [ian@atticf27 ~]$ lpinfo -m | grep -i "hl.*2280"

  2. HL2280DW.ppd Brother HL2280DW for CUPS

  3. lsb/usr/HL2280DW.ppd Brother HL2280DW for CUPS

  4. [ian@atticf27 ~]$ lpadmin -p HL-2280DW-duplex -E -m HL2280DW.ppd \

  5. > -v dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/ \

  6. > -D "Brother 1" -o sides=two-sided-long-edge

  7. [ian@atticf27 ~]$ lpstat -a

  8. anyprint accepting requests since Mon 29 Jan 2018 01:17:09 PM EST

  9. HL-2280DW accepting requests since Tue 30 Jan 2018 10:56:10 AM EST

  10. HL-2280DW-duplex accepting requests since Wed 31 Jan 2018 11:41:16 AM EST

  11. HXP-610 accepting requests since Mon 29 Jan 2018 10:34:49 PM EST

串列 15. 配置一臺印表機

你可以使用帶 -c 選項的 lpadmin 命令去建立一個僅用於雙面列印的新分類,而不用為了雙面列印去建立一個印表機的副本。

如果你需要刪除一臺印表機,使用帶 -x 選項的 lpadmin 命令。

串列 16 展示瞭如何去刪除印表機和建立一個替代類。

  1. [ian@atticf27 ~]$ lpadmin -x HL-2280DW-duplex

  2. [ian@atticf27 ~]$ lpadmin -p HL-2280DW -c duplex -E -D "Duplex printing" -o sides=two-sided-long-edge

  3. [ian@atticf27 ~]$ cupsenable duplex

  4. [ian@atticf27 ~]$ cupsaccept duplex

  5. [ian@atticf27 ~]$ lpstat -a

  6. anyprint accepting requests since Mon 29 Jan 2018 01:17:09 PM EST

  7. duplex accepting requests since Wed 31 Jan 2018 12:12:05 PM EST

  8. HL-2280DW accepting requests since Wed 31 Jan 2018 11:51:16 AM EST

  9. XP-610 accepting requests since Mon 29 Jan 2018 10:34:49 PM EST

串列 16. 刪除一個印表機和建立一個類

你也可以使用 lpadmin 或者 lpoptions 命令去設定各種印表機選項。詳細資訊請檢視 man 頁面。

排錯

如果你有列印問題,嘗試下列的提示:

◈ 確保 CUPS 伺服器正在執行。你可以使用 lpstat 命令,如果它不能連線到 cupsd 守護程式,它將會報告一個錯誤。或者,你可以使用 ps -ef 命令在輸出中去檢查是否有 cupsd。
◈ 如果你試著排隊一個列印作業而得到一個錯誤資訊,指示印表機不接受這個作業,你可以使用 lpstat -a 或者 lpc status 去檢查那個印表機是否接受作業。
◈ 如果一個佇列中的作業沒有列印,使用 lpstat -p 或 lpc status 去檢查那個印表機是否接受作業。如前面所討論的那樣,你可能需要將這個作業移動到其它的印表機。
◈ 如果這個印表機是遠端的,檢查它在遠端系統上是否存在,並且是可操作的。
◈ 檢查配置檔案,確保特定的使用者或者遠端系統允許在這個印表機上列印。
◈ 確保防火牆允許遠端列印請求,是否允許從其它系統到你的系統,或者從你的系統到其它系統的資料包通訊。
◈ 驗證是否有正確的驅動程式。

正如你所見,列印涉及到你的系統中的幾個元件,甚至還有網路。在本教程中,基於篇幅的考慮,我們僅能給你的診斷提供了幾個著手點。大多數的 CUPS 系統也有實現我們所討論的命令列功能的圖形介面。一般情況下,這個介面是從本地主機使用瀏覽器指向 631 埠(http://localhost:631 或 http://127.0.0.1:631)來訪問的,如前面的圖 2 所示。

你可以透過將 CUPS 執行在前臺而不是做為一個守護行程來診斷它的問題。如果有需要,你也可以透過這種方式去測試替代的配置檔案。執行 cupsd -h 獲得更多資訊,或者檢視 man 頁面。

CUPS 也帶有一個訪問日誌和錯誤日誌。你可以在 cupsd.conf 中使用 LogLevel 陳述句來改變日誌級別。預設情況下,日誌是儲存在 /var/log/cups 目錄。它們可以在瀏覽器介面(http://localhost:631)下,從 Administration 選項卡中檢視。使用不帶任何選項的 cupsctl 命令可以顯示日誌選項。也可以編輯 cupsd.conf 或者使用 cupsctl 去調整各種日誌引數。檢視 cupsctl 命令的 man 頁面瞭解更多資訊。

在 Ubuntu 的 Wiki 頁面上的 除錯列印問題[4] 頁面也是一個非常好的學習的地方。

這就是關於列印和 CUPS 的介紹。


via: https://www.ibm.com/developerworks/library/l-lpic1-108-4/index.html

作者:Ian Shields[6] 譯者:qhwdw 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖