Linux打印服務-CUPS的安裝、配置和使用

原文:https://blog.csdn.net/limelove/article/details/121988838

 

CUPS(Common UNIX Printing System,即通用Unix打印系統)是蘋果公司所有,一個打印集成服務。包括了前端接收打印命令的相關程序,後端控制打印機硬件的程序,中間則是打印驅動。首先來看看CUPS驅動打印機的方式。這裏要說明的是所謂驅動,其實是一系列的程序加定義文件的總和,不像我們有時候想像的那樣是一個很簡單的單一文件。當CUPS接受到打印命令時,首先會進行一個格式的預轉換,將如.jpg等各種文件先轉換成PostScript格式。然後進一步將PostScript格式轉換成 CUPS內部格式,這個稱爲PostScript到PostScript轉換,這兩種PostScript格式還是有差別的,當然大家可以不必深究(我也沒好好看,只是知道在MIME中定義了這兩種不同的PostScript)。
    以上這些都是預處理工作,接下來CUPS的工作圍繞PostScript展開,CUPS會根據PPD(PostScript Printer Description 文件)文件來選擇相應的處理流程。PPD文件其實是驅動的核心,不同的打印機有不同的PPD文件,PPD 包含有關輸出設備的信息,CUPS使用 PPD 文件中的信息來確定在打印文檔時向打印機發送哪些 PostScript 信息。需要說明的是,CUPS實際上把所有打印機都“看成”PostScript打印機,即便打印機本身不支持PostScript,也可以通過CUPS 自帶的PostScript解釋程序(pstoraster)或者GhostScript來解釋PostScript文件,從而把普通的打印機模擬成 PostScript打印機。(一般的打印機並不能識別PostScript格式的信息,所以在使用過程中我們還需要安裝一類解釋性的驅動,讓CUPS能通過這類驅動將信息轉換成一般打印機能識別的信息。)可以分爲三種,第一種就是接正在的 PostScript打印機的,而後面兩種就是分別用CUPS的pstoraster或GhostScript來解釋PostScript,虛擬出一臺 PostScript打印機。三種工作方式能夠分別支持不同的打印機(這也是CUPS兼容性非常好的原因):
    第一種,直接傳輸PostScript文件給CUPS的後臺,再將打印流傳輸到PostScript打印機,接下來的事情全部丟給打印機去處理,當然,這種打印機大多價格不菲;
    第二種方式是交給CUPS的內置程序處理,把PostScript轉換成其特有的raster格式,這種格式是CUPS特有的,至於爲什麼要轉成這種格式,是爲了方便打印機生產商,讓他們可以只需開發CUPS的raster格式到其打印機的接口,方便大家統一,但似乎這一方式的驅動還不多。
    第三種方式,也是支持打印機最多的方式,叫做GhostScript格式的驅動模式。它其實和第二種打印驅動比較類似,只把CUPS的解釋器換成了外置的 GhostScript來解釋PostScript文件,之所以這麼周折,是因爲目前支持這種方法的打印機比支持CUPS的raster的打印機要多很多。GhostScript程序是獨立於CUPS運行的,它的功能也不僅限於打印,但很多情況下通過CUPS來調用GhostScript打印是件很方便的事情。foomatic則是用於連接CUPS和GhostScript的一個腳本程序(用perl寫的),用來打包各種不同格式的打印機命令,它非常有用,對於通過CUPS調用GhostScript來說則是必須的。GhostScript格式的驅動程序很多,大家可以到Open Printing - OpenPrinting去看看,現在大部分打印機在Linux都是用GhostScript驅動的。當然,有些時候,GhostScript還不能包打天下,像HP的1020就比較特殊,它的打印流有點不一樣,需要再用特殊的程序進行處理,GhostScript負責講PostScript格式轉換成點陣模式後,還要進過foo2zjs處理,轉換成特殊的打印流,再交給後臺。這種模式,相當於給GhostScript又裝了個插件,附加了一個小模塊。
    總之,無論是哪種模式,實際上CUPS都是把打印機“看成”PostScript打印機,或是直接調用,或是用自帶的方法虛擬,或者用GhostScript虛擬。

打印驅動的安裝
Ubuntu系統爲例(命令行僅供參考,實際安裝時可能會因爲系統和版本的差別或有差異,可針對不同的系統作些修改)

(1)安裝CUPS
     sudo apt-get install cups

 

(2)安裝GhostScript
        sudo aptitude install ghostscript
(插一句,在ubuntu下,本人推薦用aptitude替代apt-get,aptitude處理包的依存關係比apt-get要好)


(3)安裝foomatic
        sudo aptitude install foomatic

 

 改用sudo apt-get install foomatic安裝

 

系統管理-軟件源中,修改官方軟件倉庫,選擇了浙江大學和阿里的鏡像。

 

 命令行輸入sudo apt-get update更新軟件源列表。再次安裝foomatic仍失敗。

http://www.openprinting.org/download/foomatic/  下載foomatic-filters-4.0.16.tar.gz壓縮包,交叉編譯安裝。(注意不要隨便換版本,以免編譯失敗)

# 1.下載源碼
wget http://www.openprinting.org/download/foomatic/foomatic-filters-4.0.16.tar.gz 
 
# 2.解壓源碼
tar xvzf foomatic-filters-4.0.16.tar.gz 
 
# 3.配置
cd foomatic-filters-4.0.16 &&
./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --build=i686-linux CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ LD=arm-linux-gnueabihf-ld RANLIB=arm-linux-gnueabihf-ranlib AR=arm-linux-gnueabihf-ar --disable-dbus --prefix=/  


 
# 4.修改文件"config.h"
sed -i '30s/#define HAVE_MALLOC 0/#define HAVE_MALLOC 1/' ./config.h &&
sed -i '37s/#define HAVE_REALLOC 0/#define HAVE_REALLOC 1/' ./config.h &&
sed -i '157s/#define malloc rpl_malloc/#define malloc_xx/' ./config.h &&
sed -i '163s/#define realloc rpl_realloc/#define realloc_xx/' ./config.h 


# 5.編譯
make

 
 
# 6.安裝
make install



到此安裝結束。只要再稍加配置,系統就應該已經能夠支持很多種打印機了。GhostScript本身就已經帶了很多打印機的驅動,還有很多GhostScript標準寫的驅動,可以從Open Printing - OpenPrinting下載到。
至於像hp 1020這樣的機器,我們還得多裝一點東西,不用擔心,此程序的作者已經想得很周到了,只需稍許幾個命令就能解決安裝。(參考rkkda.com - 

下載:
wget -O foo2zjs.tar.gz

解壓縮:
tar zxf foo2zjs.tar.gz

進入相應的目錄:
cd foo2zjs

編譯foo2zjs:
make

取得打印機的韌件(firmware):
./getweb 1020

安裝:
sudo make install

安裝熱插拔系統支持:
sudo make install-hotplug

安裝到CUPS系統:
sudo make cups

這樣,所有的安裝工作都完成了。接下來需要配置調試CUPS服務了。

CUPS系統的配置
    CUPS系統裝好的時候是隻能從本地打開的,就是安裝CUPS的那臺機器能打開:http://127.0.0.1:631。打開web頁面管理,點擊 “Administration”頁面,可以看到添加打印機的按鈕,點擊按照提示就能完成安裝(圖形界面添加打印機)

如果要支持從其他機器登錄,要修改配置文件:/etc/cups/cups.d/ports.conf,在裏面添加要監聽的地址,例如:

Listen 127.0.0.1:631
#默認的本地監聽

Listen /var/run/cups/cups.sock
#默認的監聽端口

Listen 192.168.1.2:631
#要添加的監聽地址

另外,由於安全的需要,CUPS將很多從網絡安裝維護打印機的功能作了限制,經過嘗試,建議對配置文件再做一些修改,增加幾個配置參數,降低一些安全設置,以方便在普通內網條件下使用。當然,如果你對安全性有很大的要求,請參考相CUPS的說明進行修改:

# Authenticate against system accounts by default...

...

DefaultEncryption IfRequested
#添加默認的對密碼加密的要求

... ... ...

# Restrict access to the server...

...

Allow 192.168.1.0/24
#添加可以訪問服務器的網段

... ... ...

# Restrict access to the admin pages...

...

Allow 192.168.1.0/24
#添加那些機器可以訪問管理頁面

... ... ...

# Restrict access to the admin pages...

...

Encryption Never
#表示訪問管理員頁面無需對密碼加密

... ... ...

配置完成後,就可以通過web頁面來管理你的打印機了。
 

最後,將PPD文件放到/usr/share/cups/model目錄下,CUPS就能識別你的打印機了。
     PPD文件哪裏來的呢,這個有很多途徑可以獲得:CUPS自己本身帶了很多PPD已經在/usr/share/cups/model/cups- included/目錄下存在;從linuxprinting網站,也能下載到很多的PPD文件;還有,最經典的,可以用foomatic- compiledb編譯出來,當然這個編譯過程需要相應的數據庫支持,默認編譯的時候,會把所有foomatic支持的都編譯出來,選擇你要的就好了。以 HP1020爲例,你可以直接從linuxprinting網站下到PPD;也可以在安裝好foo2zjs後,用foomatic編譯一個PPD文件,編譯好後的文件存放在當前目錄下的ppd/文件夾裏。最後把對應型號的PPD文件拷貝到/usr/share/cups/model就完成了。

CUPS系統的使用
    在使用CUPS,需要添加打印機,打開打印機。然後輸入CUPS服務器地址“http://192.168.1.2:631”打開web頁面管理,點擊 “Administration”頁面,可以看到添加打印機的按鈕,點擊按照提示選擇相應的端口和打印機信號就能完成安裝。該過程和在 widnows下安裝很類似,完成後可以點“Print Test Page”試下測試頁,打印機很快就會打出相應的頁面。到此,我們已經完全完成了對CUPS系統的配置,打印服務已經可以直接使用了。在Linux服務器上,可以直接調用CUPS服務打印文件。另外也能通過網絡,共享這臺打印機,讓其他的系統包括Windows系統使用這臺打印機。

在Window下使用CUPS共享的打印機
在Windows下,安裝CUPS共享的打印機。網上有很多解決方案,很多方案提到用samba來共享打印機,那種方法可行,但配置samba也是一項比較複雜的工作。我們完全可以使用CUPS的網絡打印功能,來完成這一任務。例如,在Windows中添加一臺網絡打印機並輸入URL:http://192.168.1.2:631/printers/HP_LaserJet_1020,就可以完成打印機添加了,之後的步驟和安裝普通的本地打印機一樣。其中“192.168.1.2:631/printers”是CUPS打印服務所在地址和端口,“HP_Laser_1020”是你的打印機名。(看有別的教程說可能需要Windows的機器先連接下打印機裝下驅動,沒有實際嘗試過)
 

總結
    通過CUPS的配置,我們能夠將普通的打印機安裝在Linux服務器上,從而提供網絡服務,相比市售的網絡打印機,這種方法不但降低了成本,一臺帶有 64M內存的奔騰就能很好的完成任務,而且該服務器還能同時兼任NAT,Web Server,FTP等服務,爲10臺以內的機器服務綽綽有餘,CPU佔用率100%的時間很少;而且相對傳統網絡打印機CUPS打印服務更加靈活可靠。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章