![]() |
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(30):配置打印機 |
![]() |
配置打印機本地打印機通常連接到計算機的并口上,因此在安裝打印機之前,首先要查看并口的狀態是否正常。正常情況下,缺 省的硬件配置將能夠自動偵測到計算機的并口,那么在啟動時,系統將在控制台上顯示下面的信息,如果由于滾屏太快而沒有 看到這一行的話,可以使用dmesg命令進行查看:
在FreeBSD 3.0之前使用lpt作為打印機的驅動程序,這個老驅動程序對于現有具備多個模式的并口硬 件支持能力不足。3.1之后系統的并口驅動程序更新了,使用了nlpt作為新的驅動程序名字,但設備文件的名字仍然為 /dev/lpt0。以后當老版本的驅動程序徹底從FreeBSD中消失之后,驅動程序名字會恢復為lpt。 通常不需任何配置,并口就能正常工作。此時就可以通過設備文件/dev/lpt0來直接訪問并口(0表示第一 個并口,依次類推),如果并口和打印機的電纜連接也正常,就能測試打印機是否正常,此時需要root權限。
如果對于普通行式打印機,這將打印出一頁測試信息,但如果打印機是使用PostScript或其他頁面描述語 言,打印機并不一定進行打印,但打印機的狀態指示燈將閃爍。如果打印機是PostScript打印機,可以使用下面命 令來測試:
這需要預先通過Packages Collection安裝好a2ps軟件,其中使用的-q參數表示不輸出a2ps 的狀態信息,-o -參數表示向標准輸出輸出轉化后的PS數據,如果沒有使用這個參數,則a2ps直接將PS數 據發送給lpr命令,由于此時打印系統還未設置完畢,因此需要直接輸出到打印機端口上以進行測試。 當這個測試正常之后,就可以嘗試使用lpr命令來打印文檔了。當然此時打印系統的設置還沒有完成,缺省的設置 并不一定適合每個計算機。應該調整打印設置,使得打印系統適合本系統。
當并口和打印機連接正確之后,可以進行下一步配置/etc/printcap文件了。在BSD打印系統中,使 用這個printcap文件來定義打印機,包括命名打印機、將打印緩沖區和具體的打印機相聯系等。下面的例子中配置了 兩個打印機,一個為本地的LaserJet 6P型打印機,另一個為遠程FreeBSD計算機printersvr上 的打印機。
從上面的例子可以看出printcap文件的格式: printcap中的每行描述由多個部分組成,每個部分用 “:” 分隔﹔由于對打印機的描述一行寫不下,必 須使用反斜杠 “\” 分隔,這是Unix和C語言的標准做法。為了避免出現配置錯誤等問題,不要在同一個描述部分的 中間續行﹔ 每行中的第一個描述部分定義打印機的名字,通常可以用多個名字來稱呼一個打印機,例如本例中第一個HP LaserJet 6P又有另外的名字lp、lj和ps,這些名字方便用戶和不同的程序使用打印機。這些名字之間使用豎線 “|” 分隔,習慣上使用最后一個名字作為打印機的全名﹔ 每個打印機的各個定義部分定義了打印機的不同屬性,定義方式就是上例中使用的方式,定義字符串使用 “=“ ,定義數值使用 “#” 。一個打印機應該具備下面的不同屬性: lp(local printer)定義本地打印機使用的設備,通常為并口設備/dev/lpt0。 rm(remote machine)定義遠程計算機的名字,這在使用遠程打印機時有用。 rp(remote printer)的值應該為rm定義的遠程計算機上的一個打印機名。遠程打印機不需要l p來定義打印機端口,但需要使用rm和rp定義,以將打印文件發送到遠程計算機上的正確打印機中。這個打印機名應該在 遠程計算機中/etc/printcap中進行了定義。如果沒有使用rp定義而只使用了rm定義,則使用該計算機上的 缺省打印機。 sd(spool directory)定義這個打印機使用的緩沖區目錄,這個目錄一般放在/var/spo ol的下面,并擁有合適的權限設置,以使得打印系統能正確處理緩沖區。系統缺省使用/var/spool/lpd目錄 來放置要打印的文件,不同的打印機應使用這個目錄下的不同子目錄,習慣上這個目錄名與前面定義的打印機名字相一致。 lf(log file)定義與這個打印機相聯系的日志文件,記錄出現的錯誤信息,習慣上放在/var/lo g目錄下。 mx(maximum size)定義緩沖區中打印文件的最大尺寸,單位為千字節,缺省值為0,表示不限制打 印文件的大小。 if(input filter)定義一個輸入打印過濾器,過濾器程序用于將用戶打印作業的格式轉變為打印機 能夠識別的格式。 of(output filter)定義輸出過濾器,這也是一個打印過濾器,習慣上使用if的多些,使用of 的少些。如果if和of都沒有定義,打印系統則使用缺省的過濾器/usr/libexec/lpr/lpf。 sh(suppress header),不打印標題頁。 mc(maximum coyies)定義最大的打印份數,缺省為0不限制打印份數。 br(baud rate)定義串口波特率,只有在使用串口打印機時才有用。 當將prinrcap文件設置正確之后,就能夠使用打印命令lpr來打印文本文件了,由于沒有設置打印中文或 圖形的過濾器,打印系統只能打印英文文件,它將處理過的文件直接發送到打印機上進行打印。
大多數打印機不但能打印字符,也能夠打印圖形,應用軟件通過輸出控制字符對打印機進行控制。這些控制字符就被 稱為打印機控制語言。為了將字符和圖形文件輸出到打印機上,就需要過濾器將打印文件轉化為打印機識別的打印語言。 打印過濾器是打印程序的一個重要部分,使Unix的打印系統更為靈活,從而能適合各種不同的打印機。除了將文 檔轉換為打印機識別的語言之外,還可以對要打印的文件做其他處理,例如某些行式打印機需要文檔同時使用回車和換行,而 Unix的文本文件只使用換行,此時直接打印文檔就會造成行列不齊,這些情況下就需要一個過濾器進行轉換。 打印機控制語言可以分為兩類,一種將操縱打印機進行繪圖的命令及其他控制命令通過特殊字符(或特殊字符引導的 命令)來表示,對普通字符文件不作處理,直接發送到打印機。此時普通英文字符文件可以直接發送到打印機上打印,但要打 印包括圖形在內的文件就是包括特殊控制字符的二進制文件,不能用文本方式進行查看。另一種為Postscript語言 ,它使用頁面描述語言來描述要打印的內容,可以直接打印的文件就是一個符合一定語法規則的文本文件,因此對于一個Po stScript打印機來講,一個普通文本文件只是一個不合乎語法的PostScript語言文件,不能被直接打印。 因此如果要在僅支持PostScript的打印機上打印普通文檔,也必須使用識別PostScript的過濾 器進行轉換,首先將普通文本文件轉換為PostScript語言,再發送給PostScript打印機進行打印。Fr eeBSD的Packages Collection中專門有一個類別print,提供了很多打印相關的軟件包,其中 包括很多種將文本文件轉換為PostScript文件的過濾器程序,如a2ps等。其中gb2ps能將GB編碼的文本 轉換未內嵌中文的PostScript文件,從而能在PostScript打印機上將中文文件打印出來。 因此首先應該安裝這些轉換軟件包,當安裝了這些轉換程序之后,最簡單的使用方式是先使用他們將文檔轉換為Po stscript文件,再發送給打印命令lpr,這可以通過管道來實現。一些打印工具內部就包括了使用管道,自動將生 成的Postscript數據發送給lpr命令的指令,下面的a2ps指令就直接將PostScript文件發送給l pr命令。 $ a2ps file 或者可以在printcap文件中設置if參數,以自動使用這些過濾器,此時要設置過濾程序從標准輸入上讀入 數據,將PostScript數據從標准輸出上輸出。 :if=/usr/local/bin/a2ps -q -o -: 對于要使用gb2ps來打印中文文件的情況,由于gb2ps使用參數讀入源文件、并輸出PostScript 中文文件,不使用標准輸入輸出,因此不能直接使用gb2ps作過濾器程序,而需要自己使用臨時文件保存中間結果,生成 PostSript文件之后再打印。此外,gb2ps輸出的PostScript文件都包括一頁gb2ps的版權信息 ,對于打印來講沒有必要每次都打印這個版權頁,可以使用psutils中包括的psselect程序,從原有文件中去 除第一頁,再進行打印。 高級的過濾器程序應該能夠識別各種不同格式的文檔文件,并依據文檔的格式,使用不同的過濾器功能來進行處理, 最后生成符合打印機描述語言的打印文件。
PostScript使用命令來描述頁面,雖然也是文本文件,但這里都是繪圖指令,需要一個PostScript 語言解釋器對文件中描述的指令進行解釋操作,才能得到正確的結果。因此PostScript文件在普通打印機上只 能打印出源文件,同樣普通文檔在PostScript打印機上也不能正確解釋、打印出來。下面是一個PostScript 文件的開始部分:
如果要查看PostScript的內容,則需要一個頁面語言解釋器。雖然存在不少商業PostScript解 釋器,但大部分并不見得比Ghostscript好,雖然GhostScript只是一個免費的PostScript 解釋器。GhostScript能在X Window下正確顯示PostScript文件的內容,并能實現各種強大的 PostScript處理能力。Ghostscript是一個相當復雜的程序,如果僅僅是要查看Postscript 文件的內容,可以使用命令 “gs psfile.ps” ,退出時在Ghostscript提示下輸入 “quit ” 即可。
另外,Ghostscript有一個前端程序Ghostview,能使用Ghostscript來瀏覽PostScript 文件,但使用了比較簡單的圖形操作方式。Ghostscirpt和Ghostview都可以通過Packages Collection 安裝。
通常非PostScript打印機使用特殊的ESC序列來表示命令,而對普通文本不做特殊處理,因此文本文件 仍然被看作文本文件,能夠直接打印文本文件,因此這些非PostScript的打印機能夠直接設置為普通的文本打印機 來使用。 然而要想充分發揮打印機的能力,打印包括圖形在內的文檔,就必須有能理解這台非PostScirpt打印機使 用的控制語言的過濾器。這些過濾器就相當于Windows下的打印機驅動,應該由生產這台打印機的廠商提供。但是很多 低檔打印機是專門為使用DOS或Windows的計算機生產的,沒有為Unix配置過濾器,因此在這些打印機上打印圖 形就遇到了困難。幸運的是,Ghostscript能夠識別很多種打印機,并能將PostScript文件在指定的設 備上打印出來。 因此在前面的操作中生成了Postscript文件之后,就可以使用Ghostscript在一台非Post Script打印機上打印PostScript文件,下面文件將在一台Laserjet4打印機上打印test.ps 文件。
從這些簡單的名字中很難判斷那個設備對應于自己的打印機型號,為了找出正確的設備文件名,需要閱讀Ghost script的文檔device.txt,或者選擇相近的設備名并反復嘗試。如果萬一找不到自己的文件名,也許要升級 Ghostscript的版本,或者更新自己Ghostscript的設備驅動之后再重新安裝Ghostscript 。 當能夠使用Ghostscript打印文檔之后,就需要將它和FreeBSD的打印過濾器集成在一起了,因此 首先要將打印的文檔轉換為PS文檔,然后將PS文檔轉換為打印機支持的格式,因此就需要更改過濾程序。例如在一個EP SON行式打印機上輸出文檔,使用的標准過濾應該是,最后兩個短橫線表示標准輸出和標准輸入:
設置打印機要手工編輯/etc/printcap文件,安裝并配置各種過濾器,安裝Ghostscript等。這些操作都非常煩瑣,幸好FreeBSD通過Ports Collection提供了一種自動配置打印機的apsfilter程序。 Ports Collection的機制、用法將在后面討論。 為了使用apsfilter設置打印機并配置過濾器,就需要執行下列命令:
然后,系統將自動下載、編譯安裝必要的過濾器軟件,此后將自動啟動一個設置程序,通過菜單提示讓用戶選擇打印 機的各種屬性,包括打印機的類型、端口、分辨率、紙張大小等等。最后將自動生成合適的printcap文件和各種過濾 器。這些過濾器能分辨要打印文件的類型,進行正確的處理。 apsfilter生成的過濾器是調用包括ghostscript在內的大量其他軟件,因此上面的make過 程就需要從網絡上下載必要軟件包,可以通過預先安裝相應的Packages以減少下載任務。如果網絡太慢,下載過程可 能會出現問題導致軟件安裝問題,后面會講到如何為Ports Collection手工下載必要的軟件包。
當一切都配置正確之后,使用打印機就非常簡單了。為了自動啟動lpd守護進程,需要將/etc/rc.con f文件中的lpd_enable項設置為lpd_enable=”Yes”,FreeBSD在下次系統啟動時會自動啟 動lpd。當lpd沒有啟動時,也不需要重起計算機,簡單使用root身份執行lpd就可以啟動這個守護進程。有了l pd守護進程,打印系統就能正常進行打印工作,并能針對整個網絡上的用戶,提供打印服務了。 使用者可以直接使用lpr命令打印文件,或者通過管道來使用lpr命令。
如果系統中某個打印機沒有配置打印過濾器,用戶可以直接使用自己的打印過濾器,通過管道將輸出送到lpr中。 這提供了一種較靈活的配置方式,使得用戶不需要root權限,也能使用合適的打印機過濾器。下面是一個使用gs打印文 件的例子:
注意這個例子中使用反斜線取消豎線的特殊含義,將其和緊隨其后的lpr一起作為參數發送給gs,gs再將其解 釋為管道操作。可以將上面的文件編制成shell程序,這樣每次就能更方便的使用。 當使用lpr將打印作業放入打印緩沖區之后,就能使用lpq命令來查看打印隊列的內容:
在這個例子中,由于打印機lp沒有被正常連接到系統上,因此lpq在第一行提醒使用者當前打印機不正常。由于 這台打印機工作不正常,因此用戶可能不想使用這個打印機進行打印了,而想通過其他打印機進行打印。為了避免在這台打印 機正常之后,仍然打印這個作業,需要將這個打印作業刪去。這可以通過命令lprm加上作業序號(顯示在lpq中第三列 )來完成:
或者使用all作參數,這將刪除該用戶的所有打印作業。用戶只能刪除自己的打印作業,只有root才能刪除其 他用戶的作業。如果root使用all參數,那么將會將這個打印機緩沖區中的所有打印作業全部清空。 作為系統管理員,需要進一步的能力來管理打印守護程序。BSD風格的打印系統使用lpc來執行這個功能,以 root身份啟動lpc,則進入lpc的交互模式,然后使用help命令可以得到管理命令的列表。一般可以使用start all 命令來啟動所有的打印機,或者使用stop lp命令來停止一台名為lp的打印機。
也可以用命令行的方式使用lpc,例如重新啟動所有的打印機,使用帶參數的lpc發出以下命令:
未完,待續。。。 |
||||||||||||||||||
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(30):配置打印機 | |||||||||||||||||||
Copyright(C) 1999 SINA.com, Stone Rich Sight. All Rights Reserved
版權所有 四通利方 新浪網