從 Linux 終端打印文件
使用 lpr 命令在終端中打印文件。
在 Linux 上打印很容易,但有時感覺要做很多工作,比如啟動應用程序、打開文件、在菜單中找到打印選項,單擊確認按鈕等等。當你是一個終端用戶時,通常希望使用簡單的觸發器執行復雜的操作。打印很復雜,但沒有什么比 lpr
命令更簡單了。
使用 lpr 命令打印
使用 lpr
命令在終端打印文件:
$ lpr myfile.odt
如果失敗的話,你需要設置默認打印機或手動指定打印機。
設置默認打印機
根據我在 1984 年印刷的 Berkeley 4.2 手冊的舊版本中找到的資料,lpr
命令會分頁并將文件發送到打印機池,后者將數據傳輸到稱為 行式打印機 的東西。
顯示 LPR 命令信息的頁面
現在,最初的 lpr
命令已經無法滿足,因為現代計算機可以訪問多臺打印機,而且是那些比點陣行式打印機復雜得多的打印機。現在有一個稱為通用 Unix 打印系統(CUPS)子系統,可以跟蹤你的計算機可以訪問的所有打印機,計算機應該使用哪個驅動程序與每臺打印機通信,默認使用哪臺打印機等等。 CUPS 捆綁提供的 lpr.cups
或 lpr-cups
命令通常以符號鏈接到 lpr
,允許你首先借助 CUPS 配置從終端打印。
使用 lpr
打印文件,你應該首先設置默認打印機。你可以在系統的打印機設置中設置:
設置默認打印機對話框
或者,你也可以使用 lpadmin
命令設置:
$ sudo lpadmin -d HP_LaserJet_P2015_Series
$ lpstat -v
device for HP_LaserJet_P2015_Series: ipp://10.0.1.222:631/printers/HP_LaserJet_P2015_Series
使用環境變量設置
你不能在沒有管理員賬戶的系統上設置默認打印機,因為更改打印機默認設置是一項特權任務。在 lpr
借助 CUPS 找到目標打印機前,它會在系統中查詢 PRINTER
環境變量。
在本例中,HP_LaserJet_P2015_Series
是打印機的名稱。將 PRINTER
設置為該值:
$ PRINTER=HP_LaserJet_P2015_Series
$ export PRINTER
一旦設置了 PRINTER
變量,你就可以打印了:
$ lpr myfile.pdf
獲取連接的打印機列表
你可以使用 lpstat
命令查看所有連接到系統接受打印任務的打印機:
$ lpstat -a
HP_LaserJet_P2015_Series accepting requests since Sun 1 Aug 2021 10:11:02 PM NZST
r1060 accepting requests since Wed 18 Aug 2021 04:43:57 PM NZST
打印到任意一臺打印機
將打印機添加到系統后,并且現在你知道如何識別它們了,你可以打印到其中任何一臺,無論你是否設置了默認打印機:
$ lpr -P HP_LaserJet_P2015_Series myfile.txt
如何定義打印機
CUPS 有一個友好的前端頁面,可通過 Web 瀏覽器如 Firefox 訪問。雖然它使用 Web 瀏覽器作為用戶界面,但它實際上是在本機(一個稱為 localhost
的位置)的 631 端口上提供服務。CUPS 管理連接到計算機的打印機,并將其配置存儲在 /etc/cups/priters.conf
中。
printers.conf
文件包含詳細描述計算機可以訪問的打印設備的定義。不要直接編輯它,但如果你想這樣做,你必須先停止 cupsd
守護進程。
一個典型的文件定義如下所示:
<Printer r1060>
Info Ricoh 1060
Location Downstairs
MakeModel Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.6
DeviceURI lpd://192.168.4.8
State Idle
StateTime 1316011347
Type 12308
Filter application/vnd.cups-raw 0 -
Filter application/vnd.cups-raster 100 rastertogutenprint.5.2
Accepting Yes
Shared No
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer
</Printer>
在本例中,打印機的名稱是 r1060
,即 “Ricoh Aficio 1060”。
MakeModel
屬性是從 lpinfo
命令中提取的,該命令列出了系統上所有可用的打印機驅動程序。假設你知道要打印到 Ricoh Aficio 1060,那么你會發出以下命令:
$ lpinfo -m | grep 1060
gutenprint.5.2://brother-hl-1060/expert Brother HL-1060 - CUPS+Gutenprint v5.2.11
gutenprint.5.2://ricoh-afc_1060/expert Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11
它會列出已安裝的相關驅動程序。
MakeModel
屬性是結果的后半部分。在本例中為 Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11
。
DeviceURI
屬性標識打印機在網絡上的位置(或物理位置,例如 USB 端口)。在本例中,它是 lpd://192.168.4.8
,因為我使用 lpd
協議將數據發送到一臺網絡打印機。在我的另一個系統上,我有一個通過 USB 連接的 HP LaserJect 打印機,因此 DeviceURI
是 hp:/usb/HP_LaserJet_P2015_Series?serial=00CNCJM26429
。
在終端中打印
將作業發送到打印機是一個簡單的過程,只要你了解連接到系統的設備以及如何識別它們。在終端打印非??焖佟⒏咝?,并且易于編寫腳本或作為批處理作業完成。試試看!