第二十一章、系統設定工具(網路與印表機)與硬體偵測
最近更新日期:2009/09/15
1. CentOS 系統設定工具: setup
1.1 使用者身份驗證設定 1.2 網路設定項目(手動設定IP與自動取得) 1.3 防火牆設定 1.4 鍵盤形式設定 1.5 系統服務的啟動與否設定 1.6 系統時鐘的時區設定 1.7 X 視窗介面解析度設定 2. 利用 CUPS 設定 Linux 印表機 2.1 Linux 的列印元件 (列印工作、佇列、服務與印表機) 2.2 CUPS 支援的連線模式 2.3 以 Web 介面控管網路印表機 2.4 以 Web 介面控管 USB 本機印表機 2.5 將 Linux 本機印表機開放成為網路印表機 2.6 手動設定印表機: lpadmin, lpstat, lpr, lp, lpq, lprm 3. 硬體資料收集與驅動,及 lm_sensors 3.1 硬體資訊的收集與分析: lspci, lsusb, iostat... 3.2 驅動 USB 裝置 3.3 使用 lm_sensors 取得溫度、電壓等資訊: sensors-detect, sensors 3.4 udev與 hal 簡介 4. 重點回顧 5. 本章習題 6. 參考資料與延伸閱讀 7. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23898 ![]() 系統設定除了使用手動的方式編輯設定檔之外 (例如 /etc/inittab, /etc/fstab 等),其實在 Red Hat 系統的 RHEL, CentOS 及 Fedora 還有提供一支綜合程式來管理的,那就是 setup 這個指令的功能囉!老實說, setup 其實只有在 Red Hat 的系列才有, 在其他的 Linux distributions 並不存在,因此,鳥哥並沒有很要求一定要學會這傢伙的。 只不過,setup 還是挺好用的,所以我們還是來玩玩吧! 這個 setup 的處理方法非常的簡單,就是利用 root 的身份下達這個指令,如果你已經使用遠端操作系統的話, 記得最好切換一下語系成為英文語系 (比較不會出現邊框是亂碼的情況) ,結果就會出現如下的畫面了。 ![]() 圖1.0、 setup 的指令執行畫面示意圖 如上圖所示,那就是 setup 提供的各項系統設定功能。這個畫面的使用方式其實在圖中的最底下一行有說明了, 可以利用 [tab] 按鍵在三個畫面中切換,使用 Run Tool 可以開始設定該項目,使用 Quit 可以離開 setup 指令。 那麼上面的主選單部分有哪些功能呢?這些設定的基本功能是這樣的:
底下我們就來約略的介紹一下這些玩意兒吧!除了網路 IP 的設定外,其餘的部分鳥哥會很快的帶過去而已。
畢竟 setup 僅是一個統整的工具,每個設定項目其實都牽涉到各自的基礎功能,那些基礎功能還得要持續摸索的... ![]() 在按下了『 Authentication configuration 』項目後,會出現如下畫面: ![]() 圖 1.1.1、Setup 指令的使用者身份認證機制 我們的 Linux 除了使用自己提供的使用者密碼驗證機制之外,還能夠使用其他外部身份驗證伺服器所提供的各項驗證功能喔。 在上面圖示的左側 User Information 的地方指的是:我們系統上的使用者可以使用什麼方式對外取得帳號資訊, 也就是說,這部主機除了 /etc/passwd 的帳號之外,還能夠使用其他的帳號來登入系統的。我們支援的帳號管理伺服器主要有 LDAP, NIS, Winbind 等。 至於右側的 Authentication 則是登入時需要提供的身份驗證碼 (密碼) 所使用的機制為何。 在預設的情況下,我們身份驗證僅參考本機的 /etc/passwd, /etc/shadow 而已,而且使用 MD5 的密碼驗算機制, 因此上圖右側的部分僅會有最上方兩個而已。事實上,這個部分的設定主要是修改了 /etc/sysconfig/authconfig ,同時還加入了各個伺服器的用戶端程式設定功能哩。 你一定會問,那麼什麼時候可以用到這個機制呢?思考一下,如果你的網路環境是電腦教室, 你希望每個同學都能夠有自己的帳號來登入每部主機。此時,你會希望每部主機都幫同學建立同一個帳號嗎? 那如果每一個同學都想要修改密碼,那就糟了!因為每部主機都得要重新修改密碼才行啊!這個時候帳號管理伺服器就很重要了。 他的功能有點像底下這樣: ![]() 圖 1.1.2、身份管理伺服器的功能示意圖 如上圖所示,我 vbird 想要登入某一部主機時,這部主機會向外要求帳號資訊,就是最上方那部伺服器。 此時,你只要在最上方的伺服器上將該帳號設定好,並且在每部主機都利用 NIS 或 LDAP 功能來指定身份查詢的方向, 那麼 vbird 就能夠使用同一組帳號密碼來登入每部主機了,這樣管理是否很方便呢?因為只要管理一部伺服器即可嘛! 我們在伺服器篇談到 NIS 時再來實作這個環境喔!
![]() 網路其實是又可愛又麻煩的玩意兒,如果你是網路管理員,那麼你必須要瞭解區域網路內的 IP, gateway, netmask 等參數,如果還想要連上 Internet ,那麼就得要理解 DNS 代表的意義為何。如果你的單位想要擁有自己的網域名稱, 那麼架設 DNS 伺服器則是不可或缺的。總之,要設定網路伺服器之前,你得要先理解網路基礎就是了! 沒有人願意自己的伺服器老是被攻擊或者是網路問題層出不窮吧!^_^ 但鳥哥這裡的網路介紹僅止於當你是一部單機的 Linux 用戶端,而非伺服器!所以你的各項網路參數只要找到網路管理員, 或者是找到你的 ISP (Internet Service Provider) ,向他詢問網路參數的取得方式以及實際的網路參數即可。 通常網路參數的取得方式在台灣常見的有底下這幾種:
瞭解了網路參數的取得方法後,你還得要知道一下我們透過啥硬體連上 Internet 的呢?其實就是網路卡嘛。 目前的主流網卡為使用乙太網路協定所開發出來的乙太網卡 (Ethernet),因此我們 Linux 就稱呼這種網路介面為 ethN (N 為數字)。 舉例來說,鳥哥的這部測試機上面有一張乙太網卡,因此鳥哥這部主機的網路介面就是 eth0 囉 (第一張為 0 號開始)。 好了,那就讓我們透過 setup 來設定網路吧!按下『 Network Configuration 』會出現如下畫面: ![]() 圖 1.2.1 、 setup 的網路介面選擇示意圖 上圖中那個 eth1.bak 是系統捉錯的檔案,因為這個程式會跑到 /etc/sysconfig/network-scripts/ 目錄下找出檔名為 ifcfg-ethN 的檔案內容來顯示的。因為鳥哥僅有一張網卡,因此那個 eth1 不要理會他!直接點選 eth0 之後就會產生如下的畫面: ![]() 圖 1.2.2 、 網路介面的各項網路參數設定示意圖 上圖中那個 Name 與 Device 名稱最好要相同,盡量不要修改他!這裡的設定是這樣的:
如果你是使用 ADSL 撥接的話,那麼上面的設定項目就不適用了。 你得要使用 (1)adsl-setup 來進行設定,然後再以 (2)adsl-start 來啟動 ADSL 撥接, 詳細的方法我們會在伺服器篇再來介紹的。上面談的都是 IP 的取得方式,並沒有談到主機名稱解析的部分 (DNS)。 只有手動設定者才需要進行 DNS IP 的設定,使用 dhcp 及 adsl-start 者都不需要進行底下的動作啦! 假設你的 DNS IP 為中華電信的 168.95.1.1 時,那就得這樣設定:
重點是 nameserver 後面加上你的 DNS IP 即可!一切設定都妥當之後,你還得要進行一個任務,那就是重新啟動網路看看囉! 重新啟動網路的方法很簡單,這樣做即可:
由於網路涉及的範圍相當的廣泛,還包括如何進行網路除錯的工作等,鳥哥將這部份寫在伺服器篇了,所以這裡不再多費唇舌。 假設你現在已經連上 Internet 了,那麼防火牆的設定則不可不知啊!底下就來談談。 ![]() 防火牆的認識是非常困難的,因為你必須要有很強的網路基礎概念才行。CentOS 提供的這個簡單的設定其實有時候反而會讓我們困擾不已。基本上,這裡僅是介紹『你可以這樣做』,但並不代表『你必須這樣做』! 所以,有興趣的還是得要再繼續鑽研網路技術喔! ^_^。好了,在按下 Firewall configuration 後,會出現如下畫面: ![]() 圖 1.3.1 、 setup 進入防火牆設定示意圖 上圖中主要出現兩個部分,一個是關於 SELinux 的部分,一個則是防火牆的部分。SELinux 我們在第十七章介紹過了,這裡不再浪費篇幅。 請依據你的需求設定 Enforcing, Permissive 或 Disabled 吧!(當然最好還是務必要啟動 SELinux 啦!) 防火牆的部分,由於我們安裝時建議不要啟動防火牆, 因此上圖你會看到『 Disabled 』的部分被選擇了。但是由於現在你的系統已經上網了 (假設已經上網了), 那麼你務必要啟動防火牆來管理網路才好。由於預設你的防火牆會開放遠端主機對你的登入連線, 因此最好使用 Customize (客戶設定) 來改變設定比較好喔!按下『 Customize 』會出現如下圖示: ![]() 圖 1.3.2 、 客製化防火牆抵擋機制的示意圖 這個地方不是三言兩語講的完的!包括信任網域,以及允許進入的伺服器封包~很是麻煩。基本上,你只要這樣想就好了:
基本上,這個動作僅是在建立 /etc/sysconfig/iptables 這個檔案而已。 而這個檔案預設是不存在的 (因為我們沒有啟動防火牆啊!) 。這裡你先有個概念即可,因為,我們未來會介紹以 shell script 的方式建立屬於您自己的防火牆系統,細節我們會在伺服器篇慢慢作介紹的啊! 如果你已經有網路了,記得在這個項目的設定中,於圖 1.3.1 選擇防火牆為『 Enable 』的狀態,按下『 Customize 』進入圖 1.3.2 當中取消 ssh 的勾選,最後再回到 1.3.1 當中按下『 OK 』來啟動 Linux 用戶端的防火牆設定吧! 這樣你的系統就具有最起碼的防火牆功能囉! ^_^ ![]() 某些情況底下你的鍵盤可能會發生一些對應錯誤的情況,舉例來說,使用的鍵盤並非台灣常見的 104 按鍵導致很多英文對應不起來。 此時你可以使用 setup 來修改喔!按下『 Keyboard configuration 』會出現如下的畫面: ![]() 圖 1.4.1 、鍵盤形式選擇 其實這個檔案就僅會修改 /etc/sysconfig/keyboard 啦!很簡單的設定項目。 ![]() 我們在第十八章談過系統服務的啟動與關閉, 當時介紹過 ntsysv 吧?沒錯~這個 System services 的項目就是會呼叫出 ntsysv 這支程式來處理服務的設定啦!詳細的設定請回第十八章參考吧!這裡不再浪費篇幅囉! 因為....鳥哥實在太會碎碎唸了,再加上圖示,唔!好佔篇幅~ @_@ ![]() 我們知道地球是圓的,所以想要看王建民在紐約投球都得要三更半夜才有辦法看的到!這也就是說, 其實在同一個時間點全世界的時鐘指的時間都不相同啊!我們的 Linux 是支援多國語系的國際化作業系統, 所以你可以將這部主機拿到任何地方且不需要修改系統時鐘,因為系統會主動的依據你提供的時區來變化時間的。 當你將筆記型電腦帶到美國紐約並且想要變更成為美國時間時,可以按下『 Timezone configuration 』的項目: ![]() 圖 1.6.1 、 setup 的時區選擇 如上圖所示,你在上半部畫面中,可以使用鍵盤方向鍵來選擇正確的位置,然後再用 [tab] 移動到 [OK] 即可! 時區的設定,其實就是找出與 /etc/sysconfig/clock 有關的設定項目而已。實際上,上面圖示出現的咚咚,就與 /usr/share/zoneinfo/ 目錄內的資料有關而已。 ![]() X Window System 我們會在第二十四章再來詳細說明,這裡僅是告知一下, 如果你想要變更你的 X 視窗介面的解析度時,就可以使用這個項目了。不過要注意的是,這個項目的執行不可以使用類似 ssh 通訊協定連線後,在遠端主機上執行這個設定項目。因為這個項目的執行會產生一個新的 X 終端機在 tty7 或 tty8 上頭, 因此,你如果使用遠端連線機制的話,會看不到畫面的啦!理解乎? 在你點選了『 X configuration 』之後,就會出現如下的圖樣。其中以硬體及設定兩個頁面較常被變更。 先來瞧瞧圖示吧: ![]() 圖 1.7.1 、 setup 的 X 解析度設定 如上所示,由於視窗解析度的範圍與螢幕的支援有關,因此你必須要先處理螢幕的更新頻率後才能夠修改視窗解析度。 所以我們會先處理『硬體』部分,鳥哥的螢幕是舊式的 4:3 傳統螢幕,所以選擇 1024x768 ,如果你的螢幕是新型的寬螢幕, 那麼請自行挑選適當的解析度吧。處理完畢後就能夠開始設定視窗解析度了,如下所示: ![]() 圖 1.7.2 、 setup 的 X 解析度設定 如上圖所示,此時會出現可調整的解析度啦!整理整理就能夠顯示出你想要的視窗解析度。 其實這些設定都是修改 /etc/X11/xorg.conf 這個設定檔啦!等到了第二十四章時,我們再來詳細的談談這玩意吧! 至於關於 X 方面的登錄檔則在 /var/log/Xorg.0.log 囉! 鳥哥個人認為,這個 setup 的工具是很好用的~只是,如果能夠完全清楚整個系統架構的話, 再來玩這個小程式會比較好啦! ^_^。另外,原本的舊版 CentOS 還有提供印表機的設定功能,不過由於新版的資料已經轉由 CUPS 負責列印, 而列印可以使用瀏覽器介面來顯示,因此就取消了這個 setup 的元件啦!底下我們就來玩玩如何簡單的設定你的印表機吧! ![]() 印表機對於日常生活來說,很重要吧!呵呵~沒錯啊!尤其我們的 Linux 主機如果未來還要作為
Printing server 的話,那麼自然就得要先建立好印表機的連線啦!在本章裡面我們僅談論一下如何讓你的 Linux 可以連接到印表機,
讓你的 Linux 可以順利的將文件資料列印出來啦!現在就來談談先! ![]()
要談論 Linux 的列印,首先就得要知道 Linux 底下整個列印的行為是怎樣的一個流程呢?而且, 也得要瞭解一下你的硬體是否支援列印工作嘛!在硬體部分,你必須要在 BIOS 將印表機的支援啟動才行! 不過,這大概都屬於舊式印表機才需要的動作啦!為啥呢?因為現在印表機大部分都是 USB 或者是網路印表機了, 根本不需要使用 25 針序列埠的支援!
除了主機本身的支援之外,你的印表機也必須要能夠支援 Linux 才行!其實並不是 Linux 的問題啦!而是印表機製造商必須要能夠提供給 Linux 用的驅動程式,這樣你的 Linux 才能夠使用該型號的印表機。 老實說,鳥哥是 HP 印表機的愛好者,因為 HP 印表機對 Linux 的支援非常好!但是另一牌的 L 開頭的印表機總是很慢或者不推出給 Linux 用的驅動程式,所以該牌的印表機很難安裝在 Linux 主機上!真困擾。
那到底你該如何確認你的印表機有支援 Linux 呢?或者是,如果你想要購買新的印表機時, 如何查詢該印表機能否在 Linux 上面安裝呢?很簡單,直接到底下的網站去查詢一下即可喔! 舉例來說,鳥哥現在的研究室有一部 HP 的 LaserJet P2015dn 印表機,我想要知道這部印表機對 Linux 的支援度好不好, 那就先進入上述的網站連結,出現如下的畫面: ![]() 圖 2.1.1 、 印表機支援網站的主畫面 在如上畫面中請按下『 Printers 』來觀察印表機的特色吧!會出現如下畫面: ![]() 圖 2.1.2 、 選擇印表機示意圖 在上圖中填入正確的廠牌 (HP) 以及正確的印表機型號 (LaserJet P2015dn) 後,請按下『 Show 』那個按鈕, 該網站就會從資料庫內捉出支援度的情況給你看,如下圖所示: ![]() 圖 2.1.3 、 鳥哥的印表機對 Linux 的支援度 在顯示的畫面中,你最要注意的是那個企鵝數量啦!如果達到 3 隻,那就代表支援度是非常完美的。
兩支企鵝是可接受的範圍內。如果是小於一隻企鵝時,那麼該印表機對 Linux 的支援可能就是比較差的喔!
還好,鳥哥這部含有網路功能的印表機還有兩隻企鵝的支援,等一下應該能夠順利安裝到俺的 Linux 測試機上吧!
你有沒有發現,在印表機還沒有啟動電源的情況底下,其實我們還是可以透過軟體來將某個工作列印出來的, 只是該項工作就會被放入到等待的環境中 (佇列) 。為什麼會這樣呢?這是因為整個列印的行為被區分為許多部分, 每個部分都可以單獨存在的啦!我們將整個部分繪製成下圖來瞧瞧: ![]() 圖 2.1.4、 列印行為之各元件示意圖 我們大概可以將上圖區分為幾個部分來說明:
![]() 如果你的印表機具有網路卡,那麼你當然可以使用網路連線到你的印表機上面囉!不過,這種印表機提供什麼服務呢? 也就是說,你可以使用什麼連線協定來連上印表機呢?常見的印表機連線分享方式有底下這些:
CentOS 5.x 預設提供的就是 CUPS 的 IPP 協定喔!而且 CUPS 預設開機就啟動了, 因此,你可以隨時隨地的以 Web 介面設定自己的印表機呢!真是非常方便! 那如果你的印表機是透過線材 (USB/序列埠) 連上主機的呢?那就得要考慮底下的連接介面囉!
![]() 事實上,管理 Linux 的印表機是非常簡單的一件事情,因為你只要啟動 CUPS 之後,再以瀏覽器介面來管理即可。 不過,在預設的情況底下,要進行瀏覽器介面的管理動作時,你必須要:
如果你想要在區域網路內將印表機的控制權挪出來給其他用戶管理時,就得要修改 CUPS 的設定了。
在這裡,我們先以本機的方式來處理印表機的連線喔!首先,鳥哥以具有網路卡的印表機 HP LaserJet P2015dn 這部為例
(因為鳥哥也只有這部印表機具有網卡啊!),這部印表機的 IP 為 192.168.201.253,而鳥哥 Linux 測試機 IP 為
192.168.201.250。然後,你可以這樣做:
如果想要加入 CUPS 的網路印表機,那麼你的印表機當然就得要支援 CUPS 認識的通訊協定囉!如何確定呢? 首先,你必須要依照你印表機所提供的手冊去設定好 IP ,以鳥哥上面的環境來說,我的印表機 IP 為 192.168.201.253 , 因此我可以這樣確定該印表機是否存在喔: 這樣就確定我的印表機實際存在,且這部印表機僅支援 HP 獨家的網路服務 (port 9100) 以及舊版的 LPD 服務而已, 這個資訊很重要,因為等一下我們使用 CUPS 連線時,就得要使用這個 LPD 的服務喔!另外,請特別給他留意一下, 那個 nmap 是個可以掃瞄主機埠口的軟體 (port scan) ,這個軟體其實是駭客軟體,他預設並沒有安裝到 CentOS 上, 但是你可以使用『 yum install nmap 』來安裝他。請注意,因為這個軟體可以是惡意攻擊的,因此千萬不要用來查閱別人的主機,否則恐怕會有違法之虞喔!! 接下來,讓我們來瞭解一下,系統有沒有 CUPS 的支援吧!
再來查看看你的主機是否已經啟動了 CUPS 呢?使用 netstat 這個指令看看:
確實有啟動 631 埠口以及 cupsd 的服務。接下來,我們可以直接連上 CUPS 了!請打開瀏覽器, 然後在網址列輸入『 http://localhost:631 』即可!因為瀏覽器要連接的並非正規的 WWW 服務埠口, 因此就得要加上冒號 (:) 來指定埠口連接!順利的話,應該可以出現如下畫面: ![]() 圖 2.3.1、 CUPS 進站畫面 主畫面主要可以分為上下兩個按鈕列來說明,其中又以下方的按鈕列為常見的操作項目。我們會用到的按鈕大概就是:
不囉唆,趕緊來新增印表機看看!按下『 Add Printer 』項目吧: ![]() 圖 2.3.2、 CUPS 新增印表機的畫面示意圖 上面圖示中,最重要的其實是那個『 Name 』的項目,那就是你印表機的佇列名稱!未來所有列印的工作都是放在該名稱底下排隊的! 鳥哥的這個印表機名稱比較複雜啦!你可以取個比較簡單的名字,以後比較容易使用指令列軟體來列印啦! 至於位置 (Location) 與描述 (Description) 都是這個印表機的說明,可寫可不寫!寫完後按下『 continue 』吧! ![]() 圖 2.3.3、選擇印表機所提供的服務項目 接下來則是選擇這個印表機佇列所連線的印表機提供什麼服務的列印功能?你可以看到前一小節我們使用 nmap 的時候就發現 port 9100 就是 HP JetDirect ,因此我們可以選擇上圖的第一個項目。 由於這部印表機也提供 port 515 的 LPD 服務,因此你也可以選擇上圖的『 LPD/LPR Host or Printer 』項目。 不過,在這裡鳥哥選擇的是第一項啦!選擇完畢後再按下『 Continue 』進入印表機的實體位置項目,如下圖: ![]() 圖 2.3.4、填寫印表機的實際連線方式,要填正確! 上圖有提供很多範例,我們由於使用到 port 9100 ,因此使用的就是 socket:// 那個範例使用的狀態。 填寫正確的位置後,接下來按下『 Continue 』來繼續選擇印表機的型號吧! ![]() 圖 2.3.5、選擇印表機的實際型號(驅動程式確認) 如上圖所示,我們選擇的是 HP 的廠牌!廠牌選擇完畢後會出現如下圖的型號選擇: ![]() 圖 2.3.6、選擇印表機的實際型號(驅動程式確認) 但上圖中我們並沒有看到 P2015dn 這部印表機的型號!那怎辦?沒關係,可以連線到 http://www.linuxfoundation.org/en/OpenPrinting 網站下載適當的驅動程式後, 按下上圖中的『瀏覽』按鈕來選擇該檔案即可。不過,從該網站的介紹中,可以發現鳥哥的這部印表機似乎使用預設的 Postscript 驅動程式即可,該網站也沒有提供這部印表機的驅動程式啊!那怎辦?沒關係,在 /usr/share/cups/model/ 目錄下就有預設的驅動程式啦!所以請按下『瀏覽』來處理一下! ![]() 圖 2.3.7、選擇驅動程式檔案 如上圖所示,選擇正確的驅動程式,然後再按下『開啟』按鈕,最後按下『 Add Printer 』按鈕就可以進入管理員密碼輸入畫面: ![]() 圖 2.3.8、輸入管理員帳號密碼(預設用 root) 到此為止我們的印表機設定就 OK 了!如果你回到 CUPS 的進站畫面,並且點選 Printers 之後,就會出現如下的印表機畫面: ![]() 圖 2.3.9、印表機的控制畫面 上面畫面中的按鈕都看的懂吧?其中比較重要的是那個『 Set As Default 』項目, 那就是設定為『預設印表機』,當你產生列印工作後,該工作預設就會丟給這個 hp_lj_p2015dn 的佇列來處理的意思喔。 接下來,當然就是按下『 Print Test Page 』看看能否列印出正確的畫面囉!如果可以順利的列印,恭喜您! 印表機設定成功! ![]() 上一小節提到的是網路印表機,那如果你的印表機是一般普通的具有 USB 介面的印表機呢? 由於印表機的裝置檔名為 /dev/usb/lp0 開始的名稱,既然已經知道印表機名稱了,那麼我們先來注意看看 USB 是否有捉到該印表機, 由於我們的 Linux 已經能夠處理隨插即用 (PnP) 的裝置,因此直接執行 ls 去查閱檔名是否存在即可:
老實說,除非你的 USB 印表機是非常冷門的機種,否則,我們的 CUPS 應該已經自動的捉到並且設定好該印表機囉! 以鳥哥為例,鳥哥辦公室的事務機為 HP Diskjet F380 ,如果使用列出 USB 裝置的 lsusb 時,可以看到:
接下來,同樣的我們使用 CUPS 的 Web 介面來設定一下這部印表機吧!在網址列輸入 http://localhost:631 之後再按下『Manage Printers』會出現如下畫面: ![]() 圖 2.4.1 、由 HAL 機制順利取得的 USB 印表機 由上圖我們可以發現 CUPS 已經捉到了印表機了!連驅動程式都安裝妥當!這是怎麼回事啊? 這是因為 CentOS 提供了 HAL 的機制來處理 PnP 裝置的緣故。關於 HAL 的機制我們會在下一小節再來討論。 不過由於這個裝置使用的是 HAL 提供的裝置檔名,我們如果想要使用 /dev/usb/lp0 來作為印表機的輸出檔名的話, 那麼就自己來建立一個印表機的佇列吧!同樣的在 CUPS 畫面中按下『 Add Printer 』來新增一個印表機: ![]() 圖 2.4.2 、 輸入佇列名稱 ![]() 圖 2.4.3 、指向第一個 USB 裝置處 如上圖所示,你要指定的是那個有 #1 的位置,那就是我們的第一個 USB 插槽位置喔! ![]() 圖 2.4.4 、選擇印表機的驅動程式 ![]() 圖 2.4.5 、最終結果 如上圖所示,最後就會多出一個名為 deskjet_f380 的印表機名稱,接下來當然就是『 Print Test Page 』測試看看能否列印囉。 如果能夠列印得出來,那就是設定妥當了。所以說, USB 印表機的設定要簡單太多囉! ^_^ ![]() 想像一個狀況,你僅有 USB 印表機安裝在 Linux 上頭,整個辦公室或實驗室裡面僅有這部印表機。 雖然你可以加裝列印伺服器來使 USB 印表機變成網路印表機,但總是得多花錢啊! 有沒有辦法可以讓你的本機印表機變成網路印表機呢?有的,那就是修改 CUPS 的設定即可。如何修改呢? 我們還是透過 CUSP 的瀏覽器介面來處理即可喔!選擇『Administration』會出現如下畫面(在畫面的最右邊): ![]() 圖 2.5.1 、勾選可讓 CUPS 成為列印伺服器的功能 如上圖所示,在箭頭指定的地方進行勾選即可。勾選完畢後按下『 Change Settings 』就能夠讓你的 CUPS 變成列印伺服器! 而你原本的印表機就會成為:『ipp://你的IP:631/printers/印表機佇列名稱』,舉例來說,鳥哥這部 Laserjet p2015dn 在網路上看到的就會是:『ipp://192.168.201.250/printers/hp_lj_p2015dn』的名稱啊! 你可以在其他用戶端電腦上面以這個 URI 來進行連線哩! ![]() 事實上我們剛剛在上面所進行的各項動作大多是在修改 /etc/cups/ 裡面的幾個檔案而已啊!幾個重要的檔案為:
既然只是改了這幾個設定檔,你當然也可以使用 vim 去編輯,不過,因為涉及硬體連線的問題,
因此還是建議使用 web 介面來進行修改啦。不過,某些時候如果你沒有瀏覽器介面時,那麼使用終端機介面的指令來修改也是可以的。
我們底下只以鳥哥辦公室擁有的這一部 HP P2015dn 的雷射印表機來作為範例喔!
首先你必須要前往印表機網站下載你的印表機驅動程式定義檔。鳥哥之前已經查詢過,這部印表機使用預設的 PPD 檔案即可。
所以鳥哥這部印表機的驅動程式定義檔基本上在: /usr/share/cups/model/postscript.ppd.gz 。
如果你有自己下載自己印表機的驅動程式時,請將你下載的檔案放置到 /usr/share/cups/model/ 目錄下,
因為後續要操作的指令會到此目錄中找尋驅動程式定義檔喔!
接下來請確定你的 CUPS 是有啟動的,而且印表機也已經打開電源了。啟動 CUPS 的方法與檢查是否啟動 CUPS 的操作如下:
從上面的輸出可以很清楚的看到鳥哥的印表機與 Linux 上面的 CUPS 都有順利的運作中!其中還是要強調,
你千萬不要拿 nmap 去掃瞄別人家的系統!很可怕的!而由於上面輸出的結果,我們也知道鳥哥這部印表機在網路上的連線方式為:
socket://192.168.201.253:9100 的樣式喔!這個地方也請先記錄下來。
指令設定/刪除印表機的方式就是透過 lpadmin 這個指令啊!這個指令的語法是這樣的:
其實這個 lpadmin 指令只是在更新 /etc/cups/ 目錄裡面的兩個資料而已, 一個是 /etc/cups/printers.conf ,這個檔案主要是規範了印表機的相關裝置、是否接受列印工作、 印表機的佇列名稱、頁面的限制等等,反正就是整個印表機的規範就是了。 至於這個印表機相關的 PPD 檔案則是以印表機的佇列名稱連結到 /etc/cups/ppd/ 目錄下。 不相信嗎?讓我們來瞧瞧 printers.conf 的檔案內容吧!
設定完印表機後,來觀察一下目前的印表機狀態吧!底下的 lpstat 是個不錯用的觀察指令喔!
如果不清楚你的印表機狀態,使用 lpstat 就能夠看的清楚囉~接下來,讓我們開始來使用列印指令產生列印工作吧!
如果你沒有瀏覽器或者是說,你沒有圖形介面的軟體時,可以透過 lpr 或者是 lp 這兩個指令來列印某些檔案或資料流重導向的東東。底下的測試會實際列印出資料來,因此,建議你可以先將印表機電源關閉, 讓 CUPS 可以接受列印佇列的工作,卻無法輸出到印表機,這樣也方便我們後續管理指令的查詢! 所以,請將印表機的電源關閉先。來看看這兩個指令如何操作吧!
要注意的是,因為鳥哥有指定預設印表機,因此上面的範例中,即使沒有加上 [-P hp_p2015] 這個項目時,依舊能夠順利的列印。但如果你沒有指定預設印表機,那麼就一定要加上這個項目, 否則 lpr 會不知到要將資料輸出到哪裡去喔!看完了 lpr ,再來聊聊 lp 這個指令的用法吧:
我們已經有產生三個工作,但是第一個工作有順利的列印 (印表機是開啟的),因此還有兩個工作尚未完成才對! 那我們如何知道還有哪些列印工作在佇列內呢?可以使用底下的指令來觀察喔!
如果這些列印工作你想要取消呢?那就使用 lprm 吧!
整個指令模式處理印表機的任務大約到此為止,其他的,還是使用 Web 介面去管理比較方便啦!
假設你目前的 CentOS 主機上面接著一台 USB 介面的印表機,這台 USB 介面的印表機是 Samsung 的 ML-1210 印表機, 請問,您可以如何安裝這部印表機?
另外,如果老是看到螢幕前面顯示:『 Printer not connected; will retry in 30 seconds...』, 很有可能是因為我們的裝置代號輸入錯誤,請使用『 lpstat -t 』查閱一下是否正確的設定好了? 基本上,安裝一部 Linux 有支援的印表機,真的是快速啦! ![]() 『工欲善其事,必先利其器』,這是一句大家耳熟能詳的古人名言,在我們的資訊設備上面也是一樣的啊!
如同前面小節談到的,如果你的印表機本身就沒有提供給 Linux 系統用的驅動程式,那麼我們就不要浪費時間在該印表機設備上了。
同理可證,如果我們想要好好的使用 Linux 安裝在自己的主機上面,那麼主機上面的硬體資訊最好還是能夠瞭解一下的好。
現在一般主機板也都有提供 CPU 電壓與溫度的偵測,那我們也能夠透過 lm_sensors 這個軟體來取得該數據喔!
底下就讓我們來玩玩吧! ![]() 現在我們知道系統硬體是由作業系統核心所管理的,由第二十章的開機流程分析中,我們也知道 Linux kernel 在開機時就能夠偵測主機硬體並載入適當的模組來驅動硬體了。 而核心所偵測到的各項硬體裝置,後來就會被記錄在 /proc 與 /sys 當中了。 包括 /proc/cpuinfo, /proc/partitions, /proc/interrupts 等等。 更多的 /proc 內容介紹,先回到第十七章的程序管理瞧一瞧先!
那除了直接呼叫出 /proc 底下的檔案內容之外,其實 Linux 有提供幾個簡單的指令來將核心所偵測到的硬體叫出來的~ 常見的指令有底下這些:
lspci, lsusb, iostat 是本章新談到的指令,尤其如果你想要知道主機板與各周邊相關設備時,那個 lspci 真是不可多得的好工具!而如果你想要知道目前 USB 插槽的使用情況以及偵測到的 USB 裝置, 那個 lsusb 則好用到爆!至於 iostat 則是一個即時分析軟體,與 vmstat 有異曲同工之妙! 既然本節是想要使用 lm_sensors 分析各元件的溫度與電壓,那麼這幾個指令得要來使用看看才行啊! ^_^ 基本上,想要知道你 Linux 主機的硬體配備,最好的方法還是直接拆開機殼去察看上面的資訊 (這也是為何第零章會談計概啊)!
如果環境因素導致您無法直接拆開主機的話,那麼直接 lspci 是很棒的一的方法:
不必加上任何選項,就能夠顯示出目前的硬體配備為何。上面就是鳥哥的測試機所使用的主機配備。 包括使用 SIS 這家公司推出的 630 主機板晶片組,使用 USB 驅動為 1.1 版的控制器, 內建 SIS 的音效卡,使用內建整合的 SIS 的 AGP 顯示卡,以及網路卡為螃蟹卡 (型號為 RTL-8139)。 您瞧瞧!很清楚,不是嘛。 由於目前的主機配備實在太高檔了,因此很多朋友學習 Linux 時,習慣以類似 Virtualbox 或 VMWare 等虛擬機器進行模擬,此時你得要特別注意,你的硬體配備將是 Virtualbox 或 VMWare 模擬出來的,並不是原本的主機配備喔!實在是由於討論區太多網友發問類似『我的螃蟹卡為何捉不到』等問題, 詢問後,才發現他使用 VMWare 模擬硬體。此時你就得要使用 lspci 去列出 Linux 核心捉到的硬體, 而不是你原本的硬體啦!注意注意! 如果你還想要瞭解某個設備的詳細資訊時,可以加上 -v 或 -vv 來顯示更多的資訊喔! 舉例來說,鳥哥想要知道那個乙太網路卡更詳細的資訊時,可以使用如下的選項來處理:
-s 後面接的那個怪東西每個設備的匯流排、插槽與相關函數功能啦!那個是我們硬體偵測所得到的數據囉! 你可以對照底下這個檔案來瞭解該串數據的意義:
其實那個就是 PCI 的標準 ID 與廠牌名稱的對應表啦!
此外,剛剛我們使用 lspci 時,其實所有的資料都是由 /proc/bus/pci/
目錄下的資料所取出的呢!瞭解了吧! ^_^
剛剛談到的是 PCI 介面裝置,如果是想要知道系統接了多少個 USB 裝置呢?那就使用 lsusb 吧! 這個指令也是很簡單的!
確實非常清楚吧!其中比較有趣的就屬那個 ID 號碼與廠商型號對照了!那也是寫入在
/usr/share/hwdata/pci.ids 的東西,你也可以自行去查詢一下喔!更多資訊我們留待下一小節再來討論吧!
剛剛那個 lspci 找到的是目前主機上面的硬體配備,那麼整部機器的儲存設備, 主要是硬碟對吧!請問,您硬碟由開機到現在,已經存取多少資料呢?這個時候就得要 iostat 這個指令的幫忙了! 不過,預設 CentOS 並沒有安裝這個軟體,因此你必須要先安裝他才行!如果你已經有網路了, 那麼使用『 yum install sysstat 』先來安裝此軟體吧!否則無法進行如下的測試喔!
透過 lspci 及 iostat 可以約略的瞭解到目前系統的狀態啊! 還有目前的主機硬體資料呢!知道這些資訊後,我們就可以來玩一些比較不一樣的東西囉! ^_^ ![]() 在現在的電腦裡面,你或許真的無法想像沒有 USB 介面裝置的主機~ 因為不論我們的鍵盤、滑鼠、印表機、掃描器、隨身碟等等,幾乎都是使用到 USB 來作為傳輸的介面的。 所謂這 USB (Universal Serial Bus) 最早是在 1994 年被發展出來,到 1996 年前後發展出 version 1.0 ,當時的速度大約在 12Mbit/second,到了 2000 年發展出 version 2.0 ,這一版的速度則提高到 480Mbit/second, 這也是目前使用最廣泛的一個速度。2008 年則釋出 USB 3.0,這一版的速度比 2.0 要快十倍喔! 不過目前市面上的產品還是非常的少見。(註2) USB 有很多的優點啦,包括他是可以延伸的,每個 USB port 都可以最多接到 127 個裝置!
速度又快,又具有 Plug and Play (隨插即用) 的優點,所以近期以來被用來作為攜帶式裝置的主要資料傳輸介面呢!
目前 USB 1.1版本的控制器主要有兩種規格,分別是:
由於我們的 Linux 會將這兩種 USB 的驅動程式載入,因此不論你的 USB 是使用哪種晶片,我們的 Linux 都可以順利的偵測到並且正確的驅動的啦!至於 USB 2.0 在 Linux 上都以 Enahnced Host Controller Interface (EHCI) 來驅動的。我們使用 lsmod 來找一下 hci 這個關鍵字看看,鳥哥的測試主機驅動了多少 USB 模組了呢?
我們之前談過 USB 的磁碟代號是: /dev/sd[a-p] 之類的,類似 SCSI 硬碟的代號, 這是因為 USB 的磁碟裝置使用 SCSI 相關的裝置代號,因此,如果您要使用 USB 隨身碟的話,嘿嘿!那麼您的 Linux 主機就得要支援 SCSI 裝置才行~ 此外,為了讓 USB 磁碟裝置順利的被使用,因此,有時候還得要啟動 usb-storage 模組才行~ 所以囉,光是有 USB 的 uhci 模組還不行,還得要配合 usb-storage 啦~ 而一般 USB 的裝置都會被主動的偵測,核心也會主動的載入 USB 裝置的驅動模組, 所以你應該不需要手動載入 usb-storage 才是。不過,如果老是無法驅動時,那麼不妨手動載入 usb-storage 試看看。 順利載入各個需要的模組之後,直接下達 fdisk -l 應該就可以看到您的 USB 隨身碟的裝置代號才是!一般來說,如果是第一個 USB 磁碟裝置的話, 應該可以看到一個名為 /dev/sda1 的裝置,使用 mount 將他掛載起來即可啊! 在這裡要強調的是,如果你是使用類似筆記型電腦的 2.5 吋硬碟作為隨身硬碟的話,由於他就是硬碟的規格,
因此你可以看到一個完整的 /dev/sda 之類的磁碟資訊,你也可以進行額外的分割。但如果是快閃碟的話,
快閃碟並不是傳統的硬碟,他並不是使用磁碟讀取頭與磁碟盤來記錄資料,因此你只能使用 /dev/sda1 之類的檔名來掛載,
理論上是無法進行額外分割的喔!這部份要特別強調一下。
要驅動 USB 印表機也很簡單啊!只要做好 USB 印表機的裝置代號即可!反正我們的 usb 模組已經載入了嘛! 目前的 CentOS 5.x 會主動的幫我們建立印表機的裝置檔名,所以底下的動作我們根本不需要進行。 不過如果你的 Linux 是較老式的系統,那可能得要使用 mknod 來建立起 USB 印表機才行。 透過核心裝置代碼(註3)的查詢,我們知道 USB 印表機的主要/次要裝置代碼為 180 /0~15, 所以,建立的方法為:
在我們一般的生活當中,最常見的兩種 USB 裝置就是隨身碟與印表機了, 所以鳥哥在這裡僅就這兩種裝置來介紹啟動的方法,如果您還有其他的 USB 裝置要驅動的話, 請參考底下這一篇的內容啊! ![]() 玩電腦硬體的朋友們一定都聽過所謂的『超頻』這玩意兒,所謂的『超頻』就是讓系統原有的運作時脈增加, 讓 CPU/PCI/VGA 前端匯流排速度提升到非正規的頻率,以取得較高的電腦效能。 這在早期對於單價還是很貴的電腦來說,可以讓我們花比較少的錢去獲得比較高效能的電腦哩! 不過,超頻要注意的地方可不少,包括電壓不可高出 CPU 的負荷、CPU 風扇必須要強有力, 避免因為溫度過高導致系統當機等等。 不過現今的電腦速度已經夠快了,我們的 Linux 主機也實在不建議您超頻,因為整體效能可能增加不了多少, 但是卻會讓您的主機壽命減少、系統不穩定呢!而由早期超頻的『技術培養』過程當中,我們知道『CPU 的溫度、系統的相關電壓』 是影響主機是否穩定的一項重要指標喔!所以囉,如果能夠隨時掌握溫度、電壓, 其實對於系統還是有一定程度的監控啦。 其實各大主要主機板商與晶片組,都會有溫度、電壓的偵測器在主機內,這個我們可以在主機板操作手冊或者是在 BIOS 內的『 Monitor 』項目找到相關的溫度、電壓資料。在 Windows 系統當中,廠商有推出相關的軟體來偵測,那麼在 Linux 當中呢?呵呵!也是有啊!那就是 lm_sensors 這套好用的東西了! 目前較新的 Linux distributions 都預設會幫忙安裝這套軟體,但如果你的 Linux
是比較早期的版本,那麼就只好請您自行前往 http://www.lm-sensors.org/ 官方網站直接下載 tarball 並且安裝他囉~
由於 lm_sensors 主要是依據『主機板晶片組的型號,帶入相關的模組後,再偵測其溫度、電壓』的, 如果該主機板晶片組並不是 lm_sensors 所支援的模組,那自然就無法找出該晶片組的溫壓囉~ 所以啦,我們在使用 lm_sensors 之前,必須要確定主機板是有提供溫度、電壓的, 再來,必須要載入主機板的驅動模組,然後才有辦法使用 lm_sensors 來進行偵測。 好消息是, lm_sensors 本來就提供我們一個不錯的主機板晶片組偵測程式, 那就是 sensors-detect 這個指令。偵測到主機板晶片組後,將該資訊寫入設定檔當中, 就可以使用 sensors 指令直接讀取目前的 CPU、機殼、電源、風扇等等的資訊了! 直接來作看看吧!
上面就進行好型號的偵測,並且主動的建立了 /etc/sysconfig/lm_sensors 的參數設定檔。不過我們依舊需要進行一些額外的處理! 包括讓系統開機主動載入模組的功能!這樣我們就能夠直接使用 lm_sensors 來偵測而不需要手動載入偵測模組啊! 你可以這樣做:
偵測的指令就是 sensors 啊!直接動作吧!
基本上,只要這樣的步驟,您的主機就可以主動的偵測溫度與電壓,還有風扇轉速等等資訊。 不過,事實上,由於主機板設計的不同,所以偵測的結果很有可能是有誤差的。以鳥哥的情況來說, 我所使用的主機板型號是太舊了,lm_sensors 確實捉到錯誤的資訊啊!此時或許就需要進行調校了。 調校的步驟很簡單,先確定使用 sensors 顯示的結果每個項目代表的意義 (可以參考 BIOS 硬體偵測結果的順序來排列) ,然後進入 /etc/sensors.conf 進行修改即可。 如果想要以圖表輸出的話,那麼不妨搭配 MRTG 來進行網頁繪圖~ 這部分網路上面文章就比較多一點,也可以先參考鳥哥的一篇舊文章: ![]() 從上面的介紹中,我們不難發現目前新的 Linux distributions 大多能夠類似視窗作業系統,就是能夠即時的偵測隨插即用硬體! 例如 USB 介面的各項硬體設備等等。那我們也知道其實所有的硬體都是檔案,這些裝置檔案必須要使用 mknod 才能建立的! 那到底 (1)硬體如何偵測與 (2)裝置檔案如何主動建立呢?這就與 udev 及 HAL 這兩個東西有關了。 事實上,系統所有的硬體應該都是給核心管理的,但我們知道作業系統在記憶體內是受保護的,使用者根本無權使用作業系統核心。 為了解決這個問題於是有 udev 的產生。這個 udev 是個使用者層級軟體,他可以讓使用者自行處理 /dev 底下的裝置! 如此一來就能夠解決一般用戶在使用類似 USB 時,需要額外硬體的問題。(註4) 但我們如何知道系統上面多了個硬體呢?這時候就得要硬體抽象層 (Hardware Abstraction Layer, HAL) 的輔助了。 HAL 可以將系統目前的所有硬體進行快照,並持續檢視這個快照的內容(註5)。如果有新的 PnP 硬體插入時, HAL 就會發現目前的硬體與快照不同,此時就會通知 udev 進行新的裝置的建置了!如此一來,兩者的配合就能夠讓你的裝置 PnP 囉! 目前這兩個咚咚在 CentOS 上面都會是啟動的,其中 udev 是在 /etc/rc.d/rc.sysinit 就啟動了, 而 hal 則是在 /etc/init.d/haldaemon 這個服務才啟動。讓我們檢查看看是否真的有啟動啊!
老實說,如果你已經啟動了這兩個傢伙,那麼其他的事不需要進行,交給這兩個小玩意兒自己處理即可。
但如果你想要多瞭解 udev 是如何進行裝置的建立時,那麼我們可以來玩玩底下的咚咚。
假設你想要將你的隨身碟取名為較有趣的裝置,不想再使用類似 /dev/sda1 之類的名稱時,可以怎麼作呢? 我們可以透過更改 udev 的規則 (rule) 來使用 mknod 建立不同名稱的裝置檔案。舉例來說, 鳥哥這部測試機的硬碟使用為 /dev/hda ,因此第一個 USB 快閃碟裝置應該是 /dev/sda1 才對! 如果你的系統使用 SATA 磁碟,那麼你的快閃碟可能就得要由 /dev/sdb1 開始編號起來了。 udev 建立裝置檔案的規則放置到 /etc/udev/rules.d/ 目錄下,在該目錄下的檔案可以依序進行處理的。 以最簡單的語法來看,在該目錄下可以使用的變數與對應可以是:
當然還有很多語法,不過這裡我們先不介紹,有興趣的查一下本文最後的連結去看看吧! 假設鳥哥的 /dev/sda1 要取名字成為 /dev/vbirdusb ,你可以這樣做:
雖然這樣很具有個性化的需求,不過總是不太可靠~萬一哪天忘記自己有進行這些動作,偏偏用核心預設的檔名去處理時, 會發生很多不明的錯誤啊!所以將剛剛建立的資料反向刪除回來吧!
![]()
![]() ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看)
簡答題部分:
![]()
2005/10/25:準備準備~寫一些跟硬體比較有關係的資料! 2005/11/08:準備完畢 USB 與 lm_sensors 的部分了~啊!拖了真久~還有 RAID 的說明也差不多哩! 2005/11/09:加入了 FC4 的 setup 指令,尤其是印表機的部分,可以參考參考! 2005/11/10:終於將 iSCSI 的裝置寫好了~這部份真的是很有趣!不過,一般使用者可能碰不到就是了。 2005/11/13:終於將 CUPS 架構設定好自己的 Printer 部分了! 2005/11/14:連同 LVM 也大致的給他寫完了!那個 resize2fs 指令確實有趣! 2005/11/25:加入一個簡單的練習題~利用 dd 配合 resize2fs 來製作備份的資料! 2009/04/30:將 LVM 移動到 第十五章 ,且拿掉 iSCSI 的說明了。 2009/04/30:將舊的基於 FC4 撰寫的版本移動到 此處 。 2009/06/03:加入 udev 與 hal 的簡單說明! 2009/09/15:簡單修訂一些語句,修改章節的習題,並沒有改到什麼重要的資訊。 |
||||||||||||||||||||||||||||||||||||||||