第24章 X Window设置介绍

在 Linux 上头的图形界面我们称为 X Window System,简称为 X 或 X11。为何称之为系统呢?这是因为 X 窗口系统又分为 X Server 与 X Client,既然是 Server/Client(主从架构)这就表示其实X窗口系统是可以跨网络且跨平台的!X窗口系统对于Linux来说仅是一个软件,只是这个软件日趋重要。因为Linux是否能够在台式机上面流行与这个X窗口系统有关。好在,目前的X窗口系统整合到Linux已经非常优秀了,而且也能够具有3D加速的功能,只是,我们还是得要了解一下X窗口系统才好,这样如果出问题我们才有办法处理啊!

24.1 什么是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的。

24.1.1 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 之类的样式 [12]

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的自由软件授权方式。

24.1.2 主要组件: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 来将结果通过它所管理的硬件绘制出来。整体的架构我们大约可以使用图 24-1 来做个介绍 [13]

figure_0711_0401

图24-1 X Window System 的架构

上面的图示非常有趣。我们在客户端想要取得来自服务器的图形数据时,我们客户端使用的当然是客户端的硬设备,所以,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,两者其实有互动的!从图 24-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 为 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 根本不需要知道,相当先进与优秀!对吧?整个运行流程可以参考图24-2,客户端用的是什么操作系统在 Linux 主机端是不在乎的!

figure_0712_0402

图24-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 越来越朝向桌面计算机使用方向走,因此窗口管理器的角色会越来越重要!目前我们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主机上头的。

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上面进行选择的!我们在第5章介绍的登录环境其实就是gdm提供的。再回去参考看看图示吧!所以说,并非gdm只能提供GNOME的登录而已。

24.1.3 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 的参数方面:

1.使用startx后面接的参数;

2.若无参数,则查找用户根目录的文件,亦即~/.xserverrc;

3.若无上述两者,则以/etc/X11/xinit/xserverrc;

4.若无上述三者,则单纯执行/usr/bin/X(此即X server 可执行文件)。

X Client 的参数方面:

1.使用startx后面接的参数;

2.若无参数,则找寻用户主文件夹的文件,即~/.xinitrc;

3.若无上述两者,则使用/etc/X11/xinit/xinitrc;

4.若无上述三者,则单纯执行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 的内容是这样的 [14]

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 而已。你也可以发现最终在 X Client文件当中会有两个命令的查询,包括startkde与gnome-session这两个,这也是CentOS默认会提供的两个主要的 Window Manager。而你也可以通过修改/etc/sysconfig/desktop 内的DESKTOP=GNOME或DESKTOP=KDE来决定默认使用哪个窗口管理器的。如果你并没有安装这两个大家伙,那么X就会去使用twm这个窗口管理器来管理你的环境。

不论怎么说,鸟哥还是希望大家可以通过解析 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等,如表24-1所示。

表24-1

figure_0716_0403

在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 才行。

24.1.4 X 启动流程测试

好了,我们可以针对 X Server 与 X client的架构来做个简单的测试。由于鸟哥不知道你到底有没有启动过X,因此下面鸟哥将这个练习指定于第二个X,即是:1这个显示位置来显示。而且,下面的命令都是在tty1的地方执行的,至于下面的界面则是在tty8的地方展现。因此,请自行切换tty1执行命令与 tty8 查阅结果!(如果是 CentOS 之类的 Red Hat 系统,请务必要启动 xfs 这个服务。)

  1. 先来启动第一个 X 在 :1 界面中:

[root@www ~]# X :1 &

上述的X是大写,那个:1是写在一起的,至于&则是放到后台去执行。此时系统会主动跳到第二个图形界面终端机,也即tty8上。所以如果一切顺利的话,你应该可以看到一个X的光标可以让你移动了(如图 24-3 所示)。该界面就是 X Server 启动的界面!在 X 上面启动 xterm 终端机显示的结果如图24-4所示。丑丑的,而且没有什么client可以用啊!接下来,请按下[ctrl]+[alt]+[F1]组合键回到刚才执行命令的终端机:

  1. 输入数个可以在 X 当中执行的虚拟终端机

[root@www ~]# xterm -display :1 &

[root@www ~]# xterm -display :1 &

figure_0716_0404

图24-3 单纯启动 X Server的情况

figure_0716_0405

图24-4 在 X上面启动 xterm 终端机显示的结果

那个xterm是必须要在X下面才能够执行的终端机界面。加入的参数-display则是指出这个xterm要在那个 display 使用的。这两个命令请不要一次执行完。先执行一次,然后按下[ctrl]+[alt]+[F8]组合键去到X界面中,你会发现多了一个终端机。不过,可惜的是,你无法看到终端机的标题也无法移动终端机,当然也无法调整终端机的大小啊!我们回到刚才的tty1然后再次执行xterm命令,理论上应该多一个终端机,去到tty8查阅一下。唉~没有多出一个终端机啊?这是因为两个终端机重叠了,我们又无法移动终端机,所以只看到一个。接下来,请再次回到tty1去执行命令吧!

  1. 输入不同的 X client观察,分别去到 tty8 观察。

[root@www ~]# xclock -display :1 &

[root@www ~]# xeyes -display :1 &

跟前面一样的,我们又多执行了两个 X Client,其中 xclock 会显示时钟,而 xeyes 则是会出现一双大眼睛来盯着光标!分别启动xclock时钟与xeyes眼睛的结果如图24-5所示。你可以移动一下光标就可以发现眼睛的聚焦会跑。窗口管理器twm的功能显示如图24-6所示。不过,目前的四个X Client通通不能够移动与放大缩小!如此一来,你怎么在xterm下面执行命令啊?当然就很困扰。所以让我们来加载最流行的窗口管理器吧!

  1. 输入可以管理的 window manager

[root@www ~]# twm -display :1 &

figure_0717_0406

图24-5 分别启动xclock时钟与xeyes眼睛的结果

figure_0717_0407

图24-6 窗口管理器twm的功能显示

回到tty1后,用最简单的twm这个窗口管理器来管理我们的X吧!输入之后,去到tty8看看,用鼠标移动一下终端机看看,可以移动了吧?也可以缩小放大窗口。同时也出现了标题提示,也看到两个终端机。现在终于知道窗口管理器的重要性了吧?在黑屏幕地方按下鼠标右键,就会出现类似上面界面最右边的菜单,你就可以进行额外的管理。玩玩看先!

  1. 将所有刚才新建的 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 以后的终端接口使用方式有比较清楚地了解,加油!

24.1.5 我是否需要启用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已经整合得相当好了,但任何程序的设计都或多或少会有些bug(臭虫),X当然也不例外。此外,在你的Linux服务器上面启用X系统的话,自然多一组程序的启用(X Window会启动多个程序来执行各项任务),系统的不确定性当然可能会增加一些。因此,鸟哥不是很建议对Internet开放的服务器启动X Window的。

性能

无论怎么说,程序在跑总是需要系统资源的,所以,多启用了 X 就会造成一些系统资源的损耗。此外,上面也稍稍提到,某些X的软件是相当耗费系统资源的呢!所以,启动X可能会让你的可用系统资源(尤其是内存)降低很多,可能会造成系统性能低的问题。

鸟哥刚开始接触Linux(大约是在1999年左右)时,由于不熟悉,通常都是默认启用X Window在我的主机上面的。不过,那个时候的图形界面与Linux kernel的整合度比较差,老是挂点,是经常造成主机上面的网络服务无法顺畅的原因之一呢!

就鸟哥的使用经验来看,GNOME速度稍微快一点,KDE的接口感觉比较具有亲和力。不过,总体而言,这个 X Window System 的速度其实并不是那么棒。如果你有其他图形界面的需求时,可以使用yum去安装一下XFCE这一套,XFCE是比较轻量级的窗口管理器,据说使用上速度比GNOME还快些。最近很火红的Ubuntu的分支之一Xubuntu据说就是使用这套窗口管理器,试看看吧!

24.2 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。

24.2.1 解析xorg.conf 设置

如同前几个小节谈到的,在Xorg基金会里面的X11版本为X11R7.xx,那如果你想要知道到底你用的 X Server 版本是第几版,可以使用 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.el5

Before reporting problems, check http://wiki.x.org

to 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 主要有:

1.Module:被加载到 X Server 当中的模块(某些功能的驱动程序);

2.InputDevice:包括输入的键盘的格式、鼠标的格式,以及其他相关输入设备;

3.Files: 设置字体所在的目录位置等;

4.Monitor:监视器的格式,主要是设置水平、垂直的更新频率,与硬件有关;

5.Device:这个重要,就是显卡芯片组的相关设置了;

6.Screen:这个是在屏幕上显示的相关分辨率与色彩深度的设置项目,与显示的行为有关;

7.ServerLayout:上述的每个选项都可以重复设置,这里则是此 X Server 要选用的哪个选项值的设置。

好了,直接来看看这个文件的内容。这个文件默认的情况是取消很多设置值的,所以你的设置文件可能不会看到这么多的设置选项。不要紧的,后面的章节会交代如何设置这些选项的。

[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 选项,

那个是可以指定鼠标接口的设置值,我这里使用的是自动检测!不论是 USB还是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.0

VertRefresh 50.0 - 100.0

EndSection

屏幕显示器的设置仅有一个地方要注意,那就是垂直与水平的更新频率。

在上面的 HorizSync 与 VerRefresh 的设置上,要注意,不要设置太高,

这个玩意与实际的显示器功能有关,请查询你的显示器手册说明来设置吧!

传统 CRT 屏幕设置太高的话,据说会让显示器烧毁呢,要很注意啊!

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 0

Depth 16 <==就是色彩深度

Modes "1024x768" "800x600" "640x480" <==分辨率

EndSubSection

SubSection "Display"

Viewport 0 0

Depth 24

Modes "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 试看看。基本上,如果你的 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 这个命令直接切换到图形界面的登录来试看看。

经由讨论区网友的说明,如果你发现明明有捕捉到显卡驱动程序却老是无法顺利启动X 的话,可以尝试去官方网站取得驱动程序来安装,也能够将“Device”阶段的“Driver”修改成默认的“Driver "vesa"”,使用该驱动程序来暂时启动 X 内的显卡。

24.2.2 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),不过这种字体是 Big5 编码的,因此默认并没有在你的字体支持之中(因为目前大多使用 utf8 来显示中文了)。如果你想要测试一下这种字体,除了自行下载字体文件之外,我们可以使用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来新建字体缓存文件才行 [15]

让窗口管理器可以使用其他的字体

如果想要使用其他的字体的话,你可以自行取得某些字体来处理的。鸟哥这边从 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”出现如图 24-7 所示的结果呢!参考看看。

figure_0723_0408

图24-7 中文字体的调整结果

24.2.3 设置文件重建与显示器参数微调

如果你修改 xorg.conf 结果改错了,导致无法顺利启动 X Server 时,偏偏又忘记制作备份文件,该如何是好?没关系,我们的 Xorg 有提供不错的工具可以处理。同时 CentOS 也有提供相关的设置命令,那就是在第 21 章提到的 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 窗口!

24.3 显卡驱动程序安装范例

虽然你的X窗口系统已经顺利启动了,也调整到你想要的分辨率了,不过在某些场合下面,你想要使用显卡提供的3D加速功能时,却发现X提供的默认的驱动程序并不支持!此时真是欲哭无泪啊~那该如何是好?没关系,安装官方网站提供的驱动程序即可!目前世界上针对x86提供显卡的厂商最大的应该是Nvidia、AMD(ATI)、Intel这三家(没有按照市场占有率排列),所以下面鸟哥就针对这三家的显卡驱动程序安装做个简单的介绍吧!

由于硬件驱动程序与内核有关,因此你想要安装这个驱动程序之前,请务必先参考第 22 章与第23 章的介绍,才能够顺利编译出显卡驱动程序。建议可以直接使用 yum 去安装 Development Tools这个软件组以及kernel-devel这个软件即可。

24.3.1 NVidia

虽然Xorg基金会已经针对NVidia公司的显卡驱动程序提供了nv这个模块,不过这个模块无法提供很多其他功能。因此,如果你想要使用新的显卡功能时,就得要额外安装NVidia提供给Linux的驱动程序才行。你可以这样做:

下载驱动程序

建议你可以到NVidia的官方网站(http://www.nvidia.cn)自行去下载最新的驱动程序,你也可以到下面的链接直接查阅给Linux用的驱动程序:

http://www.nvidia.cn/object/UNIX_cn.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

上面说的是授权,你必须要接受(Accept)才能继续,如图24-8所示。

figure_0725_0409

图24-8 NVidia 驱动程序安装示意

figure_0725_0410

图24-9 NVidia 驱动程序安装示意

我们不想让NVidia帮我们编译好内核模块,因此这里选择No,如图24-9所示,让我们自己编译模块吧!直接按下OK(如图24-10所示)来继续下一步即可。

figure_0725_0411

图24-10 NVidia 驱动程序安装示意

figure_0725_0412

图24-11 NVidia 驱动程序安装示意

开始进行内核模块的编译,如图24-11所示,这个过程不会太久。

是否要安装额外的OpenGL函数库?要啊!就选择Yes吧!如图24-12所示。

figure_0725_0413

图24-12 NVidia 驱动程序安装示意

figure_0725_0414

图24-13 NVidia 驱动程序安装示意

这个时候开始安装显卡的驱动程序,会花费一段时间。然后出现图24-13。

让这个安装程序主动去修改xorg.conf吧!比较轻松愉快!就按下Yes即可,如图24-14所示。

figure_0725_0415

图24-14 NVidia 驱动程序安装示意

figure_0725_0416

图24-15 NVidia 驱动程序安装示意

最后按下OK就结束安装,如图24-15所示。这个时候如果你去查阅一下/etc/X11/xorg.conf的内容,会发现Device的Driver设置会成为nvidia而不是原本的nv。这样就搞定!很简单吧!而且这个时候你的/usr/lib64/xorg/modules/drivers目录内会多出一个nvidia_drv.so的驱动程序文件!同时这个软件还提供了一个很有用的程序来帮助我们进行驱动程序升级。

[root@www ~]# nvidia-installer —update

可以进行驱动程序的升级检查。

好,那你就赶紧试看看新的显卡芯片的功能吧。而如果有什么疑问的话,查阅一下 /var/log/nvidia开头的日志文件看看吧!

24.3.2 ATI (AMD)

ATI 已经被 AMD 收购了,而 AMD 在近期已经宣布了 ATI 的显卡驱动程序要开放成为 Open source,这代表未来你可以很轻松就取得ATI的显卡驱动程序而不必要重新安装。不过,就如同前面提到的,若你需要某些特殊功能,建议还是手动安装一下官方提供的驱动程序吧!你要到 AMD 的网站去下载ATI显卡驱动程序。你可以到ATI公司的中文网站选择“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

选择安装,如图24-16所示。

figure_0726_0417

图24-16 ATI显卡驱动程序安装示意图

figure_0726_0418

图24-17 ATI显卡驱动程序安装示意

这里的目的是让我们确定是否真的是安装在x86_64的硬件上面而已,按下OK按钮,如图24-17所示。

看完授权之后,直接按Exit离开授权说明,如图24-18所示,然后会出现接受与否的字样,如图24-19所示。

figure_0726_0419

图24-18 ATI显卡驱动程序安装示意

figure_0726_0420

图24-19 ATI显卡驱动程序安装示意

要安装啊!所以当然就是Yes下去。

最后选择默认安装即可。不需要使用 Expert(专家方式)安装,如图 24-20 所示。这样就安装完毕了!也是非常快速吧!最后就会在/usr/lib64/xorg/modules/drivers/里面出现 fglrx_drv.so 这个新的驱动程序。与Nvidia相同的,ATI也提供一个名为aticonfig的命令来帮忙设置 xorg.conf ,你可以直接输入“aticonfig -v”来看看处理的方式即可。然后你就可以重新启动X来看看新的驱动程序功能!非常简单吧!

figure_0726_0421

图24-20 ATI显卡驱动程序安装示意

24.3.3 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这个设置文件的内容。基本上,要修改的地方有:

[root@www ~]# vi /etc/X11/xorg.conf

Section "Device"

Identifier "Videocard0"

Driver "intel" <==原本可能会是使用 i810

EndSection

Section "Module"

….(中间省略)….

Load "glx" <==这两个很重要!务必要载入!

Load "dri"

….(中间省略)….

EndSection

Section "DRI"  <==这三行是新增的!让大家都能使用 DRI

Mode 0666  <==基本上,就是权限的设置

EndSection

如果一切顺利的话,接下来就是重新启动X,使用新的Intel驱动程序吧!加油!

24.4 重点回顾

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 来处理。

24.5 本章习题

在X设置没问题的情况下,你在Linux主机中如何取得窗口界面?

利用 startx 可以在 runlevel 3 的环境下进入 X Window 系统。请问 startx 的主要功能是什么?

如何知道你系统当中X系统的版本与计划?

要了解为何 X 系统可以允许不同硬件、主机、操作系统之间的通信,需要知道 X Server /X Client的相关知识。请问 X Server/X client/Window manager 的主要用途功能是什么?

如何重新启动X?

试说明~/.xinitrc这个文件的用途。

我在CentOS的系统中,默认使用GNOME登录X。但我想要改以KDE登录,该怎么办?

X Server 的 port 默认开放在哪里?

Linux主机是否可以有两个以上的X?

X Server 的设置文件是 xorg.conf,在该文件中,Section Files 干嘛用的?

我发现我的X系统键盘所输入的字母老是打不出我所需要的单字,可能原因是什么?该如何修改?

当我的系统内有安装GNOME及KDE两个X Window Manager ,我原本是以KDE为默认的WM,若想改为GNOME时,应该如何修改?

24.6 参考数据与扩展阅读

X相关的官方网站:X.org 官 方 网 站 ( http://www.x.org/ )、 XFree86 官 方 网 站(http://www.xfree86.org/)