鸟哥的Linux私房菜(基础篇)- 第二十四章、 X Window 配置介绍
最近升級日期:2009/08/07
| 在 Linux 上頭的圖形介面我們稱之為 X Window System,簡稱為 X 或 X11 羅!為何稱之為系統呢?這是因為 X 窗口系統又分為 X server 與 X client ,既然是 Server/Client (主從架構)這就表示其實 X 窗口系統是可以跨網絡且跨平臺的!X 窗口系統對於 Linux 來說僅是一個軟件,只是這個軟件日趨重要喔!因為 Linux 是否能夠在桌上型計算機上面流行,與這個 X 窗口系統有關啦!好在,目前的 X 窗口系統整合到 Linux 已經非常優秀了,而且也能夠具有 3D 加速的功能,只是,我們還是得要了解一下 X 窗口系統才好,這樣如果出問題,我們才有辦法處理啊! |
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 啦!
從上面的說明,我們可以知道的是:
- 在 Unix Like 上面的圖形使用者介面 (GUI) 被稱為 X 或 X11;
- X11 是一個『軟件』而不是一個操作系統;
- X11 是利用網絡架構來進行圖形介面的運行與繪制;
- 較著名的 X 版本為 X11R6 這一版,目前大部分的 X 都是這一版演化出來的 (包括 X11R7);
- 現在大部分的 distribution 使用的 X 都是由 Xorg 基金會所提供的 X11 軟件;
- X11 使用的是 MIT 授權,為類似 GPL 的自由軟件授權方式。
主要組件: 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 Server:硬件管理、螢幕繪制與提供字型功能:
既然 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 Client:負責 X Server 要求的『事件』之處理:
前面提到的 X Server 主要是管理顯示介面與在螢幕上繪圖,同時將輸入裝置的行為告知 X Client,此時 X Client 就會依據這個輸入裝置的行為來開始處理,最后 X Client 會得到『嗯!這個輸入裝置的行為會產生某個圖示』,然后將這個圖示的顯示數據回傳給 X Server ,X server 再根據 X Client 傳來的繪圖數據將他描圖在自己的螢幕上,來得到顯示的結果。
也就是說, X Client 最重要的工作就是處理來自 X Server 的動作,將該動作處理成為繪圖數據,再將這些繪圖數據傳回給 X Server 羅!由於 X Client 的目的在產生繪圖的數據,因此我們也稱呼 X Client 為 XApplication (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 Window Manager:特殊的 X Client ,負責管理所有的 X client軟件
剛剛前面提到,X Client 的主要工作是將來自 X Server 的數據處理成為繪圖數據,再回傳給 X server 而已,所以 X client 本身是不知道他在 X Server 當中的位置、大小以及其他相關資訊的。這也是上面我們談到的,X client 彼此不知道對方在螢幕的哪個位置啊!為了克服這個問題,因此就有 Window Manager (WM, 窗口管理員) 的產生了。窗口管理員也是 X client ,只是他主要在負責全部 X client 的控管,還包括提供某些特殊的功能,例如:
- 提供許多的控制元素,包括工作列、背景壁紙的配置等等;
- 管理虛擬壁紙 (virtual desktop);
- 提供窗口控制參數,這包括窗口的大小、窗口的重疊顯示、窗口的移動、窗口的最小化等等。
我們常常聽到的 KDE, GNOME, XFCE 還有簡易到爆的 twm 等等,都是一些窗口管理員的專案計畫啦!這些專案計畫中,每種窗口管理員所用以開發的顯示引擎都不太相同,所著重的方向也不一樣,因此我們才會說,在 Linux 底下,每套 Window Manager 都是獨特存在的,不是換了壁紙與顯示效果而已,而是連顯示的引擎都不會一樣喔!底下是這些常見的窗口管理員全名與連結:
- GNOME (GNU Network Object Model Environment):http://www.gnome.org/
- KDE (K Desktop Enviroment):http://kde.org/
- twm (Tab Window Manager):http://xwinman.org/vtwm.php
- XFCE (XForms Common Environment):http://www.xfce.org/
由於 Linux 越來越朝向 Desktop 桌上型計算機使用方向走,因此窗口管理員的角色會越來越重要!目前我們 CentOS 默認提供的有 GNOME 與 KDE ,這兩個窗口管理員上面還有提供非常多的 X client 軟件,包括辦公室生產力軟件 (Open Office) 以及常用的網絡功能 (firefox 瀏覽器、 Thunderbird 收發信件軟件) 等?,F在使用者想要接觸 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 主機上頭的啦!
- Display Manager:提供登陸需求
談完了上述的數據后,我們得要了解一下,那么我如何取得 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 的流程吧! ^_^
- 在文字介面啟動 X :透過 startx 命令
我們都知道 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 可以直接啟動,也能夠外接參數,例如底下格式的啟動方式:
| [root@www ~]# startx [X client 參數] -- [X server 參數]# 范例:以色彩深度為 16 bit 啟動 X [root@www ~]# startx -- -depth 16 |
startx 后面接的參數以兩個減號『--』隔開,前面的是 X Client 的配置,后面的是 X Server 的配置。上面的范例是讓 X server 以色彩深度 16 bit 色 (亦即每一像素占用 16 bit ,也就是 65536 色) 顯示,因為色彩深度是與 X Server 有關的,所以參數當然是寫在 -- 后面羅,於是就成了上面的模樣!
你會發現,鳥哥上面談到的 startx 都是提到如何找出 X server / X client 的配置值而已!沒錯,事實上啟動 X 的是 xinit 這支程序, startx 僅是在幫忙找出配置值而已!那么 startx找到的配置值可用順序為何呢?基本上是這樣的:
- X server 的參數方面:
- 使用 startx 后面接的參數;
- 若無參數,則找尋使用者家目錄的文件,亦即 ~/.xserverrc
- 若無上述兩者,則以 /etc/X11/xinit/xserverrc
- 若無上述三者,則單純運行 /usr/bin/X (此即 X server 運行檔)
- X client 的參數方面:
- 使用 startx 后面接的參數;
- 若無參數,則找尋使用者家目錄的文件,亦即 ~/.xinitrc
- 若無上述兩者,則以 /etc/X11/xinit/xinitrc
- 若無上述三者,則單純運行 xterm (此為 X 底下的終端機軟件)
根據上述的流程找到啟動 X 時所需要的 X server / X client 的參數,接下來 startx 會去呼叫 xinit這支程序來啟動我們所需要的 X 窗口系統整體喔!接下來當然就是要談談 xinit 羅~
- 由 startx 呼叫運行的 xinit
事實上,當 startx 找到需要的配置值后,就呼叫 xinit 實際啟動 X 的。他的語法是:
| [root@www ~]# xinit [client option] -- [server or display option] |
那個 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)
| xinit xterm -geometry +1+1 -n login -display :0 -- X :0 |
在 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 server 的文件: 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 上面啦!
- 啟動 X Client 的文件: xinitrc
假設你的家目錄并沒有 ~/.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 這個窗口管理員來管理你的環境羅。
| Tips: 不論怎么說,鳥哥還是希望大家可以透過解析 startx 這個 script 的內容去找到每個文件,再根據分析每個文件來找到您 distributions 上面的 X 相關文件~畢竟每個版本的 Linux 還是有所差異的~ |
另外,如果有特殊需求,你當然可以自訂 X client 的參數!這就得要修改你家目錄下的 ~/.xinitrc 這個文件羅。不過要注意的是,如果你的 .xinitrc 配置檔里面有啟動的 x client 很多的時候,千萬注意將除了最后一個 window manager 或 X Client 之外,都放到背景里面去運行啊!舉例來說,像底下這樣:
| xclock -geometry 100x100-5+5 &xterm -geometry 80x50-50+150 &exec /usr/bin/twm |
意思就是說,我啟動了 X ,并且同時啟動 xclock / xterm / twm 這三個 X clients 喔!如此一來,你的 X 就有這三個咚咚可以使用了!如果忘記加上 & 的符號,那就.....會讓系統等待啊,而無法一次就登陸 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 窗口系統 | 顯示介面號碼 | 默認終端機 | 網絡監聽端口 |
| 第一個 X | hostname:0 | tty7 | port 6000 |
| 第二個 X | hostname:1 | tty8 | port 6001 |
在 X Window System 的環境下,我們稱 port 6000 為第 0 個顯示介面,亦即為 hostname:0 ,那個主機名稱通??梢圆粚?#xff0c;所以就成了 :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. 先來啟動第一個 X 在 :1 畫面中: [root@www ~]# X :1 & |
圖 1.4.1 、 單純啟動 X server的情況
上述的 X 是大寫,那個 :1 是寫在一起的,至於 & 則是放到背景去運行。此時系統會主動的跳到第二個圖形介面終端機,亦即 tty8 上喔!所以如果一切順利的話,你應該可以看到一個 X 的鼠標光標可以讓你移動了(如上圖所示)。該畫面就是 X Server 啟動的畫面羅!丑丑的,而且沒有什么 client 可以用啊!接下來,請按下 [ctrl]+[alt]+[F1] 回到剛剛下達命令的終端機:
| 2. 輸入數個可以在 X 當中運行的虛擬終端機 [root@www ~]# xterm -display :1 & [root@www ~]# xterm -display :1 & |
圖 1.4.2 、 在 X 上面啟動 xterm 終端機顯示的結果
那個 xterm 是必須要在 X 底下才能夠運行的終端機介面。加入的參數 -display 則是指出這個 xterm 要在那個 display 使用的。這兩個命令請不要一次下完!先運行一次,然后按下 [ctrl]+[alt]+[F8] 去到 X 畫面中,你會發現多了一個終端機羅~不過,可惜的是,你無法看到終端機的標題、也無法移動終端機,當然也無法調整終端機的大小啊!我們回到剛剛的 tty1 然后再次下達 xterm 命令,理論上應該多一個終端機,去到 tty8 查閱一下。唉~沒有多出一個終端機啊?這是因為兩個終端機重疊了~我們又無法移動終端機,所以只看到一個。接下來,請再次回到 tty1 去下達命令吧!
| 3. 在輸入不同的 X client 觀察觀察,分別去到 tty8 觀察喔! [root@www ~]# xclock -display :1 & [root@www ~]# xeyes -display :1 & |
圖 1.4.3 、 分別啟動 xclock 時鐘與 xeyes 眼睛的結果
跟前面一樣的,我們又多運行了兩個 X client ,其中 xclock 會顯示時鐘,而 xeyes 則是會出現一雙大眼睛來盯著光標!你可以移動一下光標就可以發現眼睛的焦聚會跑啊 ^_^!不過,目前的四個 X client 通通不能夠移動與放大縮小!如此一來,你怎么在 xterm 底下下達命令啊?當然就很困擾~所以讓我們來加載最陽春的窗口管理員吧!
| 4. 輸入可以管理的 window manager [root@www ~]# twm -display :1 & |
圖 1.4.4 、 窗口管理員 twm 的功能顯示
回到 tty1 后,用最簡單的 twm 這個窗口管理員來管理我們的 X 吧!輸入之后,去到 tty8看看,用鼠標移動一下終端機看看?可以移動了吧?也可以縮小放大窗口羅~同時也出現了標題提示羅~也看到兩個終端機啦!現在終於知道窗口管理員的重要性了吧? ^_^!在黑螢幕地方按下鼠標右鍵,就會出現類似上面畫面最右邊的菜單,你就可以進行額外的管理羅~玩玩看先!
| 5. 將所有剛剛創建的 X 相關工作全部殺掉! [root@www ~]# kill %6 [root@www ~]# kill %5 [root@www ~]# kill %4 [root@www ~]# kill %3 [root@www ~]# kill %2 [root@www ~]# kill %1 |
很有趣的一個小實驗吧~透過這個實驗,你應該會對 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 的話,特別需要考慮到這兩點:
- 穩定性:
X Window 僅是 Linux 上面的一個軟件,雖然目前的 X window 已經整合得相當好了,但任何程序的設計都或多或少會有些臭蟲,X 當然也不例外。此外,在你的 Linux 服務器上面激活 X 系統的話,自然多一組程序的激活(X Window 會啟動多個程序來運行各項任務) ,系統的不確定性當然可能會添加一些。因此,鳥哥不是很建議對 Internet 開放的服務器啟動 X Window 的啦!
- 效能:
無論怎么說,程序在跑總是需要系統資源的,所以,多激活了 X 就會造成一些系統資源的損耗。此外,上面也稍稍提到,某些 X 的軟件是相當耗費系統資源的呢!所以,啟動 X 可能會讓你的可用系統資源 (尤其是內存) 降低很多,可能會造成系統效能較低落的問題。
| Tips: 鳥哥剛開始接觸 Linux (大約是在 1999 年左右)時,由於不熟,通常都是默認給他激活 X Window 在我的主機上面的。不過,那個時候的圖形介面與 Linux kernel 的整合度比較差,老是掛點去,是常常造成主機上面的網絡服務無法順暢的原因之一呢! |
就鳥哥的使用經驗來看, 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底下。比較重要的是字型檔與芯片組,她們主要放置在:
- 提供的螢幕字型: /usr/share/X11/fonts/
- 顯卡的芯片組: /usr/lib/xorg/modules/drivers/
在 CentOS 底下,我們可以透過 chkfontpath 這個命令來取得目前系統有的字型文件目錄。這些都要透過一個統一的配置檔來規范,那就是 X server 的配置檔啦。這個配置檔的檔名就是 /etc/X11/xorg.conf 喔!
解析 xorg.conf 配置
如同前幾個小節談到的,在 Xorg 基金會里面的 X11 版本為 X11R7.xx ,那如果你想要知道到底你用的 XServer 版本是第幾版,可以使用 X 命令來檢查喔!(你必須以 root 的身分運行下列命令)
| [root@www ~]# X -version X Window System Version 7.1.1 Release Date: 12 May 2006 X Protocol Version 11, Revision 0, Release 7.1.1 Build Operating System: Linux 2.6.18-53.1.14.el5PAE i686 Red Hat, Inc. Current Operating System: Linux localhost.localdomain 2.6.18-128.1.14.el5 #1 SMP Wed Jun 17 06:40:54 EDT 2009 i686 Build Date: 21 January 2009 Build ID: xorg-x11-server 1.1.1-48.52.el5Before reporting problems, check http://wiki.x.orgto make sure that you have the latest version. Module Loader present |
由上面的幾個關鍵字我們可以知道,目前鳥哥的這部測試機使用的 X server 是 Xorg 計畫所提供的 X11R7 版,若有問題則可以到 http://wiki.x.org 去查詢~因為是 Xorg 這個 X server ,因此我們的配置檔檔名為 /etc/X11/xorg.conf這一個哩。所以,理解這個文件的內容對於 X server 的功能來說,是很重要的。
注意一下,在修改這個文件之前,務必將這個文件給她備份下來,免的改錯了甚么東西導致連 X server 都無法啟動的問題啊。這個文件的內容是分成數個段落的,每個段落以 Section 開始,以 EndSection 結束,里面含有該 Section (段落) 的相關配置值,例如:
| Section "section name" …… <== 與這個 section name 有關的配置項目 …… EndSection |
至於常見的 section name 主要有:
好了,直接來看看這個文件的內容吧!這個文件默認的情況是取消很多配置值的,所以你的配置檔可能不會看到這么多的配置項目。不要緊的,后續的章節會交代如何配置這些項目的喔!
| [root@www ~]# cd /etc/X11 [root@www X11]# cp -a xorg.conf xorg.conf.20090713 <== 有備份有保佑 [root@www X11]# vim xorg.conf Section "Module"Load "dbe"Load "extmod"Load "record"Load "dri"Load "xtrap"Load "glx"Load "vnc" EndSection # 上面這些模塊是 X Server 啟動時,希望能夠額外獲得的相關支持的模塊。 # 關於更多模塊可以搜尋一下 /usr/lib/xorg/modules/extensions/ 這個目錄Section "InputDevice"Identifier "Keyboard0"Driver "kbd"Option "XkbModel" "pc105"Option "XkbLayout" "us" <==注意,是 us 美式鍵盤對應 EndSection # 這個玩意兒是鍵盤的對應配置數據,重點在於 XkbLayout 那一項, # 如果沒有問題的話,我們臺灣地區應該都是使用美式鍵盤對應按鈕的。 # 特別注意到 Identifier (定義) 那一項,那個是在說明,我這個鍵盤的配置檔, # 被定義為名稱是 Keyboard0 的意思,這個名稱最后會被用於 ServerLayout 中Section "InputDevice"Identifier "Mouse0"Driver "mouse"Option "Protocol" "auto"Option "Device" "/dev/input/mice"Option "ZAxisMapping" "4 5 6 7" <==滾輪支持 EndSection # 這個則主要在配置鼠標功能,重點在那個 Protocol 項目, # 那個是可以指定鼠標介面的配置值,我這里使用的是自動偵測!不論是 U盤/PS2。Section "Files"RgbPath "/usr/share/X11/rgb"ModulePath "/usr/lib/xorg/modules"FontPath "unix/:7100" <==使用另外的服務來提供字型定義FontPath "built-ins" EndSection # 我們的 X Server 很重要的一點就是必須要提供字型,這個 Files # 的項目就是在配置字型,當然啦,你的主機必須要有字型檔才行。一般字型文件在: # /usr/share/X11/fonts/ 目錄中。至於那個 Rgb 是與色彩有關的項目。 # 相關的字型說明我們會在下一小節的 xfs 在跟大家報告。Section "Monitor"Identifier "Monitor0"VendorName "Monitor Vendor"ModelName "Monitor Model"HorizSync 30.0 - 80.0VertRefresh 50.0 - 100.0 EndSection # 螢幕監視器的配置僅有一個地方要注意,那就是垂直與水平的升級頻率。 # 在上面的 HorizSync 與 VerRefresh 的配置上,要注意,不要配置太高, # 這個玩意兒與實際的監視器功能有關,請查詢你的監視器手冊說明來配置吧! # 傳統 CRT 螢幕配置太高的話,據說會讓 monitor 燒毀呢,要很注意啊。Section "Device" <==顯卡的驅動程序項目Identifier "Card0"Driver "vesa" <==實際的驅動程序喔!VendorName "Unknown Vendor"BoardName "Unknown Board"BusID "PCI:0:2:0" EndSection # 這地方重要了,這就是顯卡的芯片模塊加載的配置區域。由於鳥哥使用 Virtualbox # 模擬器模擬這個測試機,因此這個地方顯示的驅動程序為通用的 vesa 模塊。 # 更多的顯示芯片模塊可以參考 /usr/lib/xorg/modules/drivers/Section "Screen" <==與顯示的畫面有關,解析度與色彩深度Identifier "Screen0"Device "Card0" <==使用哪個顯卡來提供顯示Monitor "Monitor0" <==使用哪個監視器SubSection "Display" <==此階段的附屬配置項目Viewport 0 0Depth 16 <==就是色彩深度Modes "1024x768" "800x600" "640x480" <==解析度EndSubSectionSubSection "Display"Viewport 0 0Depth 24Modes "1024x768" "800x600"EndSubSection EndSection # Monitor 與實際的顯示器有關,而 Screen 則是與顯示的畫面解析度、色彩深度有關。 # 我們可以配置多個解析度,實際應用時可以讓使用者自行選擇想要的解析度來呈現。 # 不過,為了避免困擾,鳥哥通常只指定一到兩個解析度而已。Section "ServerLayout" <==實際選用的配置值Identifier "X.org Configured"Screen 0 "Screen0" 0 0 <==解析度等InputDevice "Mouse0" "CorePointer" <==鼠標InputDevice "Keyboard0" "CoreKeyboard" <==鍵盤 EndSection # 我們上面配置了這么多的項目之后,最后整個 X Server 要用的項目, # 就通通一骨腦的給他寫入這里就是了,包括鍵盤、鼠標以及顯示介面啊。 # 其中 screen 的部分還牽涉到顯卡、監視器螢幕等配置值呢! |
上面配置完畢之后,就等於將整個 X Server 配置妥當了,很簡單吧。如果你想要升級其他的例如顯示芯片的模塊的話,就得要去硬件開發商的網站下載原始檔來編譯才行。配置完畢之后,你就可以啟動 X Server 試看看羅?;旧?#xff0c;如果你的 Files 那個項目用的是直接寫入字型的路徑,那就不需要啟動 XFS (X Font Server),如果是使用 font server 時,就要先啟動 xfs :
| # 1. 啟動 xfs 服務: [root@www ~]# /etc/init.d/xfs start# 2. 測試 X server 的配置檔是否正常: [root@www ~]# startx <==直接在 runlevel 3 啟動 X 看看 [root@www ~]# X :1 <==在 tty8 單獨啟動 X server 看看 |
當然,你也可以利用 init 5 這個命令直接切換到圖形介面的登陸來試看看羅。
| Tips: 經由討論局域網友的說明,如果你發現明明有捉到顯卡驅動程序卻老是無法順利啟動 X 的話,可以嘗試去官網取得驅動程序來安裝,也能夠將『Device』階段的『Driver』修改成默認的『Driver "vesa"』,使用該驅動程序來暫時啟動 X 內的顯卡喔! |
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 羅!好,那我們就先來瞧瞧主配置檔的內容是怎樣的配置吧!
| [root@www ~]# vi /etc/X11/fs/config client-limit = 10 <==最多允許幾個 X server 向我要求字型(因為跨網絡) clone-self = on <==與效能有關,若 xfs 達到限制值,啟動新的 xfs catalogue = /usr/share/X11/fonts/misc:unscaled,/usr/share/X11/fonts/75dpi:unscaled,/usr/share/X11/fonts/100dpi:unscaled,/usr/share/X11/fonts/Type1,/usr/share/X11/fonts/TTF,/usr/share/fonts/default/Type1, # 上面這些咚咚,就是字型文件的所在!如果你有新字型,可以放置在該目錄。default-point-size = 120 <==默認字型大小,單位為 1/10 點字 (point) default-resolutions = 75,75,100,100 <==這個則是顯示的字型像素 (pixel) deferglyphs = 16 <==延遲顯示的字型,此為 16 bits 字型 use-syslog = on <==啟動支持錯誤登錄 no-listen = tcp <==啟動 xfs 於 socket 而非 TCP |
上面這個文件的配置重點在 catalogue 那個配置項目當中。你可以使用 chkfontpath 這個命令來列出目前支持的字型文件,也可以直接修改呢!
另外,雖然目前的 CentOS 已經是支持多國語系了,因此你可以直接在安裝完畢后就看到中文,不過默認的中文字形可能讓你不太滿意~此時,你可以選擇額外的中文字形顯示喔。比較有名的中文字形除了默認提供的文鼎字型外,還有一種臺北字型 (taipeifonts),不過這種字形是 utf-8 編碼的,因此默認并沒有在你的字型支持之中 (因為目前大多使用萬國碼來顯示中文了)。如果你想要測試一下這種字形,除了自行下載字型檔之外,我們可以使用 CentOS 提供的軟件來處理喔!看看底下的作法吧:
| # 1. 先安裝中文字形軟件,亦即 fonts-chinese 這個軟件名 [root@www ~]# yum install fonts-chinese# 2. 查閱 taipei 字型的所在目錄位置: [root@www ~]# rpm -ql fonts-chinese | grep taipei /usr/share/fonts/chinese/misc/taipei16.pcf.gz <==重點在目錄! /usr/share/fonts/chinese/misc/taipei20.pcf.gz /usr/share/fonts/chinese/misc/taipei24.pcf.gz# 3. 創建字型檔的目錄架構 [root@www ~]# cd /usr/share/fonts/chinese/misc [root@www ~]# mkfontdir # 這個命令在建置 fonts.dir 這個文件,提供字型文件目錄的說明。# 4. 將上述的目錄加入 xfs 的支持之中: [root@www ~]# chkfontpath -a /usr/share/fonts/chinese/misc/ [root@www ~]# chkfontpath ....(前面省略).... /usr/share/fonts/chinese/misc:unscaled /usr/share/fonts/chinese/misc <==這兩行會被新增出來! [root@www ~]# /etc/init.d/xfs restart# 5. 在 X window 底下啟動終端機,測試一下有沒有捉到該字型? [root@www ~]# xlsofnts | grep taipei # 如果順利的話,你會看到有幾個 taipeiXX 的字樣在螢幕上出現! |
這個時候的 X server 已經有新支持的中文字形了,很簡單吧!不過如果你想要讓 X client 可以使用額外的字型的話,還得要使用 fontconfig 的軟件提供的 fc-cache 來創建字型緩存檔才行 (注4)!
- 讓窗口管理員可以使用額外的字型
如果想要使用額外的字型的話,你可以自行取得某些字型來處理的。鳥哥這邊從 Windows 取得三個文件來作為測試,這邊得注明一下是純粹的測試,測試完畢后文件就給她拿掉了,并沒有持續使用喔!并沒有想要違法的意思啦~大家參考看看就好了。這三個文件分別是kaiu.ttf mingliu.ttc times.ttf,代表的是中楷體、明體、times and Romans 三種字體。那就來看看如何添加字型吧!(假設上述的三個字體檔是放置在 /root 中)
| # 1. 將上述的三個文件放置到系統配置目錄,亦即底下的目錄中: [root@www ~]# cd /usr/share/fonts/ [root@www ~]# mkdir windows [root@www ~]# cp /root/*.tt[fc] /usr/share/fonts/windows# 2. 使用 fc-cache 將上述的文件加入字型的支持中: [root@www ~]# fc-cache -f -v ....(前面省略).... /usr/share/fonts/windows: caching, 4 fonts, 0 dirs ....(中間省略).... fc-cache: succeeded # -v 僅是列出目前的字型數據, -f 則是強制重新創建字型緩存!# 3. 透過 fc-list 列出已經被使用的文件看看: [root@www ~]# fc-list : file <==找出被緩存住的檔名 ....(前面省略).... /usr/share/fonts/windows/kaiu.ttf: /usr/share/fonts/windows/times.ttf: /usr/share/fonts/windows/mingliu.ttc: ....(后面省略).... |
透過 fc-cache 以及 fc-list 去確認過字型確實存在后,就能夠使用窗口管理員的功能去檢查字型檔了。以 GNOME 為例,在『系統』-->『偏好配置』-->『字型』點選后,就會出現可以調整的字型,接下來你就會發現多出了『標楷體、細明體、新細明體』等字體可以選擇羅!試看看吧!鳥哥調整成為『Times and Roman』出現如下圖的結果呢!參考看看:
圖 2.2.1、中文字形的調整結果
配置檔重建與顯示器參數微調
如果你修改 xorg.conf 結果改錯了,導致無法順利的啟動 X server 時,偏偏又忘記制作備份檔!該如何是好?沒關系,我們的 Xorg 有提供不錯的工具可以處理。同時 CentOS 也有提供相關的配置命令,那就是在第二十一章提到的 setup 這個命令啦!詳細的配置請自行前往參考,在這里我們要介紹的是使用 Xorg 重新制作出配置檔啦!你可以使用 root 的身份這樣運行:
| [root@www ~]# Xorg -configure :1 |
此時 X 會主動的以內建的模塊進行系統硬件的探索,并將硬件與字型的偵測結果寫入 /root/xorg.conf.new 這個文件里面去,這就是 xorg.conf 的重制結果。不過,這個新建的文件不見得真的能夠啟動 X server ,所以我們必須要使用底下的命令來測試一下這個新的配置檔是否能夠順利的運行:
| [root@www ~]# X -config /root/xorg.conf.new :1 |
因為鳥哥不知道你到底是在 runlevel 幾號,因此上述的測試通通是在 tty8 的終端機上面顯示 (display 1),這樣就能夠避免切換到不同的 runlevel 羅~如果一切順利的話,你就可以將 /root/xorg.conf.new 復制成為/etc/X11/xorg.conf 覆蓋掉修改錯誤的文件,然后重新啟動 X ,嘿嘿!應該就能夠順利的救回來你的 X Window System 羅!
- 關於螢幕解析度與升級率
有些朋友偶而會這樣問:『我的顯示器明明還不錯,但是螢幕解析度卻永遠只能達到 800x600 而已,這該如何處理?』,螢幕的解析度應該與顯卡相關性不高,而是與顯示器的升級頻率有關!所謂的升級頻率,指的是在一段時間內螢幕重新繪制畫面的速度。舉例來說, 60Hz 的升級頻率,指的是每秒鐘畫面升級 60 次的意思。那么關於顯示器的升級頻率該如何調整呢?你得先去找到你的顯示器的使用說明書 (或者是網站會有規格介紹),取得最高的升級率后,接下來選擇你想要的解析度,然后透過這個 gtf 的命令功能來調整:
| [root@www ~]# gtf 水平像素 垂直像素 升級頻率 [-xv] 選項與參數: 水平像素:就是解析度的 X 軸 垂直像素:就是解析度的 Y 軸 升級頻率:與顯示器有關,一般可以選擇 60, 75, 80, 85 等頻率 -x :使用 Xorg 配置檔的模式輸出,這是默認值 -v :顯示偵測的過程# 1. 使用 1024x768 的解析度,75 Hz 的升級頻率來取得顯示器內容 [root@www ~]# gtf 1024 768 75 -x # 1024x768 @ 75.00 Hz (GTF) hsync: 60.15 kHz; pclk: 81.80 MHz Modeline "1024x768_75.00" 81.80 1024 1080 1192 1360 768 769 772 802 -HSync +Vsync # 重點是 Modeline 那一行!那行給他抄下來# 2. 將上述的數據輸入 xorg.conf 內的 Monitor 項目中: [root@www ~]# vim /etc/X11/xorg.conf Section "Monitor"Identifier "Monitor0"VendorName "Monitor Vendor"ModelName "Monitor Model"Modeline "1024x768_75.00" 81.80 1024 1080 1192 1360 768 769 772 802 -HSync +Vsync EndSection # 就是新增上述的那行特殊字體部分到 Monitor 的項目中即可。 |
然后重新啟動你的 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 用的驅動程序:
- http://www.nvidia.com.tw/object/unix_tw.html
請自行選擇與你的系統相關的環境。鳥哥選擇自己的測試機是 Intel Core2 架構,因此選擇 Linux AMD64/EM64T的驅動程序版本,這個版本的驅動程序檔名為: NVIDIA-Linux-x86_64-xxx.yy.zz-pkg2.run ,其中的 xxx.yy.z 就是驅動程序的版本號碼。我將這個文件放置到 /root家目錄中。
- 開始安裝驅動程序
安裝過程有點像這樣 (檔名依照你的環境去下載與運行):
| [root@www ~]# sh NVIDIA-Linux-x86_64-185.18.14-pkg2.run |
圖 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 的驅動程序文件羅!同時這個軟件還提供了一支很有用的程序來幫助我們進行驅動程序升級喔!
| [root@www ~]# nvidia-installer --update # 可以進行驅動程序的升級檢查喔! |
好羅,那你就趕緊試看看新的顯卡芯片的功能吧。而如果有什么疑問的話,查閱一下 /var/log/nvidia 開頭的登錄文件看看吧! ^_^
ATI (AMD)
ATI 已經被 AMD 收購了,而 AMD 在近期已經宣布了 ATI 的顯卡驅動程序要開放成為 Open source ,這代表未來你可以很輕松的就取得 ATI 的顯卡驅動程序而不必要重新安裝的。不過,就如同前面提到的,若你需要某些特殊功能,建議還是手動安裝一下官方提供的驅動程序吧!你必須要到 AMD 的網站去下載 ATI 顯卡驅動程序哩!你可以到 http://www.amdtaiwan.com.tw/選擇『ATI 驅動程序』的連結去選擇你的顯卡驅動程序版本,也可以點選底下的連結:
- http://ati.amd.com/support/driver.html
然后去選擇你的操作系統與顯卡的型號來下載。鳥哥使用另一部含有 ATI 顯卡的主機來安裝驅動程序,該主機使用的是 Randon HD 3200 的顯卡芯片,最后下載的文件是: ati-driver-installer-9-6-x86.x86_64.run。要安裝這個驅動程序的方法與 NVidia 的方式很像的,同樣的直接運行該文件即可:
| [root@www ~]# sh ati-driver-installer-9-6-x86.x86_64.run |
圖 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 顯卡驅動程序安裝示意
最后選擇默認安裝即可!不需要使用專家安裝啦!這樣就安裝完畢了!也是非??焖侔?#xff01;最后就會在/usr/lib64/xorg/modules/drivers/ 里面出現 fglrx_drv.so 這個新的驅動程序啦!與 Nvidia 相同的, ATI 也提供一支名為 aticonfig 的命令來幫忙配置 xorg.conf ,你可以直接輸入『aticonfig -v 』來看看處理的方式即可。然后你就可以重新啟動 X 來看看新的驅動程序功能羅!非常簡單吧!
Intel
老實說,由於 Intel 針對 Linux 的圖形介面驅動程序已經開放成為 Open source 了,所以理論上你不需要重新安裝Intel 的顯卡驅動程序的。除非你想要使用比默認的升級的驅動程序,那么才需要重新安裝底下的驅動程序。Intel 對 Linux 的顯卡驅動程序已經有獨立的網站在運行,如下的連結就是安裝的說明網頁:
- http://intellinuxgraphics.org/install.html
其實 Intel 的顯卡用的地方非常的多喔!因為只要是整合型主板芯片組,用的是 Intel 的芯片時,通常都整合了 Intel 的顯卡羅~鳥哥使用的一組 cluster 用的就是 Intel 的芯片,所以羅~這家伙也是用的到的啦!
一般來說, Intel 的顯卡都常常會使用 i810 等驅動程序,而不是這個較新的 intel 驅動程序!你可以察看一下你系統是否有存在這些文件:
| [root@www ~]# locate libdrm /usr/lib/libdrm.so.2 <==32位的函式庫 /usr/lib/libdrm.so.2.0.0 /usr/lib64/libdrm.so.2 <==64位放置位置不同! /usr/lib64/libdrm.so.2.0.0 /usr/lib64/xorg/modules/linux/libdrm.so[root@www ~]# locate intel | grep xorg /usr/lib64/xorg/modules/drivers/intel_drv.so # 上面這個就是 Intel 的顯卡驅動程序了! |
呼呼!我們的 CentOS 有提供新的 Intel 顯卡驅動程序啦!所以不需要重新安裝說~只是可能需要修改 xorg.conf 這個配置檔的內容?;旧?#xff0c;要修改的地方有:
| [root@www ~]# vi /etc/X11/xorg.conf Section "Device"Identifier "Videocard0"Driver "intel" <==原本可能會是使用 i810 喔 EndSectionSection "Module"....(中間省略)....Load "glx" <==這兩個很重要!務必要加載!Load "dri"....(中間省略).... EndSectionSection "DRI" <==這三行是新增的!讓大家都能使用 DRIMode 0666 <==基本上,就是權限的配置 EndSection |
如果一切順利的話,接下來就是重新啟動 X 羅~使用新的 Intel 驅動程序吧!加油羅!
重點回顧
- Unix Like 操作系統上面的 GUI 使用的是最初由 MIT 所開發的 X window system,在 1987 釋出 X11 版,并於 1994 更改為 X11R6 ,故此 GUI 介面也被稱為 X 或 X11
- X window system 的 X server 最初由 XFree86 計畫所開發,后來則由 Xorg 基金會所持續開發;
- X window system 主要分為 X server 與 X client ,其中 X Server 在管理硬件,而 X Client 則是應用程序。
- 在運行上,X Client 應用程序會將所想要呈現的畫面告知 X Server ,最終由 X server 來將結果透過他所管理的硬件繪制出來!
- 每一支 X client 都不知道對方的存在,必須要透過特殊的 X client ,稱為 Window Manager 的,來管理各窗口的重疊、移動、最小化等工作。
- startx 可以偵測 X server / X client 的啟動腳本,并呼叫 xinit 來分別運行;
- X 可以啟動多個,各個 X 顯示的位置使用 -display 來處理,顯示位置為 :0, :1...
- Xorg 是一個 X server ,配置檔位於 /etc/X11/xorg.conf ,里面含有 Module, Files, Monitor, Device 等配置階段
- 字型管理為 X server 的重點,目前字型管理可由 xfs 及 fontconfig 來處理
本章習題
( 要看答案請將鼠標移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
- 在 X 配置沒問題的情況下,你在 Linux 主機如何取得窗口介面? 如果是在 run level 3 ,可以使用 startx 進入,至於 run level 5 ,則直接進入tty7 即可使用 display manager 登陸 X Window 系統。
- 利用 startx 可以在 run level 3 的環境下進入 X Window 系統。請問 startx 的主要功能? 整個 X 窗口系統的重點在啟動 X server 并加載 X client ,而運行 X server/X client 呼叫的任務為xinit ,startx 只是一個較為親和的腳本程序,可以搜尋系統上面的 X server / X client 配置值,以提供 xinit 來運行而已。
- 如何知道你系統當中 X 系統的版本與計畫? 最簡單可以利用 root 的身份下達 X -version 即可知道!
- 要了解為何 X 系統可以允許不同硬件、主機、操作系統之間的溝通,需要知道 X server / X client 的相關知識。請問 X Server / X client / Window manager 的主要用途功能? X Server 主要負責螢幕的繪制,以及周邊輸入裝置如鼠標、鍵盤等數據的收集,并回報給 X Client ;X Client 主要負責數據的運算,收到來自 X Server 的數據后,加以運算得到圖形的數據,并回傳給 X Server,讓 X server 自行繪制圖形。至於 Window manager 是一個比較特殊的 X Client ,他可以管理更多控制元素,最重要的地方還是在於窗口的大小、重疊、移動等等的功能。
- 如何重新啟動 X 最簡單在 X Window System 下,直接按下 [alt]+[ctrl]+[backspace<--] 即可,也可以 init 3 再 init 5,也可以關閉 X 后,再 startx 啟動等等。
- 試說明 ~/.xinitrc 這個文件的用途? 當我們要啟動 X 時,必須要啟動 X Client 軟件端。這個 ~/.xinitrc 即是在客制化自己的 X Client ,你可以在這個文件內輸入你自己的 X Client 。若無此文件,則默認以 /etc/X11/xinit/xinitrc 替代。
- 我在 CentOS 的系統中,默認使用 GNOME 登陸 X 。但我想要改以 KDE 登陸,該怎么辦? 首先你必須要已經安裝 KDE 環境 (參考前一章的 yum grouplist 功能),然后可以藉由修改/etc/sysconfig/desktop 內的配置值即可。但如果你不是 root 無法修訂該文件時,亦可以在自己的家目錄參考 /etc/X11/xinit/xinitrc 的內容自行制作 ~/.xinitrc 文件來修改!
- X Server 的 port 默認開放在? X port 默認開放在 port 6000 ,而且稱此一顯示為 :0
- Linux 主機是否可以有兩個以上的 X 是的!可以!第一個 X 通常在 tty7 ,第二個在 tty8 ,第三個在 tty9 ,依序類推。第幾個是以啟動的順序來定義,并非 :0 , :1 的意思~
- X Server 的配置檔是 xorg.conf,在該文件中, Section Files 干嘛用的? 相當重要!是配置顯示字型用的。而字型一般放置目錄在 /usr/lib/xorg/modules/fonts/ 當中。
- 我發現我的 X 系統鍵盤所輸入的字母老是打不出我所需要的單字,可能原因該如何修訂? 應該是鍵盤符號對應表跑掉了??梢孕薷?xorg.conf 文件內,關於 Keyboard 的 Option XkbLayout 項目,將他改為 us 即可!
- 當我的系統內有安裝 GNOME 及 KDE 兩個 X Widnow Manager ,我原本是以 KDE 為默認的 WM,若想改為 GNOME 時,應該如何修改? 修改 /etc/sysconfig/desktop 內部,成為 GNOME 即可!
參考數據與延伸閱讀
- 注1:維基百科對 X Window 的介紹:http://en.wikipedia.org/wiki/X_Window_System
- 注2:X Server/X client 與網絡相關性的參考圖示:
http://en.wikipedia.org/wiki/File:X_client_sever_example.svg - 注3:系統的 man page: man xinit 、 man Xorg 、 man startx
- 注4:一些與中文字型有關的網頁連結:
洪朝貴老師主筆的字型配置:http://www.cyut.edu.tw/~ckhung/b/gnu/font.php
李果正先生的 GNU/Linux 初探第十六章:http://edt1023.sayya.org/node17.html
EricCheng 的 fontconfig 軟件簡介:http://fractal.csie.org/~eric/wiki/Fontconfig - X 相關的官方網站:X.org 官方網站 (http://www.x.org/)、XFree86 官方網站 (http://www.xfree86.org/)
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 的全名與連結
出處:http://vbird.dic.ksu.edu.tw/linux_basic/0590xwindow.php
總結
以上是生活随笔為你收集整理的鸟哥的Linux私房菜(基础篇)- 第二十四章、 X Window 配置介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸟哥的Linux私房菜(基础篇)- 第二
- 下一篇: 鸟哥的Linux私房菜(基础篇)- 第二