昨天研究了一下關於在Linux下實現打印操作的相關內容,整理記錄如下:
1.什么是CUPS
CUPS(Common UNIX Printing System,即通用Unix打印系統)是FedoraCore3中支持的打印系統,它主要是使用IPP(Internet PrintingProtocol)來管理打印工作及隊列,但同時也支持”LPD”(Line Printer Daemon)和”SMB”(ServerMessage Block)以及Socket等通信協議。
在Unix/Linux發展之初,打印總是會受到各種各樣的限制,最初的打印都是用LPD(命令行方式的打印守護程序)來實現的,它不支持IPP(Internet打印協議),而且也不支持同時使用多個打印設備。而CUPS的出現,提供了一套完整的管理打印設備、實現可靠打印、網絡打印的一套完整方案。此外,在Linux下進行CUPS驅動開發是遵循GPL協議規定的,也就是說必須開源。
CUPS實際上是一個集成的服務。包括了前端接收打印命令的相關程序,后端控制打印機硬件的程序,中間則是打印驅動。首先來看看CUPS驅動打印機的方式。當CUPS接受到打印命令時,首先會進行一個格式的預轉換,比如將.jpg等各種文件先轉換成PostScript格式,然后進一步將PostScript格式轉換成 CUPS內部格式,這個稱為PostScript到PostScript轉換,這兩種格式還是有區別的,網上能找到更為詳細的說明文件,這里我們不去深究它。
但需要知道的是一般的打印機並不能直接只是PostScript格式的信息,所以在使用過程中我們還需要安裝一類解釋性的驅動,讓CUPS能通過這類驅動將信息轉換成一般打印機能識別的信息,現在使用的最多的這類驅動名叫GhostScript。有了這個驅動還不夠,我們還需要foomatic來連接CUPS和GhostScript,它是一個腳本程序(用perl寫的),用來打包各種不同格式的打印機命令,有了這些基礎我們就可以開始安裝和配置整套的CUPS打印系統了。
2.CUPS的安裝及打印機的配置
首先我們要對CUPS進行安裝,這里以Ubuntu為例:
sudo aptitude install cupsys cupsys-client
這里使用aptitude是因為在ubuntu中,aptitude比apt-get在處理包依賴上面更有優勢,比如在實現remove操作的時候,使用aptitude能夠提供多套解除包依賴的方案供操作者選擇。
然后安裝GhostScript和foomatic:
sudo aptitude install ghostscript
sudo aptitude install foomatic
其他系統的用戶也可以訪問官網鏈接地址下載對應的源碼包自行編譯安裝。對於ghostscript一般來說可以支持大多數的打印機了,如果有特殊的打印機不能夠支持,可以到鏈接地址下載更多的驅動程序。
這樣安裝部分就已經完成了,接下來進行配置:
首先在瀏覽器輸入localhost:631,從本地631端口進入打印機配置系統。
cups的配置文件位置為/etc/cups/cupsd.conf 打開可以在里面進行一些設置,比如更改偵聽端口或添加新的端口等:
Listen localhost:631
#本地監聽地址
Listen /var/run/cups/cups.sock
#默認的監聽端口
Listen 192.168.1.3:631
#自行添加的監聽端口
配置文件里也可以對打印機網絡狀態及安全性管理進行設置,這里不再詳述。配置好這些內容之后就可以添加打印機了,我們進入本地web管理頁面,點擊Administation,在里面找到add printer,按照提示選擇機器型號、鏈接端口類型等。
只是在設置Name的時候要注意,這個名字會影響到命令行操作,所以盡量簡短好記吧。一切選擇妥當之后可以點擊打印測試頁看設置是否成功。
3.CUPS打印指令簡介
詳細的指令集可以參照官網幫助文檔鏈接地址,或者使用linux里的man指令,這里只記錄一些常用的。
lp filename: 最常用的,調用默認打印機和默認配置對文件進行打印
lpstat -p -d:輸出當前各個打印機的工作狀態,並且顯示目前的默認打印機是哪個
lpoptions -d printername:更改默認打印機為指定打印機
cancel job-id/-a:CUPS打印系統會對每一個打印任務進行編號,使用cancel指令可以中止某一個任務,或者接-a終止全部
lpmove job-id destination-printer:將某個任務移動到另外一台打印機
lp -o [...] 打印方式設置,方框里面可接的內容非常豐富:
lp -o media=Letter filename: US Letter (8.5×11 inches, or 216x279mm)
lp -o media=Legal filename:US Legal (8.5×14 inches, or 216x356mm)
全部模板及尺寸如下:
- Letter- US Letter (8.5×11 inches, or 216x279mm)
- Legal- US Legal (8.5×14 inches, or 216x356mm)
- A4- ISO A4 (8.27×11.69 inches, or 210x297mm)
- COM10- US #10 Envelope (9.5×4.125 inches, or
241x105mm) - DL- ISO DL Envelope (8.66×4.33 inches, or 220x110mm)
- Transparency- Transparency media type or source
- Upper- Upper paper tray
- Lower- Lower paper tray
- MultiPurpose- Multi-purpose paper tray
- LargeCapacity- Large capacity paper tray
也可以自定義尺寸,比如想輸出照片6寸(15.2cmx10.2cm) 只需要輸入指令lp -o media=Custom.15.2×10.2cm filename即可
lp -o landscape filename :打印成橫版
lp -o orientation-requested=N:設置旋轉方向,其中:
- -o orientation-requested=3- 不旋轉
- -o orientation-requested=4- 順時針旋轉90°
- -o orientation-requested=5- 逆時針旋轉90°
- -o orientation-requested=6- 旋轉180°
lp -o sides=two-sided-short-edge filename :打印雙面橫版
lp -o sides=two-sided-long-edge filename:打印雙面豎版
其中默認輸出是單面,即one-sided
lp -o page-set=odd filename :只打印奇數頁
lp -o page-set=even filename :只打印偶數頁
其中默認是打印到所有頁上
這里只記錄的常用的指令,其他的指令可以自行查閱網站說明