在 Linux 系統上面偵測、維護、變更硬體的方法
除了手動設定之外,其實系統提供了一個名為 setup 的指令給系統管理員使用喔!這個指令還能夠設定網路呢。 此外,我們也應該要知道如何在 Linux 底下連接印表機吧!否則一些資料怎麼印出來? 另外,如果你的主機板支援 CPU 溫度偵測的話,我們還能夠利用 lm_sensors 這個軟體功能來偵測硬體的電壓、風扇轉速、 CPU 溫度等資訊呢!
系統設定除了使用手動的方式編輯設定檔之外 (例如 /etc/inittab, /etc/fstab 等),其實在 Red Hat 系統的 RHEL, CentOS 及 Fedora 還有提供一支綜合程式來管理的,那就是 setup 這個指令的功能囉!老實說, setup 其實只有在 Red Hat 的系列才有, 在其他的 Linux distributions 並不存在,因此,鳥哥並沒有很要求一定要學會這傢伙的。 只不過,setup 還是挺好用的,所以我們還是來玩玩吧!
這個 setup 的處理方法非常的簡單,就是利用 root 的身份下達這個指令,如果你已經使用遠端操作系統的話, 記得最好切換一下語系成為英文語系 (比較不會出現邊框是亂碼的情況) ,結果就會出現如下的畫面了。
如上圖所示,那就是 setup 提供的各項系統設定功能。這個畫面的使用方式其實在圖中的最底下一行有說明了, 可以利用 [tab] 按鍵在三個畫面中切換,使用 Run Tool 可以開始設定該項目,使用 Quit 可以離開 setup 指令。 那麼上面的主選單部分有哪些功能呢?這些設定的基本功能是這樣的:
底下我們就來約略的介紹一下這些玩意兒吧!除了網路 IP 的設定外,其餘的部分鳥哥會很快的帶過去而已。 畢竟 setup 僅是一個統整的工具,每個設定項目其實都牽涉到各自的基礎功能,那些基礎功能還得要持續摸索的...
在按下了『 Authentication configuration 』項目後,會出現如下畫面:
我們的 Linux 除了使用自己提供的使用者密碼驗證機制之外,還能夠使用其他外部身份驗證伺服器所提供的各項驗證功能喔。 在上面圖示的左側 User Information 的地方指的是:我們系統上的使用者可以使用什麼方式對外取得帳號資訊, 也就是說,這部主機除了 /etc/passwd 的帳號之外,還能夠使用其他的帳號來登入系統的。我們支援的帳號管理伺服器主要有 LDAP, NIS, Winbind 等。
至於右側的 Authentication 則是登入時需要提供的身份驗證碼 (密碼) 所使用的機制為何。 在預設的情況下,我們身份驗證僅參考本機的 /etc/passwd, /etc/shadow 而已,而且使用 MD5 的密碼驗算機制, 因此上圖右側的部分僅會有最上方兩個而已。事實上,這個部分的設定主要是修改了 /etc/sysconfig/authconfig ,同時還加入了各個伺服器的用戶端程式設定功能哩。
你一定會問,那麼什麼時候可以用到這個機制呢?思考一下,如果你的網路環境是電腦教室, 你希望每個同學都能夠有自己的帳號來登入每部主機。此時,你會希望每部主機都幫同學建立同一個帳號嗎? 那如果每一個同學都想要修改密碼,那就糟了!因為每部主機都得要重新修改密碼才行啊!這個時候帳號管理伺服器就很重要了。 他的功能有點像底下這樣:
如上圖所示,我 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 』會出現如下畫面:
上圖中那個 eth1.bak 是系統捉錯的檔案,因為這個程式會跑到 /etc/sysconfig/network-scripts/ 目錄下找出檔名為 ifcfg-ethN 的檔案內容來顯示的。因為鳥哥僅有一張網卡,因此那個 eth1 不要理會他!直接點選 eth0 之後就會產生如下的畫面:
上圖中那個 Name 與 Device 名稱最好要相同,盡量不要修改他!這裡的設定是這樣的:
如果你是使用 ADSL 撥接的話,那麼上面的設定項目就不適用了。 你得要使用 (1)adsl-setup 來進行設定,然後再以 (2)adsl-start 來啟動 ADSL 撥接, 詳細的方法我們會在伺服器篇再來介紹的。上面談的都是 IP 的取得方式,並沒有談到主機名稱解析的部分 (DNS)。 只有手動設定者才需要進行 DNS IP 的設定,使用 dhcp 及 adsl-start 者都不需要進行底下的動作啦! 假設你的 DNS IP 為中華電信的 168.95.1.1 時,那就得這樣設定:
[root@www ~]# vim /etc/resolv.conf
nameserver 168.95.1.1
重點是 nameserver 後面加上你的 DNS IP 即可!一切設定都妥當之後,你還得要進行一個任務,那就是重新啟動網路看看囉! 重新啟動網路的方法很簡單,這樣做即可:
[root@www ~]# /etc/init.d/network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
由於網路涉及的範圍相當的廣泛,還包括如何進行網路除錯的工作等,鳥哥將這部份寫在伺服器篇了,所以這裡不再多費唇舌。 假設你現在已經連上 Internet 了,那麼防火牆的設定則不可不知啊!底下就來談談。
防火牆的認識是非常困難的,因為你必須要有很強的網路基礎概念才行。CentOS 提供的這個簡單的設定其實有時候反而會讓我們困擾不已。基本上,這裡僅是介紹『你可以這樣做』,但並不代表『你必須這樣做』! 所以,有興趣的還是得要再繼續鑽研網路技術喔! ^_^。好了,在按下 Firewall configuration 後,會出現如下畫面:
上圖中主要出現兩個部分,一個是關於 SELinux 的部分,一個則是防火牆的部分。SELinux 我們在第十七章介紹過了,這裡不再浪費篇幅。 請依據你的需求設定 Enforcing, Permissive 或 Disabled 吧!(當然最好還是務必要啟動 SELinux 啦!)
防火牆的部分,由於我們安裝時建議不要啟動防火牆, 因此上圖你會看到『 Disabled 』的部分被選擇了。但是由於現在你的系統已經上網了 (假設已經上網了), 那麼你務必要啟動防火牆來管理網路才好。由於預設你的防火牆會開放遠端主機對你的登入連線, 因此最好使用 Customize (客戶設定) 來改變設定比較好喔!按下『 Customize 』會出現如下圖示:
這個地方不是三言兩語講的完的!包括信任裝置,以及允許進入的伺服器封包~很是麻煩。基本上,你只要這樣想就好了:
基本上,這個動作僅是在建立 /etc/sysconfig/iptables 這個檔案而已。 而這個檔案預設是不存在的 (因為我們沒有啟動防火牆啊!) 。這裡你先有個概念即可,因為,我們未來會介紹以 shell script 的方式建立屬於您自己的防火牆系統,細節我們會在伺服器篇慢慢作介紹的啊!
如果你已經有網路了,記得在這個項目的設定中,於圖 1.3.1 選擇防火牆為『 Enable 』的狀態,按下『 Customize 』進入圖 1.3.2 當中取消 ssh 的勾選,最後再回到 1.3.1 當中按下『 OK 』來啟動 Linux 用戶端的防火牆設定吧! 這樣你的系統就具有最起碼的防火牆功能囉! ^_^
某些情況底下你的鍵盤可能會發生一些對應錯誤的情況,舉例來說,使用的鍵盤並非台灣常見的 104 按鍵導致很多英文對應不起來。 此時你可以使用 setup 來修改喔!按下『 Keyboard configuration 』會出現如下的畫面:
其實這個檔案就僅會修改 /etc/sysconfig/keyboard 啦!很簡單的設定項目。
我們在第十八章談過系統服務的啟動與關閉, 當時介紹過 ntsysv 吧?沒錯~這個 System services 的項目就是會呼叫出 ntsysv 這支程式來處理服務的設定啦!詳細的設定請回第十八章參考吧!這裡不再浪費篇幅囉! 因為....鳥哥實在太會碎碎唸了,再加上圖示,唔!好佔篇幅~ @_@
我們知道地球是圓的,所以想要看王建民在紐約投球都得要三更半夜才有辦法看的到!這也就是說, 其實在同一個時間點全世界的時鐘指的時間都不相同啊!我們的 Linux 是支援多國語系的國際化作業系統, 所以你可以將這部主機拿到任何地方且不需要修改系統時鐘,因為系統會主動的依據你提供的時區來變化時間的。 當你將筆記型電腦帶到美國紐約並且想要變更成為美國時間時,可以按下『 Timezone configuration 』的項目:
如上圖所示,你在上半部畫面中,可以使用鍵盤方向鍵來選擇正確的位置,然後再用 [tab] 移動到 [OK] 即可! 時區的設定,其實就是找出與 /etc/sysconfig/clock 有關的設定項目而已。實際上,上面圖示出現的咚咚,就與 /usr/share/zoneinfo/ 目錄內的資料有關而已。
X Window System 我們會在第二十四章再來詳細說明,這裡僅是告知一下, 如果你想要變更你的 X 視窗介面的解析度時,就可以使用這個項目了。不過要注意的是,這個項目的執行不可以使用類似 ssh 通訊協定連線後,在遠端主機上執行這個設定項目。因為這個項目的執行會產生一個新的 X 終端機在 tty7 或 tty8 上頭, 因此,你如果使用遠端連線機制的話,會看不到畫面的啦!理解乎?
在你點選了『 X configuration 』之後,就會出現如下的圖樣。其中以硬體及設定兩個頁面較常被變更。 先來瞧瞧圖示吧:
如上所示,由於視窗解析度的範圍與螢幕的支援有關,因此你必須要先處理螢幕的更新頻率後才能夠修改視窗解析度。 所以我們會先處理『硬體』部分,鳥哥的螢幕是舊式的 4:3 傳統螢幕,所以選擇 1024x768 ,如果你的螢幕是新型的寬螢幕, 那麼請自行挑選適當的解析度吧。處理完畢後就能夠開始設定視窗解析度了,如下所示:
如上圖所示,此時會出現可調整的解析度啦!整理整理就能夠顯示出你想要的視窗解析度。 其實這些設定都是修改 /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 的支援度好不好, 那就先進入上述的網站連結,出現如下的畫面:
在如上畫面中請按下『 Printers 』來觀察印表機的特色吧!會出現如下畫面:
在上圖中填入正確的廠牌 (HP) 以及正確的印表機型號 (LaserJet P2015dn) 後,請按下『 Show 』那個按鈕, 該網站就會從資料庫內捉出支援度的情況給你看,如下圖所示:
在顯示的畫面中,你最要注意的是那個企鵝數量啦!如果達到 3 隻,那就代表支援度是非常完美的。 兩支企鵝是可接受的範圍內。如果是小於一隻企鵝時,那麼該印表機對 Linux 的支援可能就是比較差的喔! 還好,鳥哥這部含有網路功能的印表機還有兩隻企鵝的支援,等一下應該能夠順利安裝到俺的 Linux 測試機上吧!
你有沒有發現,在印表機還沒有啟動電源的情況底下,其實我們還是可以透過軟體來將某個工作列印出來的, 只是該項工作就會被放入到等待的環境中 (佇列) 。為什麼會這樣呢?這是因為整個列印的行為被區分為許多部分, 每個部分都可以單獨存在的啦!我們將整個部分繪製成下圖來瞧瞧:
我們大概可以將上圖區分為幾個部分來說明:
如果你的印表機具有網路卡,那麼你當然可以使用網路連線到你的印表機上面囉!不過,這種印表機提供什麼服務呢? 也就是說,你可以使用什麼連線協定來連上印表機呢?常見的印表機連線分享方式有底下這些:
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 , 因此我可以這樣確定該印表機是否存在喔:
# 1. 先確定 IP 是否正確: [root@www ~]# ping -c 3 192.168.201.253 PING 192.168.201.253 (192.168.201.253) 56(84) bytes of data. 64 bytes from 192.168.201.253: icmp_seq=1 ttl=255 time=0.464 ms 64 bytes from 192.168.201.253: icmp_seq=2 ttl=255 time=0.313 ms 64 bytes from 192.168.201.253: icmp_seq=3 ttl=255 time=0.356 ms --- 192.168.201.253 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.313/0.377/0.464/0.067 ms # 重點是有沒有出現回應的時間參數,亦即是 time 那個欄位喔! # 2. 使用 nmap 測試印表機有沒有出現列印相關的服務埠口: [root@www ~]# nmap 192.168.201.253 Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-05-27 22:07 CST Interesting ports on 192.168.201.253: Not shown: 1676 closed ports PORT STATE SERVICE 80/tcp open http 139/tcp open netbios-ssn 515/tcp open printer 9100/tcp open jetdirect MAC Address: 00:18:FE:9E:4C:58 (Unknown) Nmap finished: 1 IP address (1 host up) scanned in 3.875 seconds # 鳥哥這部印表機僅支援 LPD 服務 (515) 以及 HP 獨家的服務 (9100)
這樣就確定我的印表機實際存在,且這部印表機僅支援 HP 獨家的網路服務 (port 9100) 以及舊版的 LPD 服務而已, 這個資訊很重要,因為等一下我們使用 CUPS 連線時,就得要使用這個 LPD 的服務喔!另外,請特別給他留意一下, 那個 nmap 是個可以掃瞄主機埠口的軟體 (port scan) ,這個軟體其實是駭客軟體,他預設並沒有安裝到 CentOS 上, 但是你可以使用『 yum install nmap 』來安裝他。請注意,因為這個軟體可以是惡意攻擊的,因此千萬不要用來查閱別人的主機,否則恐怕會有違法之虞喔!!
接下來,讓我們來瞭解一下,系統有沒有 CUPS 的支援吧!
再來查看看你的主機是否已經啟動了 CUPS 呢?使用 netstat 這個指令看看:
[root@www ~]# netstat -tlunp | grep 631 tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 4231/cupsd udp 0 0 0.0.0.0:631 0.0.0.0:* 4231/cupsd
確實有啟動 631 埠口以及 cupsd 的服務。接下來,我們可以直接連上 CUPS 了!請打開瀏覽器, 然後在網址列輸入『 http://localhost:631 』即可!因為瀏覽器要連接的並非正規的 WWW 服務埠口, 因此就得要加上冒號 (:) 來指定埠口連接!順利的話,應該可以出現如下畫面:
主畫面主要可以分為上下兩個按鈕列來說明,其中又以下方的按鈕列為常見的操作項目。我們會用到的按鈕大概就是:
不囉唆,趕緊來新增印表機看看!按下『 Add Printer 』項目吧:
上面圖示中,最重要的其實是那個『 Name 』的項目,那就是你印表機的佇列名稱!未來所有列印的工作都是放在該名稱底下排隊的! 鳥哥的這個印表機名稱比較複雜啦!你可以取個比較簡單的名字,以後比較容易使用指令列軟體來列印啦! 至於位置 (Location) 與描述 (Description) 都是這個印表機的說明,可寫可不寫!寫完後按下『 continue 』吧!
接下來則是選擇這個印表機佇列所連線的印表機提供什麼服務的列印功能?你可以看到前一小節我們使用 nmap 的時候就發現 port 9100 就是 HP JetDirect ,因此我們可以選擇上圖的第一個項目。 由於這部印表機也提供 port 515 的 LPD 服務,因此你也可以選擇上圖的『 LPD/LPR Host or Printer 』項目。 不過,在這裡鳥哥選擇的是第一項啦!選擇完畢後再按下『 Continue 』進入印表機的實體位置項目,如下圖:
上圖有提供很多範例,我們由於使用到 port 9100 ,因此使用的就是 socket:// 那個範例使用的狀態。 填寫正確的位置後,接下來按下『 Continue 』來繼續選擇印表機的型號吧!
如上圖所示,我們選擇的是 HP 的廠牌!廠牌選擇完畢後會出現如下圖的型號選擇:
但上圖中我們並沒有看到 P2015dn 這部印表機的型號!那怎辦?沒關係,可以連線到 http://www.linuxfoundation.org/en/OpenPrinting 網站下載適當的驅動程式後, 按下上圖中的『瀏覽』按鈕來選擇該檔案即可。不過,從該網站的介紹中,可以發現鳥哥的這部印表機似乎使用預設的 Postscript 驅動程式即可,該網站也沒有提供這部印表機的驅動程式啊!那怎辦?沒關係,在 /usr/share/cups/model/ 目錄下就有預設的驅動程式啦!所以請按下『瀏覽』來處理一下!
如上圖所示,選擇正確的驅動程式,然後再按下『開啟』按鈕,最後按下『 Add Printer 』按鈕就可以進入管理員密碼輸入畫面:
到此為止我們的印表機設定就 OK 了!如果你回到 CUPS 的進站畫面,並且點選 Printers 之後,就會出現如下的印表機畫面:
上面畫面中的按鈕都看的懂吧?其中比較重要的是那個『 Set As Default 』項目, 那就是設定為『預設印表機』,當你產生列印工作後,該工作預設就會丟給這個 hp_lj_p2015dn 的佇列來處理的意思喔。 接下來,當然就是按下『 Print Test Page 』看看能否列印出正確的畫面囉!如果可以順利的列印,恭喜您! 印表機設定成功!
上一小節提到的是網路印表機,那如果你的印表機是一般普通的具有 USB 介面的印表機呢? 由於印表機的裝置檔名為 /dev/usb/lp0 開始的名稱,既然已經知道印表機名稱了,那麼我們先來注意看看 USB 是否有捉到該印表機, 由於我們的 Linux 已經能夠處理隨插即用 (PnP) 的裝置,因此直接執行 ls 去查閱檔名是否存在即可:
[root@www ~]# ll /dev/usb/lp0 crw-rw---- 1 root lp 180, 0 Jun 1 22:32 /dev/usb/lp0 # 這個檔案會被自動的建立起來,你不需要手動建立這個檔案喔!
老實說,除非你的 USB 印表機是非常冷門的機種,否則,我們的 CUPS 應該已經自動的捉到並且設定好該印表機囉! 以鳥哥為例,鳥哥辦公室的事務機為 HP Diskjet F380 ,如果使用列出 USB 裝置的 lsusb 時,可以看到:
[root@www ~]# lsusb
Bus 001 Device 001: ID 03f0:5511 Hewlett-Packard Deskjet F300 series
Bus 002 Device 001: ID 0000:0000
Bus 002 Device 002: ID 0d62:a100 Darfon Electronics Corp. Benq Mouse
接下來,同樣的我們使用 CUPS 的 Web 介面來設定一下這部印表機吧!在網址列輸入 http://localhost:631 之後再按下『Manage Printers』會出現如下畫面:
由上圖我們可以發現 CUPS 已經捉到了印表機了!連驅動程式都安裝妥當!這是怎麼回事啊? 這是因為 CentOS 提供了 HAL 的機制來處理 PnP 裝置的緣故。關於 HAL 的機制我們會在下一小節再來討論。 不過由於這個裝置使用的是 HAL 提供的裝置檔名,我們如果想要使用 /dev/usb/lp0 來作為印表機的輸出檔名的話, 那麼就自己來建立一個印表機的佇列吧!同樣的在 CUPS 畫面中按下『 Add Printer 』來新增一個印表機:
如上圖所示,你要指定的是那個有 #1 的位置,那就是我們的第一個 USB 插槽位置喔!
如上圖所示,最後就會多出一個名為 deskjet_f380 的印表機名稱,接下來當然就是『 Print Test Page 』測試看看能否列印囉。 如果能夠列印得出來,那就是設定妥當了。所以說, USB 印表機的設定要簡單太多囉! ^_^
想像一個狀況,你僅有 USB 印表機安裝在 Linux 上頭,整個辦公室或實驗室裡面僅有這部印表機。 雖然你可以加裝列印伺服器來使 USB 印表機變成網路印表機,但總是得多花錢啊! 有沒有辦法可以讓你的本機印表機變成網路印表機呢?有的,那就是修改 CUPS 的設定即可。如何修改呢? 我們還是透過 CUSP 的瀏覽器介面來處理即可喔!選擇『Administration』會出現如下畫面(在畫面的最右邊):
如上圖所示,在箭頭指定的地方進行勾選即可。勾選完畢後按下『 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 的操作如下:
# 1. 重新啟動 CUPS 的方法! [root@www ~]# /etc/init.d/cups restart 正在停止 cups: [ 確定 ] 正在啟動 cups: [ 確定 ] [root@www ~]# netstat -tlunp | grep 631 tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 4939/cupsd tcp 0 0 :::631 :::* LISTEN 4939/cupsd udp 0 0 0.0.0.0:631 0.0.0.0:* 4939/cupsd # 因為 CUPS 啟動的網路服務埠口就是 port 631 !所以確定是啟動的! # 2. 確認印表機提供的服務為何 [root@www ~]# nmap 192.168.201.253 Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-06-03 00:43 CST Interesting ports on 192.168.201.253: Not shown: 1676 closed ports PORT STATE SERVICE 80/tcp open http 139/tcp open netbios-ssn 515/tcp open printer 9100/tcp open jetdirect # 再次強調,鳥哥這部印表機僅有提供 HP 自家的印表機協定 9100 埠口!
從上面的輸出可以很清楚的看到鳥哥的印表機與 Linux 上面的 CUPS 都有順利的運作中!其中還是要強調, 你千萬不要拿 nmap 去掃瞄別人家的系統!很可怕的!而由於上面輸出的結果,我們也知道鳥哥這部印表機在網路上的連線方式為: socket://192.168.201.253:9100 的樣式喔!這個地方也請先記錄下來。
指令設定/刪除印表機的方式就是透過 lpadmin 這個指令啊!這個指令的語法是這樣的:
[root@www ~]# lpadmin [-p 自訂佇列名] [-v URI] [-m PPD] [-E] <==建立印表機 [root@www ~]# lpadmin [-d 已存在的佇列名] <==設定成為預設印表機 [root@www ~]# lpadmin [-x 已存在的佇列名] <==刪除此一印表機佇列 選項與參數: -p :後面接的就是印表機的佇列名稱,這個名稱可自訂,但還是定為有意義較佳。 -v :後面接的就是裝置的相關位置,常見的裝置有: 序列埠 : parallel:/dev/lp0 USB : usb:/dev/usb/lp0 網路印表機 : ipp://192.168.201.253/ 提供特殊插槽: socket://192.168.201.253:9100 -m :後面接的通常就是 PPD 的定義檔,注意,要放置到 /usr/share/cups/model/ 底下! -E :作為可接受 (accept) 此列印工作之意! # 1. 先列出本機上面所有已經存在的印表機吧! [root@www ~]# lpstat -a Deskjet_F300_series accepting requests since Tue Jun 2 00:48:59 2009 deskjet_f380 accepting requests since Mon Jun 1 23:34:21 2009 hp_lj_p2015dn accepting requests since Tue Jun 2 00:22:31 2009 # 2. 刪除所有已經存在的印表機吧! [root@www ~]# lpadmin -x Deskjet_F300_series [root@www ~]# lpadmin -x deskjet_f380 [root@www ~]# lpadmin -x hp_lj_p2015dn [root@www ~]# lpstat -a lpstat: No destinations added. # 這樣就確定沒有任何存在的印表機囉! # 3. 加入 hp_p2015 印表機,印表機參數如前面兩小節所示: [root@www ~]# lpadmin -p hp_p2015 -v socket://192.168.201.253:9100 \ > -m postscript.ppd.gz -E # 4. 因為僅有一部印表機,因此讓此印表機成為預設列印印表機 [root@www ~]# lpadmin -d hp_p2015
其實這個 lpadmin 指令只是在更新 /etc/cups/ 目錄裡面的兩個資料而已, 一個是 /etc/cups/printers.conf ,這個檔案主要是規範了印表機的相關裝置、是否接受列印工作、 印表機的佇列名稱、頁面的限制等等,反正就是整個印表機的規範就是了。 至於這個印表機相關的 PPD 檔案則是以印表機的佇列名稱連結到 /etc/cups/ppd/ 目錄下。 不相信嗎?讓我們來瞧瞧 printers.conf 的檔案內容吧!
[root@www ~]# cat /etc/cups/printers.conf # Printer configuration file for CUPS v1.2.4 # Written by cupsd on 2009-06-03 01:06 <DefaultPrinter hp_p2015> <==這就是印表機佇列名稱 Info hp_p2015 DeviceURI socket://192.168.201.253:9100 <==就是印表機所在的裝置位置 State Idle StateTime 1243962326 Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy stop-printer </Printer> [root@www ~]# ll /etc/cups/ppd -rw-r--r-- 1 root root 7714 Jun 3 01:05 hp_p2015.ppd # 這就是剛剛捉過來的,給 hp_p2015 用的印表機定義檔!
設定完印表機後,來觀察一下目前的印表機狀態吧!底下的 lpstat 是個不錯用的觀察指令喔!
[root@www ~]# lpstat [-adprt] 選項與參數: -a :列出目前可以接受列印工作的印表機佇列名稱; -d :列出目前系統的預設印表機 (未指定列印佇列時,預設輸出的印表機); -p :列出每部印表機目前的工作狀態,包含工作的 ID; -r :列出目前 CUPS 服務是否有在運作? -t :列出目前列印系統中更為詳細的資訊說明,很適合查詢喔! # 1. 列出目前系統上面所有的印表機佇列與接受工作與否的情形 [root@www ~]# lpstat -a hp_p2015 accepting requests since Wed Jun 3 01:05:26 2009 # 有一部名為 hp_p2015 的印表機,從 2009/6/3 開始接受列印工作之意! # 2. 列出目前的『列印系統』狀態,不止包括印表機而已。 [root@www ~]# lpstat -t scheduler is running <==CUPS 這個服務有在運作的意思 system default destination: hp_p2015 <==預設的印表機為這一部 hp_2015 device for hp_p2015: socket://192.168.201.253:9100 <==這部印表機的裝置位址 hp_p2015 accepting requests since Wed Jun 3 01:05:26 2009 printer hp_p2015 is idle. enabled since Wed Jun 3 01:05:26 2009 # 這部印表機目前是發呆 (Idle) 的狀態,但可接受列印工作!
如果不清楚你的印表機狀態,使用 lpstat 就能夠看的清楚囉~接下來,讓我們開始來使用列印指令產生列印工作吧!
如果你沒有瀏覽器或者是說,你沒有圖形介面的軟體時,可以透過 lpr 或者是 lp 這兩個指令來列印某些檔案或資料流重導向的東東。底下的測試會實際列印出資料來,因此,建議你可以先將印表機電源關閉, 讓 CUPS 可以接受列印佇列的工作,卻無法輸出到印表機,這樣也方便我們後續管理指令的查詢! 所以,請將印表機的電源關閉先。來看看這兩個指令如何操作吧!
[root@www ~]# lpr [-P printer佇列] [-# 列印份數] -U [username] file 選項與參數: -P :若沒有預設印表機 (default) 或者想要由不同印表機輸出時,可用 -P 指定印表機 -# :如果這份文件你想要列印多個副本時,用這個 -# 加上份數就對了! -U :有些印表機有限制可使用的使用者帳號,此時就得要使用這個選項; # 1. 指定 hp_p2015 這部印表機來列印 /etc/passwd 這個檔案 [root@www ~]# lpr -P hp_p2015 /etc/passwd # 2. 關閉印表機後,將 /root/ 底下的檔案檔名輸出到這部印表機 [root@www ~]# ll /root | lpr -P hp_p2015
要注意的是,因為鳥哥有指定預設印表機,因此上面的範例中,即使沒有加上 [-P hp_p2015] 這個項目時,依舊能夠順利的列印。但如果你沒有指定預設印表機,那麼就一定要加上這個項目, 否則 lpr 會不知到要將資料輸出到哪裡去喔!看完了 lpr ,再來聊聊 lp 這個指令的用法吧:
[root@www ~]# lp [-d printer佇列] [-n 列印份數] file 選項與參數: -d :後面接的是印表機的佇列名稱。如果有多部印表機才需要指定; -n :就是列印的份數啊! # 1. 列印出 2 份 /etc/issue 資料 [root@www ~]# lp -d hp_p2015 -n 2 /etc/issue request id is hp_p2015-11 (1 file(s)) <==以 hp_p2015 來列印,工作號碼為 11
我們已經有產生三個工作,但是第一個工作有順利的列印 (印表機是開啟的),因此還有兩個工作尚未完成才對! 那我們如何知道還有哪些列印工作在佇列內呢?可以使用底下的指令來觀察喔!
[root@www ~]# lpq [-al] [-P 列印佇列] 選項與參數: -a :列出所有印表機上面在佇列當中的工作情況; -l :用其他較長格式來輸出列印的相關資訊 (擁有者與檔案大小等等) -P :後面接特定的印表機,與 -a 不同。 # 1. 顯示出目前所有印表機的工作佇列狀況 [root@www ~]# lpq -a Rank Owner Job File(s) Total Size active root 10 (stdin) 1024 bytes 1st root 11 issue 1024 bytes # 上面的意思是,有 2 份工作,第一個工作為來自 stdin 的資料流,列印號碼為 10 , # 整份列印資料佔去 1024 bytes 。同理,第二份工作為檔案,檔名為 issue。 # 2. 用更詳細的資訊顯示列印工作 [root@www ~]# lpq -l -P hp_p2015 hp_p2015 is ready and printing root: active [job 10 localhost] (stdin) 1024 bytes root: 1st [job 11 localhost] 2 copies of issue 1024 bytes # 你可以看到, issue 會被列印兩份的資料!
如果這些列印工作你想要取消呢?那就使用 lprm 吧!
[root@www ~]# lprm [-P printer佇列] job_id 選項與參數: -P :後面直接指定某部印表機的某個工作號碼。注意,那個 job_id 就是剛剛我們使用 lpq 查看到的那個 Job 的號碼啦! # 1. 將使用 lpq 看到的第 11 號列印工作取消! [root@www ~]# lprm 11 [root@www ~]# lpq -a Rank Owner Job File(s) Total Size active root 10 (stdin) 1024 bytes # 瞧!只剩下一個工作而已囉!
整個指令模式處理印表機的任務大約到此為止,其他的,還是使用 Web 介面去管理比較方便啦!
假設你目前的 CentOS 主機上面接著一台 USB 介面的印表機,這台 USB 介面的印表機是 Samsung 的 ML-1210 印表機, 請問,您可以如何安裝這部印表機?
[root@www ~]# lpadmin -p samsung -v usb:/dev/usb/lp0 \ > -m Samsung-ML-1210-gdi.ppd -E
另外,如果老是看到螢幕前面顯示:『 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 是很棒的一的方法:
[root@www ~]# lspci [-vvn] 選項與參數: -v :顯示更多的 PCI 介面裝置的詳細資訊; -vv :比 -v 還要更詳細的細部資訊; -n :直接觀察 PCI 的 ID 而不是廠商名稱 範例一:查閱您系統內的 PCI 裝置: [root@www ~]# lspci 00:00.0 Host bridge: Silicon Integrated Systems [SiS] 630 Host (rev 30) 00:00.1 IDE interface: Silicon Integrated Systems [SiS] 5513 [IDE] (rev d0) 00:01.0 ISA bridge: Silicon Integrated Systems [SiS] SiS85C503/5513 (LPC Bridge) 00:01.2 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 07) 00:01.3 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 07) 00:01.4 Multimedia audio controller: Silicon Integrated Systems [SiS] SiS PCI Audio Accelerator (rev 02) 00:02.0 PCI bridge: Silicon Integrated Systems [SiS] Virtual PCI-to-PCI bridge (AGP) 00:0e.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10) 01:00.0 VGA compatible controller: Silicon Integrated Systems [SiS] 630/730 PCI/AGP VGA Display Adapter (rev 21) # 不必加任何的參數,就能夠顯示出目前主機上面的各個 PCI 介面的裝置呢!
不必加上任何選項,就能夠顯示出目前的硬體配備為何。上面就是鳥哥的測試機所使用的主機配備。 包括使用 SIS 這家公司推出的 630 主機板晶片組,使用 USB 驅動為 1.1 版的控制器, 內建 SIS 的音效卡,使用內建整合的 SIS 的 AGP 顯示卡,以及網路卡為螃蟹卡 (型號為 RTL-8139)。 您瞧瞧!很清楚,不是嘛。
由於目前的主機配備實在太高檔了,因此很多朋友學習 Linux 時,習慣以類似 Virtualbox 或 VMWare 等虛擬機器進行模擬,此時你得要特別注意,你的硬體配備將是 Virtualbox 或 VMWare 模擬出來的,並不是原本的主機配備喔!實在是由於討論區太多網友發問類似『我的螃蟹卡為何捉不到』等問題, 詢問後,才發現他使用 VMWare 模擬硬體。此時你就得要使用 lspci 去列出 Linux 核心捉到的硬體, 而不是你原本的硬體啦!注意注意!
如果你還想要瞭解某個設備的詳細資訊時,可以加上 -v 或 -vv 來顯示更多的資訊喔! 舉例來說,鳥哥想要知道那個乙太網路卡更詳細的資訊時,可以使用如下的選項來處理:
[root@www ~]# lspci -s 00:0e.0 -vv
-s 後面接的那個怪東西每個設備的匯流排、插槽與相關函數功能啦!那個是我們硬體偵測所得到的數據囉! 你可以對照底下這個檔案來瞭解該串數據的意義:
其實那個就是 PCI 的標準 ID 與廠牌名稱的對應表啦! 此外,剛剛我們使用 lspci 時,其實所有的資料都是由 /proc/bus/pci/ 目錄下的資料所取出的呢!瞭解了吧! ^_^
剛剛談到的是 PCI 介面裝置,如果是想要知道系統接了多少個 USB 裝置呢?那就使用 lsusb 吧! 這個指令也是很簡單的!
[root@www ~]# lsusb [-t] 選項與參數: -t :使用類似樹狀目錄來顯示各個 USB 埠口的相關性 範例一:列出目前鳥哥的測試用主機 USB 各埠口狀態 [root@www ~]# lsusb Bus 001 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000 Bus 002 Device 002: ID 0d62:a100 Darfon Electronics Corp. Benq Mouse # 如上所示,鳥哥的主機有兩個 USB 控制器 (bus),而 Bus 002 有接了一個設備, # 該設備的 ID 是 0d62:a100,對應的廠商與產品為 Benq 的滑鼠。
確實非常清楚吧!其中比較有趣的就屬那個 ID 號碼與廠商型號對照了!那也是寫入在 /usr/share/hwdata/pci.ids 的東西,你也可以自行去查詢一下喔!更多資訊我們留待下一小節再來討論吧!
剛剛那個 lspci 找到的是目前主機上面的硬體配備,那麼整部機器的儲存設備, 主要是硬碟對吧!請問,您硬碟由開機到現在,已經存取多少資料呢?這個時候就得要 iostat 這個指令的幫忙了! 不過,預設 CentOS 並沒有安裝這個軟體,因此你必須要先安裝他才行!如果你已經有網路了, 那麼使用『 yum install sysstat 』先來安裝此軟體吧!否則無法進行如下的測試喔!
[root@www ~]# iostat [-c|-d] [-k|-m] [-t] [間隔秒數] [偵測次數] 選項與參數: -c :僅顯示 CPU 的狀態; -d :僅顯示儲存設備的狀態,不可與 -c 一起用; -k :預設顯示的是 block ,這裡可以改成 K bytes 的大小來顯示; -m :與 -k 類似,只是以 MB 的單位來顯示結果。 -t :顯示日期出來; 範例一:顯示一下目前整個系統的 CPU 與儲存設備的狀態 [root@www ~]# iostat Linux 2.6.18-92.el5 (www.vbird.tsai) 06/03/2009 avg-cpu: %user %nice %system %iowait %steal %idle 0.35 0.31 0.25 0.03 0.00 99.06 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn hda 0.29 3.46 4.01 1116645 1295796 # 瞧!上面數據總共分為上下兩部分,上半部顯示的是 CPU 的當下資訊; # 下面數據則是顯示儲存裝置 /dev/hda 的相關數據,他的數據意義: # tps :平均每秒鐘的傳送次數!與資料傳輸『次數』有關,非容量! # kB_read/s :開機到現在平均的讀取單位; # kB_wrtn/s :開機到現在平均的寫入單位; # kB_read :開機到現在,總共讀出來的檔案單位; # kB_wrtn :開機到現在,總共寫入的檔案單位; 範例二:每兩秒鐘偵測一次,並且共偵測三次儲存裝置 [root@www ~]# iostat -d 2 3 Linux 2.6.18-92.el5 (www.vbird.tsai) 06/03/2009 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn hda 0.29 3.46 4.01 1116645 1296276 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn hda 0.00 0.00 0.00 0 0 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn hda 0.00 0.00 0.00 0 0 # 仔細看一下,如果是有偵測次數的情況,那麼第一次顯示的是『從開機到現在的數據』, # 第二次以後所顯示的資料則代表兩次偵測之間的系統傳輸值!舉例來說,上面的資訊中, # 第二次顯示的資料,則是兩秒鐘內(本案例)系統的總傳輸量與平均值。
透過 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 上都以 Enhanced Host Controller Interface (EHCI) 來驅動的。我們使用 lsmod 來找一下 hci 這個關鍵字看看,鳥哥的測試主機驅動了多少 USB 模組了呢?
[root@www ~]# lsmod | grep hci Module Size Used by uhci_hcd 25421 0 ohci_hcd 23261 0 ehci_hcd 33357 0 # 三個模組都有載入,再來找一下 ehci_hcd 的說明看看: [root@www ~]# modinfo ehci_hcd filename: /lib/modules/2.6.18-92.el5/kernel/drivers/usb/host/ehci-hcd.ko license: GPL author: David Brownell description: 10 Dec 2004 USB 2.0 'Enhanced' Host Controller (EHCI) Driver srcversion: 006DD5CF82C35E943696BE7 ....(底下省略)....
我們之前談過 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, 所以,建立的方法為:
# 假設你已經有 /dev/usb/lp0 ,那我們來嘗試建立 /dev/usb/lp1 看看 [root@www ~]# mkdir -p /dev/usb [root@www ~]# mknod /dev/usb/lp1 c 180 1 [root@www ~]# chown root:lp /dev/usb/lp1 [root@www ~]# chmod 660 /dev/usb/lp1 [root@www ~]# ls -l /dev/usb/lp1 crw-rw---- 1 root lp 180, 1 Jun 3 14:27 /dev/usb/lp1 [root@www ~]# echo "testing" > /dev/usb/lp1
在我們一般的生活當中,最常見的兩種 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、機殼、電源、風扇等等的資訊了! 直接來作看看吧!
[root@www ~]# sensors-detect # sensors-detect revision 1.413 (2006/01/19 20:28:00) ....(中間省略).... It is generally safe and recommended to accept the default answers to all questions, unless you know what you're doing. <==就一直接受就對了! We can start with probing for (PCI) I2C or SMBus adapters. You do not need any special privileges for this. Do you want to probe now? (YES/no): y Probing for PCI bus adapters... Use driver `i2c-sis630' for device 00:00.0: Silicon Integrated Systems SIS630 Probe succesfully concluded. # 接下來的行為當中,反正你就一直按 Enter 就可以了!讓他自動去偵測! To make the sensors modules behave correctly, add these lines to /etc/modprobe.conf: #----cut here---- # I2C module options alias char-major-89 i2c-dev #----cut here---- To load everything that is needed, add this to some /etc/rc* file: #----cut here---- # I2C adapter drivers modprobe i2c-sis630 modprobe i2c-isa # I2C chip drivers modprobe eeprom modprobe it87 # sleep 2 # optional /usr/bin/sensors -s # recommended #----cut here---- Do you want to generate /etc/sysconfig/lm_sensors? (YES/no): Copy prog/init/lm_sensors.init to /etc/rc.d/init.d/lm_sensors for initialization at boot time.
上面就進行好型號的偵測,並且主動的建立了 /etc/sysconfig/lm_sensors 的參數設定檔。不過我們依舊需要進行一些額外的處理! 包括讓系統開機主動載入模組的功能!這樣我們就能夠直接使用 lm_sensors 來偵測而不需要手動載入偵測模組啊! 你可以這樣做:
[root@www ~]# vi /etc/modprobe.conf alias char-major-89 i2c-dev # 將剛剛偵測到的模組給他寫入到這個檔案當中! [root@www ~]# vi /etc/rc.d/rc.local # I2C adapter drivers modprobe i2c-sis630 modprobe i2c-isa # I2C chip drivers modprobe eeprom modprobe it87 sleep 2s /usr/bin/sensors -s [root@www ~]# chkconfig --list lm_sensors lm_sensors 0:off 1:off 2:on 3:on 4:on 5:on 6:off # 確定 lm_sensors 預設開機會啟動即可!此時你可以重新 reboot , # 或者執行上述的 modprobe 之後,在進行底下的偵測囉!
偵測的指令就是 sensors 啊!直接動作吧!
[root@www ~]# sensors it87-isa-0290 <==使用到的模組功能! Adapter: ISA adapter VCore 1: +1.55 V (min = +1.42 V, max = +1.57 V) VCore 2: +1.09 V (min = +2.40 V, max = +2.61 V) ALARM +3.3V: +1.25 V (min = +3.14 V, max = +3.47 V) ALARM +5V: +2.69 V (min = +4.76 V, max = +5.24 V) ALARM +12V: +5.82 V (min = +11.39 V, max = +12.61 V) ALARM -12V: -17.05 V (min = -12.63 V, max = -11.41 V) ALARM -5V: -7.40 V (min = -5.26 V, max = -4.77 V) ALARM Stdby: +2.07 V (min = +4.76 V, max = +5.24 V) ALARM VBat: +0.40 V fan1: 0 RPM (min = 0 RPM, div = 2) fan2: 0 RPM (min = 3000 RPM, div = 2) ALARM fan3: 2689 RPM (min = 3000 RPM, div = 2) M/B Temp: +33°C (low = +15°C, high = +40°C) sensor = diode CPU Temp: +37°C (low = +15°C, high = +45°C) sensor = thermistor Temp3: -5°C (low = +15°C, high = +45°C) sensor = disabled # 你可以發現一大堆的錯誤訊息!沒關係的!這是因為鳥哥的主機板太舊, # 導致 lm_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 這個服務才啟動。讓我們檢查看看是否真的有啟動啊!
[root@www ~]# pstree -p | egrep '(udevd|hal)' |-hald(4814)---hald-runner(4815)-+-hald-addon-acpi(4822) | |-hald-addon-keyb(4827) | `-hald-addon-stor(4837) |-udevd(401) # 確實有啟動喔!一個是 udevd 一個是 hald 啦!
老實說,如果你已經啟動了這兩個傢伙,那麼其他的事不需要進行,交給這兩個小玩意兒自己處理即可。 但如果你想要多瞭解 udev 是如何進行裝置的建立時,那麼我們可以來玩玩底下的咚咚。
假設你想要將你的隨身碟取名為較有趣的裝置,不想再使用類似 /dev/sda1 之類的名稱時,可以怎麼作呢? 我們可以透過更改 udev 的規則 (rule) 來使用 mknod 建立不同名稱的裝置檔案。舉例來說, 鳥哥這部測試機的硬碟使用為 /dev/hda ,因此第一個 USB 快閃碟裝置應該是 /dev/sda1 才對! 如果你的系統使用 SATA 磁碟,那麼你的快閃碟可能就得要由 /dev/sdb1 開始編號起來了。
udev 建立裝置檔案的規則放置到 /etc/udev/rules.d/ 目錄下,在該目錄下的檔案可以依序進行處理的。 以最簡單的語法來看,在該目錄下可以使用的變數與對應可以是:
KERNEL=="核心能夠分析到的檔名", NAME="你要使用的裝置檔名"
當然還有很多語法,不過這裡我們先不介紹,有興趣的查一下本文最後的連結去看看吧! 假設鳥哥的 /dev/sda1 要取名字成為 /dev/vbirdusb ,你可以這樣做:
# 1. 先在規則目錄下新增一個檔案,檔名設定為 99-vbirdusb.rules 好了 [root@www ~]# cd /etc/udev/rules.d/ [root@www rules.d]# vi 99-vbirdusb.rules KERNEL=="sda1", NAME="vbirdusb" # 上面這一行就足夠啦!注意,檔名前的 /dev 不需要寫入! # 2. 插入一支隨身碟,然後檢查看看: [root@www rules.d]# ll /dev/sda* /dev/vbirdusb brw-r----- 1 root disk 8, 0 Jun 3 16:43 /dev/sda brw-r----- 1 root disk 8, 1 Jun 3 16:43 /dev/vbirdusb # 唔! /dev/sda1 不見了!取而代之的是 /dev/vbirdusb 啦! [root@www rules.d]# mount /dev/vbirdusb /mnt [root@www rules.d]# df Filesystem 1K-blocks Used Available Use% Mounted on ....(中間省略).... /dev/vbirdusb 976064 192784 783280 20% /mnt # 很有趣吧!裝置名稱被鳥哥改過了!
雖然這樣很具有個性化的需求,不過總是不太可靠~萬一哪天忘記自己有進行這些動作,偏偏用核心預設的檔名去處理時, 會發生很多不明的錯誤啊!所以將剛剛建立的資料反向刪除回來吧!
# 1. 先卸載系統吧! [root@www ~]# umount /dev/vbirdusb # 2. 拔除隨身碟,並將規則檔刪除! [root@www ~]# rm /etc/udev/rules.d/99-vbirdusb.rules # 3. 再插入隨身碟,測試一下檔名有沒有恢復正常? [root@www ~]# ll /dev/sda* brw-r----- 1 root disk 8, 0 Jun 3 16:50 /dev/sda brw-r----- 1 root disk 8, 1 Jun 3 16:50 /dev/sda1 # 看起來,檔名確實恢復正常囉!