最近更新日期:2009/08/07
1. 什麼是 X Window System
1.1 X Window 的發展簡史 1.2 主要元件: X Server/X Client/Window Manager/Display Manager 1.3 X Window 的啟動流程:startx, xinit 1.4 X 啟動流程測試 1.5 我是否需要啟用 X Window System 2. X Server 設定檔解析與設定 2.1 解析 xorg.conf 設定 2.2 X Font Server (XFS) 與加入額外中文字形:chkfontpath, fc-cache 2.3 設定檔重建與顯示器參數微調:透過 gtf 調整解析度 3. 顯示卡驅動程式安裝範例 3.1 NVidia 3.2 ATI (AMd) 3.3 Intel 4. 重點回顧 5. 本章習題 6. 參考資料與延伸閱讀 7. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23897 什麼是 X Window System Unix Like 作業系統不是只能進行伺服器的架設而已,在美編、排版、製圖、多媒體應用上也是有其需要的。 這些需求都需要用到圖形介面 (Graphical User Interface, GUI) 的操作的, 所以後來才有所謂的 X Window System 這玩意兒。那麼為啥圖形視窗介面要稱為 X 呢?因為就英文字母來看 X 是在 W(indow) 後面,因此,人們就戲稱這一版的視窗介面為 X 囉 (有下一版的新視窗之意)! 事實上, X Window System 是個非常大的架構,他還用到網路功能呢!也就是說,其實 X 視窗系統是能夠跨網路與跨作業系統平台的!
而鳥哥這個基礎篇是還沒有談到伺服器與網路主從式架構,因此 X 在這裡並不容易理解的。不過,沒關係!
我們還是談談 X 怎麼來的,然後再來談談這 X 視窗系統的元件有哪些,慢慢來,應該還是能夠理解 X 的啦! X Window 的發展簡史 X Window 系統最早是由 MIT (Massachusetts Institute of Technology, 麻省理工學院) 在 1984 年發展出來的, 當初 X 就是在 Unix 的 System V 這個作業系統版本上面開發出來的。在開發 X 時,開發者就希望這個視窗介面不要與硬體有強烈的相關性,這是因為如果與硬體的相關性高,那就等於是一個作業系統了, 如此一來的應用性會比較侷限。因此 X 在當初就是以應用程式的概念來開發的,而非以作業系統來開發。 由於這個 X 希望能夠透過網路進行圖形介面的存取,因此發展出許多的 X 通訊協定,這些網路架構非常的有趣, 所以吸引了很多廠商加入研發,因此 X 的功能一直持續在加強!一直到 1987 年更改 X 版本到 X11 ,這一版 X 取得了明顯的進步, 後來的視窗介面改良都是架構於此一版本,因此後來 X 視窗也被稱為 X11 。這個版本持續在進步當中,到了 1994 年發佈了新版的 X11R6 ,後來的架構都是沿用此一釋出版本,所以後來的版本定義就變成了類似 1995 年的 X11R6.3 之類的樣式。 (註1) 1992 年 XFree86 (http://www.xfree86.org/) 計畫順利展開, 該計畫持續在維護 X11R6 的功能性,包括對新硬體的支援以及更多新增的功能等等。當初定名為 XFree86 其實是根據『 X + Free software + x86 硬體 』而來的呢。早期 Linux 所使用的 X Window 的主要核心都是由 XFree86 這個計畫所提供的,因此,我們常常將 X 系統與 XFree86 掛上等號的說。 不過由於一些授權的問題導致 XFree86 無法繼續提供類似 GPL 的自由軟體,後來 Xorg 基金會就接手 X11R6 的維護! Xorg (http://www.x.org/) 利用當初 MIT 發佈的類似自由軟體的授權, 將 X11R6 拿來進行維護,並且在 2004 年發佈了 X11R6.8 版本,更在 2005 年後發表了 X11R7.x 版。 現在我們 CentOS 5.x 使用的 X 就是 Xorg 提供的 X11R7 喔! 而這個 X11R6/X11R7 的版本是自由軟體,因此很多組織都利用這個架構去設計他們的圖形介面喔!包括 Mac OS X v10.3 也曾利用過這個架構來設計他們的視窗呢!我們的 CentOS 也是利用 Xorg 提供的 X11 啦! 從上面的說明,我們可以知道的是:
主要元件: X Server/X Client/Window Manager/Display Manager 如同前面談到的,X Window system 是個利用網路架構的圖形使用者介面軟體,那到底這個架構可以分成多少個元件呢? 基本上是分成 X Server 與 X Client 兩個元件而已喔!其中 X Server 在管理硬體,而 X Client 則是應用程式。 在運作上,X Client 應用程式會將所想要呈現的畫面告知 X Server ,最終由 X server 來將結果透過他所管理的硬體繪製出來! 整體的架構我們大約可以使用如下的圖示來作個介紹:(註2) 圖 1.2.1、 X Window System 的架構 (註2) 上面的圖示非常有趣喔!我們在用戶端想要取得來自伺服器的圖形資料時,我們用戶端使用的當然是用戶端的硬體設備啊, 所以,X Server 的重點就是在管理用戶端的硬體,包括接受鍵盤/滑鼠等設備的輸入資訊, 並且將圖形繪製到螢幕上 (請注意上圖的所有元件之間的箭頭指示)。但是到底要繪製個啥東西呢? 繪圖總是需要一些數據才能繪製吧?此時 X Client (就是 X 應用程式) 就很重要啦!他主要提供的就是告知 X Server 要繪製啥東西。那照這樣的想法來思考,我們是想要取得遠端伺服器的繪圖數據來我們的電腦上面顯示嘛! 所以囉,遠端伺服器提供的是 X client 軟體啊! 底下就讓我們來更深入的聊一聊這兩個元件吧!
既然 X Window System 是要顯示圖形介面,因此理所當然的需要一個元件來管理我主機上面的所有硬體設備才行! 這個任務就是 X Server 所負責的。而我們在 X 發展簡史當中提到的 XFree86 計畫及 Xorg 基金會,主要提供的就是這個 X Server 啦!那麼 X Server 管理的設備主要有哪些呢?其實與輸入/輸出有關喔!包括鍵盤、滑鼠、手寫板、顯示器 (monitor) 、螢幕解析度與色彩深度、顯示卡 (包含驅動程式) 與顯示的字型等等,都是 X Server 管理的。 咦!顯示卡、螢幕以及鍵盤滑鼠的設定,不是在開機的時候 Linux 系統以 /etc/sysconfig 目錄下的 keyboard/mouse 等設定檔就設好了嗎?為何 X Server 還要重新設定啊?這是因為 X Window 在 Linux 裡面僅能算是『一套很棒的軟體』, 所以 X Window 有自己的設定檔,你必須要針對他的設定檔設定妥當才行。也就是說, Linux 的設定與 X Server 的設定不一定要相同的!因此,你在 Linux 的 run level 3 想要玩圖形介面時,就得要載入 X Window 需要的驅動程式才行∼總之, X Server 的主要功能就是在管理『主機』上面的顯示硬體與驅動程式。 既然 X Window System 是以透過網路取得圖形介面的一個架構,那麼用戶端是如何取得伺服器端提供的圖形畫面呢? 由於伺服器與用戶端的硬體不可能完全相同,因此我們用戶端當然不可能使用到伺服器端的硬體顯示功能! 舉例來說,你的用戶端電腦並沒有 3D 影像加速功能,那麼你的畫面可能呈現出伺服器端提供的 3D 加速嗎? 當然不可能吧!所以囉 X Server 的目的在管理用戶端的硬體設備!也就是說:『每部用戶端主機都需要安裝 X Server,而伺服器端則是提供 X Client 軟體, 以提供用戶端繪圖所需要的數據資料』。 X Server / X Client 的互動並非僅有 client --> server,兩者其實有互動的!從上圖 1.2.1 我們也可以發現,
X Server 還有一個重要的工作,那就是將來自輸入裝置 (如鍵盤、滑鼠等) 的動作告知 X Client,
你曉得, X Server 既然是管理這些周邊硬體,所以,周邊硬體的動作當然是由 X Server 來管理的,
但是 X Server 本身並不知道周邊設備這些動作會造成什麼顯示上的效果,
因此 X Server 會將周邊設備的這些動作行為告知 X Client ,讓 X Client 去傷腦筋。
前面提到的 X Server 主要是管理顯示介面與在螢幕上繪圖,同時將輸入裝置的行為告知 X Client, 此時 X Client 就會依據這個輸入裝置的行為來開始處理,最後 X Client 會得到『 嗯!這個輸入裝置的行為會產生某個圖示』,然後將這個圖示的顯示資料回傳給 X Server , X server 再根據 X Client 傳來的繪圖資料將他描圖在自己的螢幕上,來得到顯示的結果。 也就是說, X Client 最重要的工作就是處理來自 X Server 的動作,將該動作處理成為繪圖資料, 再將這些繪圖資料傳回給 X Server 囉!由於 X Client 的目的在產生繪圖的數據,因此我們也稱呼 X Client 為 X Application (X 應用程式)。而且,每個 X Client 並不知道其他 X Client 的存在, 意思是說,如果有兩個以上的 X client 同時存在時,兩者並不知道對方到底傳了什麼數據給 X Server , 因此 X Client 的繪圖常常會互相重疊而產生困擾喔! 舉個例子來說,當我們在 X Window 的畫面中,將滑鼠向右移動,那他是怎麼告知 X Server 與 X Client 的呢? 首先, X server 會偵測到滑鼠的移動,但是他不知道應該怎麼繪圖啊!此時,他將滑鼠的這個動作告知 X Client, X Client 就會去運算,結果得到,嘿嘿!其實要將滑鼠指標向右移動幾個位素,然後將這個結果告知 X server , 接下來,您就會看到 X Server 將滑鼠指標向右移動囉∼ 這樣做有什麼好處啊?最大的好處是, X Client 不需要知道 X Server 的硬體配備與作業系統!因為 X Client 單純就是在處理繪圖的資料而已,本身是不繪圖的。所以,在用戶端的 X Server 用的是什麼硬體?用的是哪套作業系統?伺服器端的 X Client 根本不需要知道∼相當的先進與優秀∼對吧! ^_^ 整個運作流程可以參考下圖:用戶端用的是什麼作業系統在 Linux 主機端是不在乎的! 圖 1.2.2、 X Server 用戶端的作業系統與 X client 的溝通示意
剛剛前面提到,X Client 的主要工作是將來自 X Server 的資料處理成為繪圖數據,再回傳給 X server 而已, 所以 X client 本身是不知道他在 X Server 當中的位置、大小以及其他相關資訊的。這也是上面我們談到的, X client 彼此不知道對方在螢幕的哪個位置啊!為了克服這個問題,因此就有 Window Manager (WM, 視窗管理員) 的產生了。 視窗管理員也是 X client ,只是他主要在負責全部 X client 的控管,還包括提供某些特殊的功能,例如:
我們常常聽到的 KDE, GNOME, XFCE 還有陽春到爆的 twm 等等,都是一些視窗管理員的專案計畫啦! 這些專案計畫中,每種視窗管理員所用以開發的顯示引擎都不太相同,所著重的方向也不一樣, 因此我們才會說,在 Linux 底下,每套 Window Manager 都是獨特存在的,不是換了桌面與顯示效果而已, 而是連顯示的引擎都不會一樣喔!底下是這些常見的視窗管理員全名與連結:
由於 Linux 越來越朝向 Desktop 桌上型電腦使用方向走,因此視窗管理員的角色會越來越重要! 目前我們 CentOS 預設提供的有 GNOME 與 KDE ,這兩個視窗管理員上面還有提供非常多的 X client 軟體, 包括辦公室生產力軟體 (Open Office) 以及常用的網路功能 (firefox 瀏覽器、 Thunderbird 收發信件軟體) 等。 現在使用者想要接觸 Linux 其實真的越來越簡單了,如果不要架設伺服器,那麼 Linux 桌面的使用與 Windows 系統可以說是一模一樣的!不需要學習也能夠入門哩! ^_^ 那麼你知道 X Server / X client / window manager 的關係了嗎?我們舉 CentOS 預設的 GNOME 為例好了,
由於我們要在本機端啟動 X Window system ,因此,在我們的 CentOS 主機上面必須要有 Xorg 的 X server 核心,
這樣才能夠提供螢幕的繪製啊∼然後為了讓視窗管理更方便,於是就加裝了 GNOME 這個計畫的 window manager ,
然後為了讓自己的使用更方便,於是就在 GNOME 上面加上更多的視窗應用軟體,包括輸入法等等的,
最後就建構出我們的 X Window System 囉∼ ^_^!所以你也會知道,X server/X client/Window Manager
是同時存在於我們一部 Linux 主機上頭的啦!
談完了上述的資料後,我們得要瞭解一下,那麼我如何取得 X Window 的控制?在本機的文字介面底下你可以輸入 startx 來啟動 X 系統,此時由於你已經登入系統了,因此不需要重新登入即可取得 X 環境。但如果是 runlevel 5 的環境呢?你會發現在 tty7 的地方有個可以讓你使用圖形介面登入 (輸入帳號密碼) 的咚咚,那個是啥? 是 X Server/X client 還是什麼的?其實那是個 Display Manager 啦!這個 display manager 最大的任務就是提供登入的環境, 並且載入使用者選擇的 Window Manager 與語系等資料喔! 幾乎所有的大型視窗管理員專案計畫都會提供 display manager 的,在 CentOS 上面我們主要利用的是 GNOME 的 GNOME Display Manager (gdm) 這支程式來提供 tty7 的圖形介面登入喔!至於登入後取得的視窗管理員, 則可以在 gdm 上面進行選擇的!我們在第五章介紹的登入環境, 那個環境其實就是 gdm 提供的啦!再回去參考看看圖示吧! ^_^!所以說,並非 gdm 只能提供 GNOME 的登入而已喔! X Window 的啟動流程 現在我們知道要啟動 X Window System 時,必須要先啟動管理硬體與繪圖的 X Server ,然後才載入 X Client 。 基本上,目前都是使用 Window Manager 來管理視窗介面風格的。那麼如何取得這樣的視窗系統呢? 你可以透過登入本機的文字介面後,輸入 startx 來啟動 X 視窗;也能夠透過 display manager (如果有啟動 runlevel 5) 提供的登入畫面,輸入你的帳號密碼來登入與取得 X 視窗的! 問題是,你的 X server 設定檔為何?如何修改解析度與顯示器?你能不能自己設定預設啟動的視窗管理員?
如何設定預設的使用者環境 (與 X client 有關) 等等的,這些資料都需要透過瞭解 X 的啟動流程才能得知!
所以,底下我們就來談談如何啟動 X 的流程吧! ^_^
我們都知道 Linux 是個多人多工的作業系統,所以啦,X 視窗也是可以根據不同的使用者而有不同的設定! 這也就是說,每個用戶啟動 X 時, X server 的解析度、啟動 X client 的相關軟體及 Window Manager 的選擇可能都不一樣! 但是,如果你是首次登入 X 呢?也就是說,你自己還沒有建立自己的專屬 X 畫面時,系統又是從哪裡給你這個 X 預設畫面呢?而如果你已經設定好相關的資訊,這些資訊又是存放於何處呢? 事實上,當你在純文字介面且並沒有啟動 X 視窗的情況下來輸入 startx 時,這個 startx 的作用就是在幫你設定好上頭提到的這些動作囉! startx 其實是一個 shell script ,他是一個比較親和的程式,會主動的幫忙使用者建立起他們的 X 所需要引用的設定檔而已。你可以自行研究一下 startx 這個 script 的內容,鳥哥在這裡僅就 startx 的作用作個介紹。 startx 最重要的任務就是找出使用者或者是系統預設的 X server 與 X client 的設定檔,而使用者也能夠使用 startx 外接參數來取代設定檔的內容。這個意思是說:startx 可以直接啟動,也能夠外接參數,例如底下格式的啟動方式:
startx 後面接的參數以兩個減號『--』隔開,前面的是 X Client 的設定,後面的是 X Server 的設定。 上面的範例是讓 X server 以色彩深度 16 bit 色 (亦即每一像素佔用 16 bit ,也就是 65536 色) 顯示, 因為色彩深度是與 X Server 有關的,所以參數當然是寫在 -- 後面囉,於是就成了上面的模樣! 你會發現,鳥哥上面談到的 startx 都是提到如何找出 X server / X client 的設定值而已! 沒錯,事實上啟動 X 的是 xinit 這支程式, startx 僅是在幫忙找出設定值而已!那麼 startx 找到的設定值可用順序為何呢?基本上是這樣的:
根據上述的流程找到啟動 X 時所需要的 X server / X client 的參數,接下來 startx 會去呼叫 xinit
這支程式來啟動我們所需要的 X 視窗系統整體喔!接下來當然就是要談談 xinit 囉∼
事實上,當 startx 找到需要的設定值後,就呼叫 xinit 實際啟動 X 的。他的語法是:
那個 client option 與 server option 如何下達呢?其實那兩個咚咚就是由剛剛 startx 去找出來的啦! 在我們透過 startx 找到適當的 xinitrc 與 xserverrc 後,就交給 xinit 來執行。 在預設的情況下 (使用者尚未有 ~/.xinitrc 等檔案時),你輸入 startx , 就等於進行 xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc 這個指令一般!但由於 xserverrc 也不存在,參考上一小節的參數搜尋順序, 因此實際上的指令是:xinit /etc/X11/xinit/xinitrc -- /usr/bin/X,這樣瞭了嗎? 那為什麼不要直接執行 xinit 而是使用 startx 來呼叫 xinit 呢?這是因為我們必須要取得一些參數嘛! startx 可以幫我們快速的找到這些參數而不必手動輸入的。因為單純只是執行 xinit 的時候,系統的預設 X Client 與 X Server 的內容是這樣的:(註3)
在 X client 方面:那個 xterm 是 X 視窗底下的虛擬終端機,後面接的參數則是這個終端機的位置與登入與否。 最後面會接一個『 -display :0 』表示這個虛擬終端機是啟動在『第 :0 號的 X 顯示介面』的意思。至於 X Server 方面, 而我們啟動的 X server 程式就是 X 啦!其實 X 就是 Xorg 的連結檔,亦即是 X Server 的主程式囉! 所以我們啟動 X 還挺簡單的∼直接執行 X 而已,同時還指定 X 啟動在第 :0 個 X 顯示介面。 如果單純以上面的內容來啟動你的 X 系統時,你就會發現 tty7 有畫面了!只是.....很醜∼因為我們還沒有啟動 window manager 啊! 從上面的說明我們可以知道, xinit 主要在啟動 X server 與載入 X client ,但這個 xinit 所需要的參數則是由
startx 去幫忙找尋的。因此,最重要的當然就是 startx 找到的那些參數啦!
所以呢,重點當然就是 /etc/X11/xinit/ 目錄下的 xinitrc 與 xserverrc 這兩個檔案的內容是啥囉∼
雖然 xserverrc 預設是不存在的。底下我們就分別來談一談這兩個檔案的主要內容與啟動的方式∼
X 視窗最先需要啟動的就是 X server 啊,那 X server 啟動的腳本與參數是透過 /etc/X11/xinit/ 裡面的 xserverrc 。不過我們的 CentOS 5.x 根本就沒有 xserverrc 這個檔案啊! 那使用者家目錄目前也沒有 ~/.xserverrc ,這個時候系統會怎麼做呢?其實就是執行 /usr/bin/X 這個指令啊! 這個指令也是系統最原始的 X server 執行檔囉。 在啟動 X Server 時,Xorg 會去讀取 /etc/X11/xorg.conf 這個設定檔。針對這個設定檔的內容, 我們會在下個小節介紹。如果一切順利,那麼 X 就會順利的在 tty7 的環境中啟動了 X 。 單純的 X 啟動時,你只會看到畫面一片漆黑,然後中心有個滑鼠的游標而已∼ 由前一小節的說明中,你可以發現到其實 X 啟動的時候還可以指定啟動的介面喔!那就是 :0 這個參數,這是啥? 事實上我們的 Linux 可以『同時啟動多個 X』喔!第一個 X 的畫面會在 :0 亦即是 tty7 ,第二個 X 則是 :1 亦即是 tty8 。 後續還可以有其他的 X 存在的。因此,上一小節我們也有發現, xterm 在載入時,也必須要使用 -display 來說明, 這個 X 應用程式是需要在哪個 X 載入的才行呢!其中比較有趣的是, X server 未註明載入的介面時,預設是使用 :0 ∼ 但是 X client 未註明時,則無法執行喔! 啟動了 X server 後,接下來就是載入 X client 到這個 X server 上面啦!
假設你的家目錄並沒有 ~/.xinitrc ,則此時 X Client 會以 /etc/X11/xinit/xinitrc 來作為啟動 X Client 的預設腳本。xinitrc 這個檔案會將很多其他的檔案參數引進來, 包括 /etc/X11/xinit/xinitrc-common 與 /etc/X11/xinit/Xclients 還有 /etc/sysconfig/desktop 。你可以參考 xinitrc 後去搜尋各個檔案來瞭解彼此的關係。 不過分析到最後,其實最終就是載入 KDE 或者是 GNOME 而已。你也可以發現最終在 XClient 檔案當中會有兩個指令的搜尋, 包括 startkde 與 gnome-session 這兩個,這也是 CentOS 預設會提供的兩個主要的 Window Manager 囉。 而你也可以透過修改 /etc/sysconfig/desktop 內的 DESKTOP=GNOME 或 DESKTOP=KDE 來決定預設使用哪個視窗管理員的。 如果你並沒有安裝這兩個大傢伙,那麼 X 就會去使用陽春的 twm 這個視窗管理員來管理你的環境囉。
另外,如果有特殊需求,你當然可以自訂 X client 的參數!這就得要修改你家目錄下的 ~/.xinitrc 這個檔案囉。 不過要注意的是,如果你的 .xinitrc 設定檔裡面有啟動的 x client 很多的時候,千萬注意將除了最後一個 window manager 或 X Client 之外,都放到背景裡面去執行啊!舉例來說,像底下這樣:
意思就是說,我啟動了 X ,並且同時啟動 xclock / xterm / twm 這三個 X clients 喔!
如此一來,你的 X 就有這三個咚咚可以使用了!如果忘記加上 & 的符號,那就.....
會讓系統等待啊,而無法一次就登入 X 呢!
好了,根據上面的說明,我們知道要在文字介面底下啟動 X 時,直接使用 startx 來找到 X server 與 X client 的參數或設定檔, 然後再呼叫 xinit 來啟動 X 視窗系統。xinit 先載入 X server 到預設的 :0 這個顯示介面 (預設在 tty7),然後再載入 X client 到這個 X 顯示介面上。而 X client 通常就是 GNOME 或 KDE ,這兩個設定也能夠在 /etc/sysconfig/desktop 裡面作好設定。最後我們想要瞭解的是,既然 X 是可以跨網路的,那 X 啟動的埠口是幾號? 其實,CentOS 由於考慮 X 視窗是在本機上面運作,因此將埠口改為插槽檔 (socket) 了,因此你無法觀察到 X 啟動的埠口的。事實上, X server 應該是要啟動一個 port 6000 來與 X client 進行溝通的! 由於系統上面也可能有多個 X 存在,因此我們就會有 port 6001, port 6002... 等等。這也就是說:
在 X Window System 的環境下,我們稱 port 6000 為第 0 個顯示介面,亦即為 hostname:0 , 那個主機名稱通常可以不寫,所以就成了 :0 即可。在預設的情況下,第一個啟動的 X (不論是啟動在第幾個 port number) 是在 tty7 ,亦即按下 [ctrl]+[Alt]+[F7] 那個畫面。 而起動的第二個 X (注意到了吧!可以有多個 X 同時啟動在您的系統上呢) 則預設在 tty8 亦即 [ctrl]+[Alt]+[F8] 那個畫面呢!很神奇吧! ^_^ 如前所述,因為主機上的 X 可能有多個同時存在,因此,當我們在啟動 X Server / Client 時, 應該都要註明該 X Server / Client 主要是提供或接受來自哪個 display 的 port number 才行。 X 啟動流程測試 好了,我們可以針對 X Server 與 X client 的架構來做個簡單的測試喔! 由於鳥哥不知道你到底有沒有啟動過 X ,因此底下鳥哥將這個練習指定於第二個 X ,亦即是 :1 這個顯示位置來顯示喔! 而且,底下的指令都是在 tty1 的地方執行的,至於底下的畫面則是在 tty8 的地方展現。 因此,請自行切換 tty1 下達指令與 tty8 查閱結果囉!(如果是 CentOS 之類的 Red Hat 系統,請務必要啟動 xfs 這個服務喔!)
圖 1.4.1 、 單純啟動 X server的情況 上述的 X 是大寫,那個 :1 是寫在一起的,至於 & 則是放到背景去執行。此時系統會主動的跳到第二個圖形介面終端機,亦即 tty8 上喔!所以如果一切順利的話,你應該可以看到一個 X 的滑鼠游標可以讓你移動了(如上圖所示)。 該畫面就是 X Server 啟動的畫面囉!醜醜的,而且沒有什麼 client 可以用啊! 接下來,請按下 [ctrl]+[alt]+[F1] 回到剛剛下達指令的終端機:
圖 1.4.2 、 在 X 上面啟動 xterm 終端機顯示的結果 那個 xterm 是必須要在 X 底下才能夠執行的終端機介面。加入的參數 -display 則是指出這個 xterm 要在那個 display 使用的。這兩個指令請不要一次下完!先執行一次,然後按下 [ctrl]+[alt]+[F8] 去到 X 畫面中,你會發現多了一個終端機囉∼ 不過,可惜的是,你無法看到終端機的標題、也無法移動終端機,當然也無法調整終端機的大小啊!我們回到剛剛的 tty1 然後再次下達 xterm 指令,理論上應該多一個終端機,去到 tty8 查閱一下。唉∼沒有多出一個終端機啊? 這是因為兩個終端機重疊了∼我們又無法移動終端機,所以只看到一個。 接下來,請再次回到 tty1 去下達指令吧!
圖 1.4.3 、 分別啟動 xclock 時鐘與 xeyes 眼睛的結果 跟前面一樣的,我們又多執行了兩個 X client ,其中 xclock 會顯示時鐘,而 xeyes 則是會出現一雙大眼睛來盯著游標! 你可以移動一下游標就可以發現眼睛的焦聚會跑啊 ^_^!不過,目前的四個 X client 通通不能夠移動與放大縮小! 如此一來,你怎麼在 xterm 底下下達指令啊?當然就很困擾∼所以讓我們來載入最陽春的視窗管理員吧!
圖 1.4.4 、 視窗管理員 twm 的功能顯示 回到 tty1 後,用最簡單的 twm 這個視窗管理員來管理我們的 X 吧!輸入之後,去到 tty8 看看,用滑鼠移動一下終端機看看?可以移動了吧?也可以縮小放大視窗囉∼同時也出現了標題提示囉∼也看到兩個終端機啦! 現在終於知道視窗管理員的重要性了吧? ^_^!在黑螢幕地方按下滑鼠右鍵,就會出現類似上面畫面最右邊的選單, 你就可以進行額外的管理囉∼玩玩看先!
很有趣的一個小實驗吧∼透過這個實驗,你應該會對 X server 與 Window manager 及 tty7 以後的終端介面使用方式有比較清楚的瞭解∼加油! 我是否需要啟用 X Window System 談了這麼多 X 視窗系統方面的資訊後,再來聊聊,那麼你的 Linux 主機是否需要預設就啟動 X 視窗呢? 一般來說,如果你的 Linux 主機定位為網路伺服器的話,那麼由於 Linux 裡面的主要服務的設定檔都是純文字的格式檔案, 相當的容易設定的,所以啊,根本就是不需要 X Window 存在呢!因為 X Window 僅是 Linux 系統內的一個軟體而已啊! 但是萬一你的 Linux 主機是用來作為你的桌上電腦用的,那麼 X Window 對你而言,就是相當重要的一個咚咚了!因為我們日常使用的辦公室軟體,都需要使用到 X Window 圖形的功能呢!此外,以鳥哥的例子來說,俺之前接觸到的數值分析模式,需要利用圖形處理軟體來將資料讀取出來, 所以在那部 Linux 主機上面,我一定需要 X Window 的。 回歸到主題上面,除了主機的用途決定你是否需要啟用 X Window 之外, 主機的『配備』也是你必須要考慮的一項決定性因素。因為 X Window 如果要美觀,可能需要功能較為強大的 KDE 或 GNOME 等視窗管理員的協助,但是這兩個龐然大物對於系統的要求又很高,除了 CPU 等級要夠,RAM 要足之外,顯示卡的等級也不能太差∼所以,早期的主機可能對於 X Window 就沒有辦法具有很好的執行效率了。 也就是說,你如果想要玩 X Window 的話,特別需要考慮到這兩點:
就鳥哥的使用經驗來看, GNOME 速度稍微快一點, KDE 的介面感覺比較具有親和力!不過,總體而言, 這個 X Window System 的速度其實並不是那麼棒!如果你有其他圖形介面的需求時,可以使用 yum 去安裝一下 XFCE 這一套,XFCE 是比較輕量級的視窗管理員,據說使用上速度比 GNOME 還快些。 最近很火紅的 Ubuntu 的分支之一 Xubuntu 據說就是使用這套視窗管理員喔!試看看吧! ^_^ X Server 設定檔解析與設定 從前面的說明來看,我們知道一個 X 視窗系統能不能成功啟動,其實與 X Server 有很大的關係的。因為 X Server 負責的是整個畫面的描繪,所以沒有成功啟動 X Server 的話,即使有啟動 X Client 也無法將圖樣顯示出來啊。所以,底下我們就針對 X Server 的設定檔來做個簡單的說明,好讓大家可以成功的啟動 X Window System 啊。 基本上, X Server 管理的是顯示卡、螢幕解析度、滑鼠按鍵對應等等,尤其是顯示卡晶片的認識,真是重要啊。 此外,還有顯示的字體也是 X Server 管理的一環。基本上,X server 的設定檔都是預設放置在 /etc/X11 目錄下,而相關的顯示模組或上面提到的總總模組,則主要放置在 /usr/lib/xorg/modules 底下。比較重要的是字型檔與晶片組,她們主要放置在:
在 CentOS 底下,我們可以透過 chkfontpath 這個指令來取得目前系統有的字型檔案目錄。
這些都要透過一個統一的設定檔來規範,那就是 X server 的設定檔啦。這個設定檔的檔名就是 /etc/X11/xorg.conf 喔! 解析 xorg.conf 設定 如同前幾個小節談到的,在 Xorg 基金會裡面的 X11 版本為 X11R7.xx ,那如果你想要知道到底你用的 X Server 版本是第幾版,可以使用 X 指令來檢查喔!(你必須以 root 的身分執行下列指令)
由上面的幾個關鍵字我們可以知道,目前鳥哥的這部測試機使用的 X server 是 Xorg 計畫所提供的 X11R7 版, 若有問題則可以到 http://wiki.x.org 去查詢∼因為是 Xorg 這個 X server ,因此我們的設定檔檔名為 /etc/X11/xorg.conf 這一個哩。所以,理解這個檔案的內容對於 X server 的功能來說,是很重要的。 注意一下,在修改這個檔案之前,務必將這個檔案給她備份下來,免的改錯了甚麼東西導致連 X server 都無法啟動的問題啊。這個檔案的內容是分成數個段落的,每個段落以 Section 開始,以 EndSection 結束, 裡面含有該 Section (段落) 的相關設定值,例如:
至於常見的 section name 主要有:
好了,直接來看看這個檔案的內容吧!這個檔案預設的情況是取消很多設定值的,所以你的設定檔可能不會看到這麼多的設定項目。 不要緊的,後續的章節會交代如何設定這些項目的喔!
上面設定完畢之後,就等於將整個 X Server 設定妥當了,很簡單吧。 如果你想要更新其他的例如顯示晶片的模組的話,就得要去硬體開發商的網站下載原始檔來編譯才行。 設定完畢之後,你就可以啟動 X Server 試看看囉。基本上,如果你的 Files 那個項目用的是直接寫入字型的路徑, 那就不需要啟動 XFS (X Font Server),如果是使用 font server 時,就要先啟動 xfs :
當然,你也可以利用 init 5 這個指令直接切換到圖形介面的登入來試看看囉。
X Font Server (XFS) 與加入額外中文字形 與 X 有關的設定檔主要是 /etc/X11/xorg.conf 這個主設定檔,但是剛剛上頭解析這個檔案時,在 Files 的部分我們還提到了 X Font Server (XFS) 這個服務喔!這個是啥咚咚?這個服務的目的在提供 X server 字型庫啦! 也就是說, X server 所使用的字型其實是 XFS 這個服務所提供的,因此沒有啟動 XFS 服務時,你的 X server 是無法順利啟動的喔!所以,我們當然就來瞧瞧這玩意兒的功能囉! 這個 XFS 的主設定檔在 /etc/X11/fs/config ,而字型檔則在 /usr/share/X11/fonts/ ,這裡再次給他強調一下。 至於啟動的腳本則在 /etc/init.d/xfs 囉!好,那我們就先來瞧瞧主設定檔的內容是怎樣的設定吧!
上面這個檔案的設定重點在 catalogue 那個設定項目當中。你可以使用 chkfontpath 這個指令來列出目前支援的字型檔案,也可以直接修改呢! 另外,雖然目前的 CentOS 已經是支援多國語系了,因此你可以直接在安裝完畢後就看到中文, 不過預設的中文字形可能讓你不太滿意∼此時,你可以選擇額外的中文字形顯示喔。比較有名的中文字形除了預設提供的文鼎字型外, 還有一種台北字型 (taipeifonts),不過這種字形是 Big5 編碼的,因此預設並沒有在你的字型支援之中 (因為目前大多使用萬國碼來顯示中文了)。如果你想要測試一下這種字形,除了自行下載字型檔之外, 我們可以使用 CentOS 提供的軟體來處理喔!看看底下的作法吧:
這個時候的 X server 已經有新支援的中文字形了,很簡單吧!不過如果你想要讓 X client
可以使用額外的字型的話,還得要使用 fontconfig 的軟體提供的 fc-cache
來建立字型快取檔才行 (註4)!
如果想要使用額外的字型的話,你可以自行取得某些字型來處理的。鳥哥這邊從 Windows 取得三個檔案來作為測試,這邊得註明一下是純粹的測試,測試完畢後檔案就給她拿掉了, 並沒有持續使用喔!並沒有想要違法的意思啦∼大家參考看看就好了。這三個檔案分別是 kaiu.ttf mingliu.ttc times.ttf,代表的是中楷體、明體、times and Romans 三種字體。 那就來看看如何增加字型吧!(假設上述的三個字體檔是放置在 /root 中)
透過 fc-cache 以及 fc-list 去確認過字型確實存在後,就能夠使用視窗管理員的功能去檢查字型檔了。 以 GNOME 為例,在『系統』-->『偏好設定』-->『字型』點選後,就會出現可以調整的字型, 接下來你就會發現多出了『標楷體、細明體、新細明體』等字體可以選擇囉!試看看吧!鳥哥調整成為『Times and Roman』 出現如下圖的結果呢!參考看看: 圖 2.2.1、中文字形的調整結果 設定檔重建與顯示器參數微調 如果你修改 xorg.conf 結果改錯了,導致無法順利的啟動 X server 時,偏偏又忘記製作備份檔!該如何是好? 沒關係,我們的 Xorg 有提供不錯的工具可以處理。同時 CentOS 也有提供相關的設定指令, 那就是在第二十一章提到的 setup 這個指令啦! 詳細的設定請自行前往參考,在這裡我們要介紹的是使用 Xorg 重新製作出設定檔啦!你可以使用 root 的身份這樣執行:
此時 X 會主動的以內建的模組進行系統硬體的探索,並將硬體與字型的偵測結果寫入 /root/xorg.conf.new 這個檔案裡面去,這就是 xorg.conf 的重製結果。不過,這個新建的檔案不見得真的能夠啟動 X server , 所以我們必須要使用底下的指令來測試一下這個新的設定檔是否能夠順利的運作:
因為鳥哥不知道你到底是在 runlevel 幾號,因此上述的測試通通是在 tty8 的終端機上面顯示 (display 1),
這樣就能夠避免切換到不同的 runlevel 囉∼如果一切順利的話,你就可以將 /root/xorg.conf.new 複製成為
/etc/X11/xorg.conf 覆蓋掉修改錯誤的檔案,然後重新啟動 X ,嘿嘿!應該就能夠順利的救回來你的 X Window System
囉!
有些朋友偶而會這樣問:『我的顯示器明明還不錯,但是螢幕解析度卻永遠只能達到 800x600 而已, 這該如何處理?』,螢幕的解析度應該與顯示卡相關性不高,而是與顯示器的更新頻率有關! 所謂的更新頻率,指的是在一段時間內螢幕重新繪製畫面的速度。舉例來說, 60Hz 的更新頻率, 指的是每秒鐘畫面更新 60 次的意思。那麼關於顯示器的更新頻率該如何調整呢? 你得先去找到你的顯示器的使用說明書 (或者是網站會有規格介紹),取得最高的更新率後,接下來選擇你想要的解析度, 然後透過這個 gtf 的指令功能來調整:
然後重新啟動你的 X ,這樣就能夠選擇新的解析度囉!那如何重新啟動 X 呢?兩個方法, 一個是『 init 3 ; init 5 』從文字模式與圖形模式的執行等級去切換,另一個比較簡單, 如果原本就是 runlevel 5 的話,那麼在 X 的畫面中按下『 [alt] + [crtl] + [backspace] 』三個組合按鍵, 就能夠重新啟動 X 視窗囉! 顯示卡驅動程式安裝範例 雖然你的 X 視窗系統已經順利的啟動了,也調整到你想要的解析度了,不過在某些場合底下,你想要使用顯示卡提供的 3D 加速功能時,卻發現 X 提供的預設的驅動程式並不支援!此時真是欲哭無淚啊∼那該如何是好?沒關係,安裝官方網站提供的驅動程式即可! 目前 (2009) 世界上針對 x86 提供顯示卡的廠商最大的應該是 Nvidia / AMD (ATI) / Intel 這三家 (沒有照市佔率排列), 所以底下鳥哥就針對這三家的顯示卡驅動程式安裝,作個簡單的介紹吧! 由於硬體驅動程式與核心有關,因此你想要安裝這個驅動程式之前,請務必先參考第二十二章與第二十三章的介紹,才能夠順利的編譯出顯示卡驅動程式喔!
建議可以直接使用 yum 去安裝『 Development Tools 』這個軟體群組以及 kernel-devel
這個軟體即可。 NVidia 雖然 Xorg 已經針對 NVidia 公司的顯示卡驅動程式提供了 nv 這個模組,不過這個模組無法提供很多額外的功能。
因此,如果你想要使用新的顯示卡功能時,就得要額外安裝 NVidia 提供的給 Linux 的驅動程式才行。
你可以這樣作的:
建議你可以到 NVidia 的官網 (http://www.nvidia.com.tw) 自行去下載最新的驅動程式,你也可以到底下的連結直接查閱給 Linux 用的驅動程式: 請自行選擇與你的系統相關的環境。鳥哥選擇自己的測試機是 Intel Core2 架構,因此選擇 Linux AMD64/EM64T
的驅動程式版本,這個版本的驅動程式檔名為: NVIDIA-Linux-x86_64-xxx.yy.zz-pkg2.run ,其中的 xxx.yy.z
就是驅動程式的版本號碼。我將這個檔案放置到 /root家目錄中。
安裝過程有點像這樣 (檔名依照你的環境去下載與執行):
圖 3.1.1、NVidia 驅動程式安裝示意 上面說的是授權,你必須要接受 (Accept) 才能繼續。 圖 3.1.2、NVidia 驅動程式安裝示意 我們不預期 NVidia 會幫我們編譯好核心模組,因此這裡選擇 No ,讓我們自己編譯模組吧! 圖 3.1.3、NVidia 驅動程式安裝示意 直接按下 OK 來繼續下一步即可。 圖 3.1.4、NVidia 驅動程式安裝示意 開始進行核心模組的編譯!這個過程不會太久∼ 圖 3.1.5、NVidia 驅動程式安裝示意 是否要安裝額外的 OpenGL 函式庫?要啊!就選擇 Yes 吧! 圖 3.1.6、NVidia 驅動程式安裝示意 這個時候開始安裝顯示卡的驅動程式,會花費一段時間喔!然後出現下圖: 圖 3.1.7、NVidia 驅動程式安裝示意 讓這支安裝程式主動的去修改 xorg.conf 吧!比較輕鬆愉快!就按下 Yes 即可。 圖 3.1.8、NVidia 驅動程式安裝示意 最後按下 OK 就結束安裝囉!這個時候如果你去查閱一下 /etc/X11/xorg.conf 的內容,會發現 Device 的 Driver 設定會成為 nvidia 而不是原本的 nv 喔!這樣就搞定囉!很簡單吧! 而且這個時候你的 /usr/lib64/xorg/modules/drivers 目錄內,會多出一個 nvidia_drv.so 的驅動程式檔案囉! 同時這個軟體還提供了一支很有用的程式來幫助我們進行驅動程式升級喔!
好囉,那你就趕緊試看看新的顯示卡晶片的功能吧。而如果有什麼疑問的話,查閱一下 /var/log/nvidia 開頭的登錄檔看看吧! ^_^ ATI (AMD) ATI 已經被 AMD 收購了,而 AMD 在近期已經宣布了 ATI 的顯示卡驅動程式要開放成為 Open source , 這代表未來你可以很輕鬆的就取得 ATI 的顯示卡驅動程式而不必要重新安裝的。不過,就如同前面提到的, 若你需要某些特殊功能,建議還是手動安裝一下官方提供的驅動程式吧!你必須要到 AMD 的網站去下載 ATI 顯示卡驅動程式哩! 你可以到 http://www.amdtaiwan.com.tw/ 選擇『ATI 驅動程式』的連結去選擇你的顯示卡驅動程式版本,也可以點選底下的連結: 然後去選擇你的作業系統與顯示卡的型號來下載。鳥哥使用另一部含有 ATI 顯示卡的主機來安裝驅動程式, 該主機使用的是 Randon HD 3200 的顯示卡晶片,最後下載的檔案是: ati-driver-installer-9-6-x86.x86_64.run。 要安裝這個驅動程式的方法與 NVidia 的方式很像的,同樣的直接執行該檔案即可:
圖 3.2.1、ATI 顯示卡驅動程式安裝示意 選擇安裝吧! 圖 3.2.2、ATI 顯示卡驅動程式安裝示意 這裡的目的是讓我們確定一下,是否真的是安裝在 x86_64 的硬體上面而已!按下 OK 去! 圖 3.2.3、ATI 顯示卡驅動程式安裝示意 看完授權之後,直接給他 Exit 離開授權說明,然後會出現接受與否的字樣: 圖 3.2.4、ATI 顯示卡驅動程式安裝示意 要安裝啊!所以當然就是 Yes 下去喔! 圖 3.2.5、ATI 顯示卡驅動程式安裝示意 最後選擇預設安裝即可!不需要使用專家安裝啦!這樣就安裝完畢了!也是非常快速吧!最後就會在 /usr/lib64/xorg/modules/drivers/ 裡面出現 fglrx_drv.so 這個新的驅動程式啦! 與 Nvidia 相同的, ATI 也提供一支名為 aticonfig 的指令來幫忙設定 xorg.conf ,你可以直接輸入『 aticonfig -v 』來看看處理的方式即可。然後你就可以重新啟動 X 來看看新的驅動程式功能囉!非常簡單吧! Intel 老實說,由於 Intel 針對 Linux 的圖形介面驅動程式已經開放成為 Open source 了,所以理論上你不需要重新安裝 Intel 的顯示卡驅動程式的。除非你想要使用比預設的更新的驅動程式,那麼才需要重新安裝底下的驅動程式。 Intel 對 Linux 的顯示卡驅動程式已經有獨立的網站在運作,如下的連結就是安裝的說明網頁: 其實 Intel 的顯示卡用的地方非常的多喔!因為只要是整合型主機板晶片組,用的是 Intel 的晶片時, 通常都整合了 Intel 的顯示卡囉∼鳥哥使用的一組 cluster 用的就是 Intel 的晶片,所以囉∼ 這傢伙也是用的到的啦! 一般來說, Intel 的顯示卡都常常會使用 i810 等驅動程式,而不是這個較新的 intel 驅動程式! 你可以察看一下你系統是否有存在這些檔案:
呼呼!我們的 CentOS 有提供新的 Intel 顯示卡驅動程式啦!所以不需要重新安裝說∼ 只是可能需要修改 xorg.conf 這個設定檔的內容。基本上,要修改的地方有:
如果一切順利的話,接下來就是重新啟動 X 囉∼使用新的 Intel 驅動程式吧!加油囉! 重點回顧
本章習題 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
參考資料與延伸閱讀
2003/02/12:第一次完成 2005/06/29:將舊的文章移動到 這裡 。如果你需要舊版的 xf86config 與相關的工具,則請前往該舊文章查閱! 2005/07/11:經歷了許多的時間,將主機的設定檔重複改了改,終於完成一些簡單的 X 測試! 2006/11/07:經由網友x1215 這一篇的介紹,得知該網站,趕緊去處理! 2009/07/03:將舊版基於 FC4 的版本移動到此處 2009/07/15:奮戰好幾天,將驅動程式安裝加上,同時加入字型管理功能。 2009/07/28:網友 LazyBug Chan 兄熱情回報,使用 XFCE 的 Ubuntu 是 Xubuntu 這個分支!感謝回報! 2009/08/07:加入 Window Manger 的全名與連結 |
|||||||||||||||||||||||||||||||||||||||||||||