編譯來源:作者:Ian Shields

譯者:qhwdw

在Linux上打印

現(xiàn)在大量的溝通是電子化和無紙化的,但我們公司還有大量的資料要打印。

銀行結(jié)算單、公用事業(yè)帳單、財(cái)務(wù)和其它報(bào)告、以及收益結(jié)算單等一些東西還是需要打印的。本教程將介紹在 Linux 中如何使用 CUPS 去打印。

CUPS,是 通用 UNIX 打印系統(tǒng)(Common UNIX Printing System)的首字母縮寫,它是 Linux 中的打印機(jī)和打印任務(wù)的管理者。早期計(jì)算機(jī)上的打印機(jī)一般是在特定的字符集和字體大小下打印文本文件行?,F(xiàn)在的圖形打印機(jī)可以打印各種字體和大小的文本和圖形。盡管如此,現(xiàn)在你所使用的一些命令,在古老的行式打印守護(hù)進(jìn)程(LPD)技術(shù)的歷史中仍能找到它們。

本教程將幫你了解 Linux 服務(wù)器專業(yè)考試(LPIC-1)的第 108 號(hào)主題的 108.4 目標(biāo)。這個(gè)目標(biāo)的權(quán)重為 2。

前提條件

為了更好地學(xué)習(xí)本系列教程,你需要具備基本的 Linux 知識(shí),和使用 Linux 系統(tǒng)實(shí)踐本教程中的命令的能力,你應(yīng)該熟悉 GNU 和 UNIX? 命令的使用。有時(shí)不同版本的程序輸出可能會(huì)不同,因此,你的結(jié)果可能與本教程中的示例有所不同。

本教程中的示例使用的是 Fedora 27 的系統(tǒng)。

有關(guān)打印的一些歷史

這一小部分歷史并不是 LPI 目標(biāo)的,但它有助于你理解這個(gè)目標(biāo)的相關(guān)環(huán)境。

早期的計(jì)算機(jī)大都使用行式打印機(jī)。這些都是擊打式打印機(jī),那時(shí),它們使用固定間距的字符和單一的字體來打印文本行。為提升整個(gè)系統(tǒng)性能,早期的主機(jī)要與慢速的外圍設(shè)備(如讀卡器、卡片穿孔機(jī)、和運(yùn)行其它工作的行式打印機(jī))交叉進(jìn)行工作。因此就產(chǎn)生了在線的或者假脫機(jī)的同步外圍操作,這一術(shù)語(yǔ)目前在談到計(jì)算機(jī)打印時(shí)仍然在使用。

在 UNIX 和 Linux 系統(tǒng)上,打印初始化使用的是 BSD( 伯克利軟件分發(fā)版(Berkeley Software Distribution))打印子系統(tǒng),它是由一個(gè)作為服務(wù)器運(yùn)行的行式打印守護(hù)程序(LPD)組成,而客戶端命令如 lpr 是用于提交打印作業(yè)。這個(gè)協(xié)議后來被 IETF 標(biāo)準(zhǔn)化為 RFC 1179 —— 行式打印機(jī)守護(hù)進(jìn)程協(xié)議。

System V 也有一個(gè)打印守護(hù)程序。它的功能與BSD 的 LPD 守護(hù)程序類似,但是它們的命令集不一樣。你在后面會(huì)經(jīng)??吹酵瓿上嗤娜蝿?wù)使用不同選項(xiàng)的兩個(gè)命令。例如,對(duì)于打印文件的命令,伯克利實(shí)現(xiàn)版本是 lpr,而 System V 實(shí)現(xiàn)版本是 lp。

隨著打印機(jī)技術(shù)的進(jìn)步,在一個(gè)頁(yè)面上混合出現(xiàn)不同字體成為可能,并且可以將圖片像文字一樣打印。可變間距字體,以及更多先進(jìn)的打印技術(shù),比如間距和連字符,現(xiàn)在都已經(jīng)標(biāo)準(zhǔn)化。出現(xiàn)了幾種對(duì)基本的 lpd/lpr 方法等改進(jìn)設(shè)計(jì),比如 LPRng,下一代的 LPR,以及 CUPS。

許多可以打印圖形的打印機(jī),使用 Adobe PostScript 語(yǔ)言進(jìn)行初始化。一個(gè) PostScript 打印機(jī)有一個(gè)解釋器引擎,它可以解釋打印任務(wù)中的命令并從這些命令中生成最終的頁(yè)面。PostScript 經(jīng)常被用做原始文件(比如一個(gè)文本文件或者一個(gè)圖像文件)和最終格式?jīng)]有適合的 PostScript 功能的特定打印機(jī)之間的中間層。轉(zhuǎn)換這些特定的打印任務(wù),比如將一個(gè) ASCII 文本文件或者一個(gè) JPEG 圖像轉(zhuǎn)換為 PostScript,然后再使用過濾器轉(zhuǎn)換 PostScript 到非 PostScript 打印機(jī)所需要的最終光柵格式。

現(xiàn)在的 便攜式文檔格式(Portable Document Format)(PDF),它就是基于 PostScript 的,已經(jīng)替換了傳統(tǒng)的原始 PostScript。PDF 設(shè)計(jì)為與硬件和軟件無關(guān),它封裝了要打印的頁(yè)面的完整描述。你可以查看 以及打印 PDF 文件。

管理打印隊(duì)列

用戶直接打印作業(yè)到一個(gè)名為 打印隊(duì)列(print queue)的邏輯實(shí)體。在單用戶系統(tǒng)中,打印隊(duì)列和打印機(jī)通常是幾乎相同的意思。但是,CUPS 允許系統(tǒng)不用連接到一個(gè)打印機(jī)上,而最終在一個(gè)遠(yuǎn)程系統(tǒng)上的排隊(duì)打印作業(yè),并且通過使用分類,允許將定向到一個(gè)分類的打印作業(yè)在該分類第一個(gè)可用的打印機(jī)上打印。

你可以檢查和管理打印隊(duì)列。對(duì)于 CUPS 來說,其中一些命令實(shí)現(xiàn)了一些新操作。另外的一些是源于 LPD 的兼容命令,不過現(xiàn)在的一些選項(xiàng)通常是最初的 LPD 打印系統(tǒng)選項(xiàng)的有限子集。

你可以使用 CUPS 的 lpstat 命令去檢查隊(duì)列,以了解打印系統(tǒng)。一些常見選項(xiàng)如下表 1。

選項(xiàng)作用
-a顯示打印機(jī)狀態(tài)
-c顯示打印分類
-p顯示打印狀態(tài):enabled 或者 disabled
-s顯示默認(rèn)打印機(jī)、打印機(jī)和類。相當(dāng)于 -d -c -v。注意:要指定多個(gè)選項(xiàng),這些選項(xiàng)必須像值一樣分隔開。
-v顯示打印機(jī)和它們的設(shè)備。

表 1. lpstat 命令的選項(xiàng)

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

[ian@atticf27 ~]$ lpstat -d

system default destination: HL-2280DW

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

device for HL-2280DW: dnssd://Brother%20HL-2280DW._

[ian@atticf27 ~]$ lpstat -s

system default destination: HL-2280DW

members of class anyprint:

HL-2280DW

XP-610

device for anyprint: ///dev/null

device for HL-2280DW: dnssd://Brother%20HL-2280DW._

device for XP-610: dnssd://EPSON%20XP-610%20Series._i

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

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

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

HL-2280DW:

printer is on device 'dnssd' speed -1

queuing is disabled

printing is enabled

no entries

daemon present

列表 1. 顯示可用打印隊(duì)列

這個(gè)示例展示了兩臺(tái)打印機(jī) —— HL-2280DW 和 XP-610,和一個(gè)分類 anyprint,它允許打印作業(yè)定向到這兩臺(tái)打印機(jī)中的第一個(gè)可用打印機(jī)。

在這個(gè)示例中,已經(jīng)禁用了打印到 HL-2280DW 隊(duì)列,但是打印功能是啟用的,這樣便于將打印機(jī)脫機(jī)維護(hù)之前可以完成打印隊(duì)列中的任務(wù)。啟用還是禁用隊(duì)列,可以使用 cupsaccept 和 cupsreject 命令來管理。以前它們叫做 accept 和 reject,你或許可能在 /usr/sbin 中找到這些命令,但它們現(xiàn)在都是符號(hào)鏈接到新的命令上了。同樣,啟用還是禁用打印,你可以使用 cupsenable 和 cupsdisable 命令來管理。在早期版本的 CUPS 中,這些被稱為 enable 和 disable,它也許會(huì)與 bash shell 內(nèi)置的 enable 混淆。列表 2 展示了如何去啟用打印機(jī) HL-2280DW 上的隊(duì)列,而禁止它的打印。CUPS 的幾個(gè)命令支持使用 -r 選項(xiàng)去提供一個(gè)該操作的理由。這個(gè)理由會(huì)在你使用 lpstat 時(shí)顯示,但是如果你使用的是 lpc 命令則不會(huì)顯示它。

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

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

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

Maintenance scheduled

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

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

Maintenance scheduled

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

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

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

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

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

waiting for toner delivery

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

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

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

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

列表 2. 啟用隊(duì)列和禁用打印

注意:用戶執(zhí)行這些任務(wù)必須經(jīng)過授權(quán)。它可能要求是 root 用戶或者其它的授權(quán)用戶。在 /etc/cu 中可以看到 SystemGroup 的條目,cu 的 man 頁(yè)面有更多授權(quán)用戶組的信息。

管理用戶打印作業(yè)

現(xiàn)在,你已經(jīng)知道了一些如何去檢查打印隊(duì)列和類的方法,我將給你展示如何管理打印隊(duì)列上的作業(yè)。你要做的第一件事是,如何找到一個(gè)特定打印機(jī)或者全部打印機(jī)上排隊(duì)的任意作業(yè)。完成上述工作要使用 lpq 命令。如果沒有指定任何選項(xiàng),lpq 將顯示默認(rèn)打印機(jī)上的隊(duì)列。使用 -P 選項(xiàng)和一個(gè)打印機(jī)名字將指定打印機(jī),或者使用 -a 選項(xiàng)去指定所有的打印機(jī),如下面的列表 3 所示。

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

[pat@atticf27 ~]$ lpq

HL-2280DW is not ready

Rank Owner Job File(s) Total Size

1st unknown 4 unknown 6144 bytes

2nd pat 6 bi 6144 bytes

3rd pat 7 bi 6144 bytes

4th unknown 8 unknown 1024 bytes

5th unknown 9 unknown 1024 bytes

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

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

xp-610 is ready

no entries

[ian@atticf27 ~]$ lpq -a

Rank Owner Job File(s) Total Size

1st ian 4 6144 bytes

2nd pat 6 bi 6144 bytes

3rd pat 7 bi 6144 bytes

4th ian 8 .bashrc 1024 bytes

5th ian 9 .bashrc 1024 bytes

列表 3. 使用 lpq 檢查打印隊(duì)列

在這個(gè)示例中,共有五個(gè)作業(yè),它們是 4、6、7、8、和 9,并且它是名為 HL-2280DW 的打印機(jī)的隊(duì)列,而不是 XP-610 的。在這個(gè)示例中使用 -P 選項(xiàng),可簡(jiǎn)單地顯示哪個(gè)打印機(jī)已經(jīng)準(zhǔn)備好,但是沒有隊(duì)列任務(wù)。注意,CUPS 的打印機(jī)命名,是大小寫不敏感的。還要注意的是,用戶 ian 提交了同樣的作業(yè)兩次,當(dāng)一個(gè)作業(yè)沒有第一時(shí)間打印時(shí),經(jīng)常能看到用戶的這種動(dòng)作。

一般情況下,你可能會(huì)查看或者維護(hù)你自己的打印作業(yè),但是,root 用戶或者其它授權(quán)的用戶通常會(huì)去管理其它打印作業(yè)。大多數(shù) CUPS 命令都可以使用一個(gè) -E 選項(xiàng),對(duì) CUPS 服務(wù)器與客戶端之間的通訊進(jìn)行加密。

使用 lprm 命令從隊(duì)列中去刪除一個(gè) .bashrc 作業(yè)。如果不使用選項(xiàng),將刪除當(dāng)前的作業(yè)。使用 - 選項(xiàng),將刪除全部的作業(yè)。要么就如列表 4 那樣,指定一個(gè)要?jiǎng)h除的作業(yè)列表。

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

[pat@atticf27 ~]$ lprm

lprm: Forbidden

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

[ian@atticf27 ~]$ lprm 8

[ian@atticf27 ~]$ lpq

HL-2280DW is not ready

Rank Owner Job File(s) Total Size

1st ian 4 6144 bytes

2nd pat 6 bi 6144 bytes

3rd pat 7 bi 6144 bytes

4th ian 9 .bashrc 1024 bytes

列表 4. 使用 lprm 刪除打印作業(yè)

注意,用戶 pat 不能刪除隊(duì)列中的第一個(gè)作業(yè),因?yàn)樗怯脩?ian 的。但是,ian 可以刪除他自己的 8 號(hào)作業(yè)。

另外的可以幫你操作打印隊(duì)列中的作業(yè)的命令是 lp。使用它可以去修改作業(yè)屬性,比如打印數(shù)量或者優(yōu)先級(jí)。我們假設(shè)用戶 ian 希望他的作業(yè) 9 在用戶 pat 的作業(yè)之前打印,并且希望打印兩份。作業(yè)優(yōu)先級(jí)的默認(rèn)值是 50,它的優(yōu)先級(jí)范圍從最低的 1 到最高的 100 之間。用戶 ian 可以使用 -i、-n、以及 -q 選項(xiàng)去指定一個(gè)要修改的作業(yè),而新的打印數(shù)量和優(yōu)先級(jí)可以如下面的列表 5 所示的那樣去修改。注意,使用 -l 選項(xiàng)的 lpq 命令可以提供更詳細(xì)的輸出。

[ian@atticf27 ~]$ lpq

HL-2280DW is not ready

Rank Owner Job File(s) Total Size

1st ian 4 6144 bytes

2nd pat 6 bi 6144 bytes

3rd pat 7 bi 6144 bytes

4th ian 9 .bashrc 1024 bytes

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

[ian@atticf27 ~]$ lpq

HL-2280DW is not ready

Rank Owner Job File(s) Total Size

1st ian 9 .bashrc 1024 bytes

2nd ian 4 6144 bytes

3rd pat 6 bi 6144 bytes

4th pat 7 bi 6144 bytes

列表 5. 使用 lp 去改變打印數(shù)量和優(yōu)先級(jí)

最后,lpmove 命令可以允許一個(gè)作業(yè)從一個(gè)隊(duì)列移動(dòng)到另一個(gè)隊(duì)列。例如,我們可能因?yàn)榇蛴C(jī) HL-2280DW 現(xiàn)在不能使用,而想去移動(dòng)一個(gè)作業(yè)到另外的隊(duì)列上。你可以指定一個(gè)作業(yè)編號(hào),比如 9,或者你可以用一個(gè)隊(duì)列名加一個(gè)連字符去限定它,比如,HL-2280DW-0。lpmove 命令的操作要求是授權(quán)用戶。列表 6 展示了如何去從一個(gè)隊(duì)列移動(dòng)作業(yè)到另外的隊(duì)列,先是指定打印機(jī)和作業(yè) ID 移動(dòng),然后是移動(dòng)指定打印機(jī)的所有作業(yè)。稍后我們可以去再次檢查隊(duì)列,其中一個(gè)作業(yè)已經(jīng)在打印中了。

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

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

[ian@atticf27 ~]$ lpq -a

Rank Owner Job File(s) Total Size

active ian 9 .bashrc 1024 bytes

1st ian 4 6144 bytes

2nd pat 6 bi 6144 bytes

3rd pat 7 bi 6144 bytes

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

[ian@atticf27 ~]$ lpq -a

Rank Owner Job File(s) Total Size

active pat 6 bi 6144 bytes

1st pat 7 bi 6144 bytes

列表 6. 使用 lpmove 移動(dòng)作業(yè)到另外一個(gè)打印隊(duì)列

如果你使用的是 CUPS 之外的打印服務(wù)器,比如 LPD 或者 LPRng,大多數(shù)的隊(duì)列管理功能是由 lpc 命令的子命令來處理的。例如,你可以使用 lpc topq 去移動(dòng)一個(gè)作業(yè)到隊(duì)列的頂端。其它的 lpc 子命令包括 disable、down、enable、hold、move、redirect、release、和 start。這些子命令在 CUPS 的兼容命令中沒有實(shí)現(xiàn)。

打印文件

如何去打印創(chuàng)建的作業(yè)?大多數(shù)圖形界面程序都提供了一個(gè)打印方法,通常是 文件 菜單下面的選項(xiàng)。這些程序?yàn)檫x擇打印機(jī)、設(shè)置頁(yè)邊距、彩色或者黑白打印、打印數(shù)量、選擇每張紙打印的頁(yè)面數(shù)(每張紙打印兩個(gè)頁(yè)面,通常用于講義)等等,都提供了圖形化的工具?,F(xiàn)在,我將為你展示如何使用命令行工具去管理這些功能,然后和圖形化實(shí)現(xiàn)進(jìn)行比較。

打印文件最簡(jiǎn)單的方法是使用 lpr 命令,然后提供一個(gè)文件名字。這將在默認(rèn)打印機(jī)上打印這個(gè)文件。而 lp 命令不僅可以打印文件,也可以修改打印作業(yè)。列表 7 展示了使用這個(gè)命令的一個(gè)簡(jiǎn)單示例。注意,lpr 會(huì)靜默處理這個(gè)作業(yè),但是 lp 會(huì)顯示處理后的作業(yè)的 ID。

[ian@atticf27 ~]$ echo "Print this text" >

[ian@atticf27 ~]$ lpr

[ian@atticf27 ~]$ lp

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

列表 7. 使用 lpr 和 lp 打印

表 2 展示了 lpr 上你可以使用的一些選項(xiàng)。注意, lp 的選項(xiàng)和 lpr 的很類似,但是名字可能不一樣;例如,-# 在 lpr 上是相當(dāng)于 lp 的 -n 選項(xiàng)。查看 man 頁(yè)面了解更多的信息。

選項(xiàng)作用
-C, -J 或 -T設(shè)置一個(gè)作業(yè)名字。
-P選擇一個(gè)指定的打印機(jī)。
-#指定打印數(shù)量。注意這不同于 lp 命令的 -n 選項(xiàng)。
-m在作業(yè)完成時(shí)發(fā)送電子郵件。
-l表示打印文件已經(jīng)為打印做好格式準(zhǔn)備。相當(dāng)于 -o raw。
-o設(shè)置一個(gè)作業(yè)選項(xiàng)。
-p格式化一個(gè)帶有陰影標(biāo)題的文本文件。相關(guān)于 -o prettyprint。
-q暫緩(或排隊(duì))后面的打印作業(yè)。
-r在文件進(jìn)入打印池之后,刪除文件。

表 2. lpr 的選項(xiàng)

列表 8 展示了一些選項(xiàng)。我要求打印之后給我發(fā)確認(rèn)電子郵件,那個(gè)作業(yè)被暫緩執(zhí)行,并且在打印之后刪除文件。

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

[[ian@atticf27 ~]$ lpq -l

HL-2280DW is ready

ian: 1st [job 13 localhost]

2 copies of Ian's text file 1024 bytes

[ian@atticf27 ~]$ ls

ls: cannot access '': No such file or directory

列表 8. 使用 lpr 打印

我現(xiàn)在有一個(gè)在 HL-2280DW 打印隊(duì)列上暫緩執(zhí)行的作業(yè)。然后怎么做?lp 命令可以通過使用 -H 的各種選項(xiàng)來暫緩或者投放作業(yè)。列表 9 展示了如何投放被暫緩的作業(yè)。查看 lp 命令的 man 頁(yè)面了解其它選項(xiàng)的信息。

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

列表 9. 重啟一個(gè)暫緩的打印作業(yè)

并不是所有的可用打印機(jī)都支持相同的選項(xiàng)集。使用 lpoptions 命令去查看一個(gè)打印機(jī)的常用選項(xiàng)。添加 -l 選項(xiàng)去顯示打印機(jī)專用的選項(xiàng)。列表 10 展示了兩個(gè)示例。許多常見的選項(xiàng)涉及到人像/風(fēng)景打印、頁(yè)面大小和輸出在紙張上的布局。詳細(xì)信息查看 man 頁(yè)面。

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

copies=1 device-uri=dnssd://Brother%20HL-2280DW._

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

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

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

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

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

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

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

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

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

sides=one-sided

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

PageSize/Media Size: *Letter Legal Executive Statement A4

ColorModel/Color Model: *Gray Black

InputSlot/Media Source: *Standard ManualAdj Manual MultiPurposeAdj MultiPurpose

UpperAdj Upper LowerAdj Lower LargeCapacityAdj LargeCapacity

StpQuality/Print Quality: None Draft *Standard High

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

Duplex/2-Sided Printing: *None DuplexNoTumble DuplexTumble

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

StpColorCorrection/Color Correction: *None Accurate Bright Hue Uncorrected

Desaturated Threshold Density Raw Predithered

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

1200 1300 1400 1500 1600 1700 1800 1900 2000 Cu

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

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

2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 Cu

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

列表 10. 檢查打印機(jī)選項(xiàng)

大多數(shù)的 GUI 應(yīng)用程序有一個(gè)打印對(duì)話框,通常你可以使用 文件 >打印 菜單去選擇它。圖 1 展示了在 GIMP 中的一個(gè)示例,GIMP 是一個(gè)圖像處理程序。

圖 1. 在 GIMP 中打印

到目前為止,我們所有的命令都是隱式指向到本地的 CUPS 打印服務(wù)器上。你也可以通過指定 -h 選項(xiàng)和一個(gè)端口號(hào)(如果不是 CUPS 的默認(rèn)端口號(hào) 631 的話)將打印轉(zhuǎn)向到另外一個(gè)系統(tǒng)上的服務(wù)器。

CUPS 和 CUPS 服務(wù)器

CUPS 打印系統(tǒng)的核心是 cupsd 打印服務(wù)器,它是一個(gè)運(yùn)行的守護(hù)進(jìn)程。CUPS 配置文件一般位于 /etc/cu。/etc/cups 目錄也有與 CUPS 相關(guān)的其它的配置文件。CUPS 一般在系統(tǒng)初始化期間啟動(dòng),根據(jù)你的發(fā)行版不同,它也可能通過位于 /etc 或者 /etc 目錄中的 CUPS 腳本來控制。對(duì)于 最新使用 systemd 來初始化的系統(tǒng),CUPS 服務(wù)腳本可能在 /usr/lib/systemd/system 中。和大多數(shù)使用腳本的服務(wù)一樣,你可以停止、啟動(dòng)、或者重啟守護(hù)程序。查看我們的教程:學(xué)習(xí) Linux,101:運(yùn)行級(jí)別、引導(dǎo)目標(biāo)、關(guān)閉、和重啟動(dòng)[1],了解使用初始化腳本的更多信息。

配置文件 /etc/cu 包含一些管理參數(shù),比如訪問打印系統(tǒng)、是否允許遠(yuǎn)程打印、本地打印池文件等等。在一些系統(tǒng)上,第二部分單獨(dú)描述了打印隊(duì)列,它一般是由配置工具自動(dòng)生成的。列表 11 展示了一個(gè)默認(rèn)的 cu 文件中的一些條目。注意,注釋是以 # 字符開頭的。默認(rèn)值通常以注釋的方式顯示,并且可以通過刪除前面的 # 字符去改變默認(rèn)值。

# Only listen for connections from the local machine.

Listen localhost:631

Listen /var/run/cu

# Show shared printers on the local network.

Browsing On

BrowseLocalProtocols dnssd

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

DefaultAuthType Basic

# Web interface setting...

WebInterface Yes

# Set the default printer/job policies...

<Policy default>

# Job/subscription privacy...

JobPrivateAccess default

JobPrivateValues default

SubscriptionPrivateAccess default

SubscriptionPrivateValues default

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

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

Order deny,allow

</Limit>

列表 11. 默認(rèn)的 /etc/cu 文件的部分內(nèi)容

可以用在 cu 中使用的文件、目錄、和用戶配置命令,現(xiàn)在都存儲(chǔ)在作為替代的 cu 中。這是為了防范某些類型的提權(quán)攻擊。列表 12 展示了 cu 文件中的一些條目。注意,正如在文件層次結(jié)構(gòu)標(biāo)準(zhǔn)(FHS)中所期望的那樣,打印池文件默認(rèn)保存在文件系統(tǒng)的 /var/spool 目錄中。查看 man 頁(yè)面了解 cu 和 cu 配置文件的更多信息。

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

#Printcap /etc/printcap

# Format of the Printcap file...

#PrintcapFormat bsd

#PrintcapFormat plist

#PrintcapFormat solaris

# Location of all spool files...

#RequestRoot /var/spool/cups

# Location of helper programs...

#ServerBin /usr/lib/cups

# SSL/TLS keychain for the scheduler...

#ServerKeychain ssl

# Location of other configuration files...

#ServerRoot /etc/cups

列表 12. 默認(rèn)的 /etc/cu 配置文件的部分內(nèi)容

列表 12 提及了 /etc/printcap 文件。這是 LPD 打印服務(wù)器的配置文件的名字,并且一些應(yīng)用程序仍然使用它去確定可用的打印機(jī)和它們的屬性。它通常是在 CUPS 系統(tǒng)上自動(dòng)生成的,因此,你可能沒有必要去修改它。但是,如果你在診斷用戶打印問題,你可能需要去檢查它。列表 13 展示了一個(gè)示例。

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

# /etc/cu file. All changes to this file

# will be lost.

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

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

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

列表 13. 自動(dòng)生成的 /etc/printcap

這個(gè)文件中的每一行都有一個(gè)打印機(jī)名字、打印機(jī)描述,遠(yuǎn)程機(jī)器(rm)的名字、以及那個(gè)遠(yuǎn)程機(jī)器上的遠(yuǎn)程打印機(jī)(rp)。老的 /etc/printcap 文件也描述了打印機(jī)的能力。

文件轉(zhuǎn)換過濾器

你可以使用 CUPS 打印許多類型的文件,包括明文的文本文件、PDF、PostScript、和各種格式的圖像文件,你只需要提供要打印的文件名,除此之外你再無需向 lpr 或 lp 命令提供更多的信息。這個(gè)神奇的壯舉是通過使用過濾器來實(shí)現(xiàn)的。實(shí)際上,這些年來最流行的過濾器就就叫做 magicfilter(神奇的過濾器)。

當(dāng)打印一個(gè)文件時(shí),CUPS 使用多用途因特網(wǎng)郵件擴(kuò)展(MIME)類型去決定合適的轉(zhuǎn)換過濾器。其它的打印數(shù)據(jù)包可能使用由 file 命令使用的神奇數(shù)字機(jī)制。關(guān)于 file 或者神奇數(shù)的更多信息可以查看它們的 man 頁(yè)面。

輸入文件被過濾器轉(zhuǎn)換成中間層的光柵格式或者 PostScript 格式。一些作業(yè)信息,比如打印數(shù)量也會(huì)被添加進(jìn)去。數(shù)據(jù)最終通過一個(gè)后端發(fā)送到目標(biāo)打印機(jī)。還有一些可以用手動(dòng)過濾的輸入文件的過濾器(如 a2ps 或 dvips)。你可以通過這些過濾器獲得特殊格式的結(jié)果,或者去處理一些 CUPS 原生并不支持的文件格式。

添加打印機(jī)

CUPS 支持多種打印機(jī),包括:

  • 本地連接的并行口和 USB 口打印機(jī)

  • 因特網(wǎng)打印協(xié)議(IPP)打印機(jī)

  • 遠(yuǎn)程 LPD 打印機(jī)

  • 使用 SAMBA 的 Microsoft? Windows? 打印機(jī)

  • 使用 NCP 的 Novell 打印機(jī)

  • HP Jetdirect 打印機(jī)

當(dāng)系統(tǒng)啟動(dòng)或者設(shè)備連接時(shí),現(xiàn)在的大多數(shù)系統(tǒng)都會(huì)嘗試自動(dòng)檢測(cè)和自動(dòng)配置本地硬件。同樣,許多網(wǎng)絡(luò)打印機(jī)也可以被自動(dòng)檢測(cè)到。使用 CUPS 的 web 管理工具(http://localhost:631 或者 )去搜索或添加打印機(jī)。許多發(fā)行版都包含它們自己的配置工具,比如,在 SUSE 系統(tǒng)上的 YaST。圖 2 展示了使用 localhost:631 的 CUPS 界面,圖 3 展示了 Fedora 27 上的 GNOME 打印機(jī)設(shè)置對(duì)話框。

圖 2. 使用 CUPS 的 web 界面

圖 3. Fedora 27 上的打印機(jī)設(shè)置

你也可以從命令行配置打印機(jī)。在配置打印機(jī)之前,你需要一些關(guān)于打印機(jī)和它的連接方式的基本信息。如果是一個(gè)遠(yuǎn)程系統(tǒng),你還需要一個(gè)用戶 ID 和密碼。

你需要去知道你的打印機(jī)使用什么樣的驅(qū)動(dòng)程序。不是所有的打印機(jī)都支持 Linux,有些打印機(jī)在 Linux 上壓根就不能使用,或者功能受限。你可以去 O 去查看是否有你的特定的打印機(jī)的驅(qū)動(dòng)程序。lpinfo 命令也可以幫你識(shí)別有效的設(shè)備類型和驅(qū)動(dòng)程序。使用 -v 選項(xiàng)去列出支持的設(shè)備,使用 -m 選項(xiàng)去列出驅(qū)動(dòng)程序,如列表 14 所示。

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

lsb/usr/Epson/epson-inkjet-printer-escpr

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

[ian@atticf27 ~]$ locate "E;

/usr/share/ppd/Epson/epson-inkjet-printer-escpr

[ian@atticf27 ~]$ lpinfo -v

network socket

network ipps

network lpd

network beh

network ipp

network http

network https

direct hp

serial serial:/dev/ttyS0?baud=115200

direct parallel:/dev/lp0

network smb

direct hpfax

network dnssd://Brother%20HL-2280DW._

network dnssd://EPSON%20XP-610%20Series._i

network lpd://BRN001BA98A1891/BINARY_P1

network lpd://192.168.1.38:515/PASSTHRU

列表 14. 可用的打印機(jī)驅(qū)動(dòng)程序

這個(gè) E 驅(qū)動(dòng)程序在我的系統(tǒng)上位于 /usr/share/ppd/Epson/epson-inkjet-printer-escpr/ 目錄中。

如果你找不到驅(qū)動(dòng)程序,你可以到打印機(jī)生產(chǎn)商的網(wǎng)站看看,說不定會(huì)有專用的驅(qū)動(dòng)程序。例如,在寫這篇文章的時(shí)候,Brother 就有一個(gè)我的 HL-2280DW 打印機(jī)的驅(qū)動(dòng)程序,但是,這個(gè)驅(qū)動(dòng)程序在 O 上還沒有列出來。

如果你收集齊了基本信息,你可以如列表 15 所示的那樣,使用 lpadmin 命令去配置打印機(jī)。為此,我將為我的 HL-2280DW 打印機(jī)創(chuàng)建另外一個(gè)實(shí)例,以便于雙面打印。

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

HL2280DW.ppd Brother HL2280DW for CUPS

lsb/usr Brother HL2280DW for CUPS

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

> -v dnssd://Brother%20HL-2280DW._ \

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

[ian@atticf27 ~]$ lpstat -a

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

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

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

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

列表 15. 配置一臺(tái)打印機(jī)

你可以使用帶 -c 選項(xiàng)的 lpadmin 命令去創(chuàng)建一個(gè)僅用于雙面打印的新分類,而不用為了雙面打印去創(chuàng)建一個(gè)打印機(jī)的副本。

如果你需要?jiǎng)h除一臺(tái)打印機(jī),使用帶 -x 選項(xiàng)的 lpadmin 命令。

列表 16 展示了如何去刪除打印機(jī)和創(chuàng)建一個(gè)替代類。

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

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

[ian@atticf27 ~]$ cupsenable duplex

[ian@atticf27 ~]$ cupsaccept duplex

[ian@atticf27 ~]$ lpstat -a

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

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

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

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

列表 16. 刪除一個(gè)打印機(jī)和創(chuàng)建一個(gè)類

你也可以使用 lpadmin 或者 lpoptions 命令去設(shè)置各種打印機(jī)選項(xiàng)。詳細(xì)信息請(qǐng)查看 man 頁(yè)面。

排錯(cuò)

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

  • 確保 CUPS 服務(wù)器正在運(yùn)行。你可以使用 lpstat 命令,如果它不能連接到 cupsd 守護(hù)程序,它將會(huì)報(bào)告一個(gè)錯(cuò)誤?;蛘?,你可以使用 ps -ef 命令在輸出中去檢查是否有 cupsd。

  • 如果你試著排隊(duì)一個(gè)打印作業(yè)而得到一個(gè)錯(cuò)誤信息,指示打印機(jī)不接受這個(gè)作業(yè),你可以使用 lpstat -a 或者 lpc status 去檢查那個(gè)打印機(jī)是否接受作業(yè)。

  • 如果一個(gè)隊(duì)列中的作業(yè)沒有打印,使用 lpstat -p 或 lpc status 去檢查那個(gè)打印機(jī)是否接受作業(yè)。如前面所討論的那樣,你可能需要將這個(gè)作業(yè)移動(dòng)到其它的打印機(jī)。

  • 如果這個(gè)打印機(jī)是遠(yuǎn)程的,檢查它在遠(yuǎn)程系統(tǒng)上是否存在,并且是可操作的。

  • 檢查配置文件,確保特定的用戶或者遠(yuǎn)程系統(tǒng)允許在這個(gè)打印機(jī)上打印。

  • 確保防火墻允許遠(yuǎn)程打印請(qǐng)求,是否允許從其它系統(tǒng)到你的系統(tǒng),或者從你的系統(tǒng)到其它系統(tǒng)的數(shù)據(jù)包通訊。

  • 驗(yàn)證是否有正確的驅(qū)動(dòng)程序。

正如你所見,打印涉及到你的系統(tǒng)中的幾個(gè)組件,甚至還有網(wǎng)絡(luò)。在本教程中,基于篇幅的考慮,我們僅能給你的診斷提供了幾個(gè)著手點(diǎn)。大多數(shù)的 CUPS 系統(tǒng)也有實(shí)現(xiàn)我們所討論的命令行功能的圖形界面。一般情況下,這個(gè)界面是從本地主機(jī)使用瀏覽器指向 631 端口(http://localhost:631 或 )來訪問的,如前面的圖 2 所示。

你可以通過將 CUPS 運(yùn)行在前臺(tái)而不是做為一個(gè)守護(hù)進(jìn)程來診斷它的問題。如果有需要,你也可以通過這種方式去測(cè)試替代的配置文件。運(yùn)行 cupsd -h 獲得更多信息,或者查看 man 頁(yè)面。

CUPS 也帶有一個(gè)訪問日志和錯(cuò)誤日志。你可以在 cu 中使用 LogLevel 語(yǔ)句來改變?nèi)罩炯?jí)別。默認(rèn)情況下,日志是保存在 /var/log/cups 目錄。它們可以在瀏覽器界面(http://localhost:631)下,從 Administration 選項(xiàng)卡中查看。使用不帶任何選項(xiàng)的 cupsctl 命令可以顯示日志選項(xiàng)。也可以編輯 cu 或者使用 cupsctl 去調(diào)整各種日志參數(shù)。查看 cupsctl 命令的 man 頁(yè)面了解更多信息。

在 Ubuntu 的 Wiki 頁(yè)面上的 調(diào)試打印問題[2] 頁(yè)面也是一個(gè)非常好的學(xué)習(xí)的地方。

這就是關(guān)于打印和 CUPS 的介紹。


via:

作者:Ian Shields[3] 譯者:qhwdw 校對(duì):wxy

本文由 LCTT 原創(chuàng)編譯,Linux中國(guó) 榮譽(yù)推出

點(diǎn)擊“了解更多”可訪問文內(nèi)鏈接

1.《完全指南:在 Linux 中如何打印和管理打印機(jī)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。

2.《完全指南:在 Linux 中如何打印和管理打印機(jī)》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/why/3100068.html