Unix Like操作系统不仅在服务器领域,在美编、排版、制图、多媒体等桌面领域也有重要的应用。 这些都要用到图形接口 (Graphical User Interface, GUI).
Linux上的图形系统称为X Window System,简称X或X11.X在W(indow)之后,意为下一代的新窗口. X窗口系统采用Server/Client架构,分为X server与X client, Server/Client架构允许X窗口系统跨网络跨操作系统平台运行.
X窗口系统对于内核来说只是一个应用层软件. 目前的X窗口系统已经非常优秀,而且具有3D加速的功能.

X Window简史

回到顶部

X Window系统最早由MIT(Massachusetts Institute of Technology, 麻省理工学院)在1984年开发,最初在Unix的System V操作系统上开发。 开发者希望这个窗口接口不能与硬件有强烈的相关性,因此X最初就是以应用程序的概念开发的,而非以操作系统内核来开发。
X希望能够通过网络进行图形接口的读取,由此开发出许多X通讯协议.这些网络架构吸引了很多厂商加入研发,因此X的功能一直在持续的加强! 一直到1987年X版本升级为X11,这一版X取得了明显的进步, 后来的窗口接口都是基于此版本,后来X窗口也被称为X11。 直到1994年发布了新版的X11R6,后来的架构都是沿用此版本,后来的版本定义就变成了类似1995年的X11R6.3之类的样式。
1992年XFree86 (http://www.xfree86.org/)计划顺利展开, XFree86表示"X + Free software + x86 硬件",该计划持续维护X11R6,包括对新硬件的支持以及更多新增的功能等。
早期Linux所使用的X Window内核都是由XFree86计划提供,所以也将X系统说成XFree86。
由于一些授权的问题导致XFree86无法继续提供类似GPL自由软件,后来Xorg基金会接手了X11R6的维护! Xorg(http://www.x.org/)利用MIT发布的类似自由软件的授权维护X11R6,在2004年发布了X11R6.8版本,在2005年后发布了X11R7.x版。 CentOS 7.x使用的X就是Xorg提供的X11R7.X! 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 Server,最终由X server将结果通过他所管理的硬件绘制出来! 整体的架构如下图所示: X Window System架构 X Window System架构
客户端想要获得来自服务器的图形数据时,我们客户端使用的当然是客户端的硬设备啊, X Server的重点是管理客户端的硬件,包括接受键盘/鼠标等设备的输入信息, 将图形绘制到屏幕上。 X Client主要提供X Server要绘制的内容。那照这样的想法来思考,我们是想要取得远程服务器的绘图数据来我们的计算机上面显示嘛! 所以啰,远程服务器提供的是 X client 软件啊!
下面深入探讨这两个组件!

X Server:硬件管理、屏幕绘制与提供字体功能

回到顶部

X Server负责管理主机上的硬件设备.XFree86计划及Xorg基金会主要提供的就是X Server! X Server管理的设备与输入/输出有关,包括键盘、鼠标、手写板、显示器(monitor)、屏幕分辨率与颜色深度、显示适配器(包含驱动程序)与显示的字体等等,都由X Server管理。
linux开机的时候就会以systemd设置好显示适配器、屏幕以及键盘鼠标等, 但X Window有自己的配置文件,会对这些硬件设备重新设置。总之, X Server的主要功能就是管理主机上的显示硬件与驱动程序。
那么客户端如何取得服务器端提供的图形画面呢? 由于服务器与客户端的硬件不可能完全相同,因此客户端当然不可能使用到服务器端的硬件显示功能! 举例来说,客户端计算机并没有3D影像加速功能,那么你的画面可能呈现出服务器端提供的 3D 加速吗? 当然不可能吧!所以啰 X Server 的目的在管理客户端的硬设备! 也就是说:
每部客户端主机都需要安装X Server,而服务器端则是提供X Client软件, 以提供客户端绘图所需要的数据。 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 server会侦测到鼠标的移动,但是他不知道应该怎么绘图! 于是X server将鼠标的这个动作告知X Client, X Client就会去运算,结果得到将鼠标指针向右移动几个像素,然后将这个结果告知X server, 最后X Server将鼠标指针向右移动. 这样做的好处是,X Client不需要知道X Server的硬件配备与操作系统!因为X Client单纯就是在处理绘图的数据,本身并不绘图的。 客户端的X Server用的是什么硬件,哪套操作系统?,服务器端的X Client根本不需要知道. X Server与X client的沟通示意 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等,都是一些窗口管理器的项目计划! 这些项目计划中,每种窗口管理器所用以开发的显示引擎都不太相同,所着重的方向也不一样, 每套 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等。
下面CentOS默认的GNOME为例, 说明X Server,X client和window manager的关系. 要在本机端启动X Window system,CentOS主机上面必须要有Xorg的X server, 这样才能够提供屏幕的绘制. 然后为了让窗口管理更方便,于是就加装了GNOME计划的window manager, 为了使用更方便,就在GNOME上面加上更多的窗口应用软件,最后就建构出我们的X Window System了.

Display Manager:提供登入需求

回到顶部

在文字接口下可以输入startx来启动X系统,由于我们已经登入系统了,因此不需要重新登入即可开启X环境。 如果是graphical.target环境,你会发现在tty1或其他tty的地方有个可以让你使用图形接口登入(输入账号密码)的东西, 那是个Display Manager!display manager最大的任务就是提供登入的环境, 并且加载用户选择的Window Manager与语系数据!
几乎所有的大型窗口管理器项目计划都会提供display manager,CentOS上主要是GNOME的GNOME Display Manager(gdm)这支程序来提供tty1的图形接口登入! 至于登入后取得的窗口管理器,可以在gdm上面进行选择的!登入环境其实就是gdm提供的啦.

X Window 的启动流程

回到顶部

要启动X Window System,必须要先启动管理硬件与绘图的X Server ,然后才加载X Client 。 基本上目前都是使用Window Manager来管理窗口接口风格的。 登入本机的文字接口后,可以输入startx启动X窗口; 在graphical.target环境下,通过display manager提供的登入画面,输入账号密码登入并获得X窗口!
X server配置文件为何?如何修改分辨率与显示器?可不可以设置默认启动的窗口管理器? 如何设置默认的用户环境(与 X client 有关)等,这些都需要了解X的启动流程才能得知!
下面我们就来介绍X的启动流程吧.

startx命令启动X

回到顶部

Linux是多用户多任务操作系统,X窗口可以根据不同的用户而有不同的设置! 每个用户启动X时, X server的分辨率、启动X client的相关软件及Window Manager的选择可能都不一样!
startx其实是一个shell script,当在文本模式下通过startx命令首次启动X 窗口时, startx会自动建立X所需要的配置文件。可自行研究一下startx脚本的内容。
startx最重要的任务就是找出系统默认的X server与X client的配置文件,用户也能够使用startx外接参数来取代配置文件的内容。 这个意思是说:startx 可以直接启动,也能够外接参数,例如底下格式的启动方式:

                [root@study ~]# startx [X client 参数] -- [X server 参数]
              
以颜色深度为 16 bit 启动 X
                [root@study ~]# startx -- -depth 16
              
参数以两个减号--隔开,前面的是X Client的设置,后面的是X Server的设置。 上面是让X server以颜色深度16 bit色(即每一像素占用16 bit ,也就是65536色)显示, 颜色深度是与X Server有关的,所以参数写在--后面. 事实上启动X的是xinit程序, startx仅是找出设置值!那么 startx找到的设置值可用顺序为何呢?基本上是这样的:
X server 的参数方面:
1. 使用 startx 后面接的参数;
2. 若无参数,则找寻用户家目录的文件,亦即 ~/.xserverrc3. 若无上述两者,则以 /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窗口系统!

startx呼叫执行的xinit

回到顶部

startx找到需要的设置值后,就呼叫xinit启动X。xinit他的语法:

                [root@study ~]# xinit [client option] -- [server or display option]
              
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 的内容是这样的:
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系统,tty2以后的终端机就会有画面!只是很丑,因为我们还没有启动window manager!
从上面的说明我们可以知道, xinit主要在启动X server与X client,xinit所需的参数则由startx去帮忙找寻的。 最重要的就是startx找到的参数! 也就是/etc/X11/xinit/目录下的 xinitrc 与 xserverrc 这两个文件的内容~ 虽然xserverrc 默认是不存在的。下面我们就分别谈一谈这两个文件的主要内容与启动的方式~

启动 X server 的文件: xserverrcX

回到顶部

窗口最先需要启动的就是X server,X server启动的脚本与参数是通过/etc/X11/xinit/目录下的xserverrc文件。 不过CentOS 7.x根本就没有xserverrc这个文件! 用户家目录也没有~/.xserverrc,这个时候系统会怎么做呢? 其实就是执行/usr/bin/X这个命令! 这个命令也是系统最原始的X server执行文件。
启动X Server,Xorg会去读取/etc/X11/xorg.conf配置文件。如果一切顺利,就会在tty2以后终端环境中启动了X 。 单纯的X启动,只会看到画面一片漆黑,然后中心有个鼠标的光标而已~
其实X启动的时候还可以指定启动的接口,就是:0这个参数. Linux可以同时启动多个X!第一个X的画面会在:0亦即是tty2, 第二个X则是:1亦即tty3。后续还可以有其他的X存在。xterm在加载时也必须使用-display来说明这个X应用程序是需要在哪个X加载的才行呢! X server未注明加载的接口时,默认是使用:0,但是X client未注明时,则无法执行!
CentOS 7的tty非常有趣!tty是有用到才会启动的,这与之前CentOS 6以前的版本默认启用6个tty是不同的。 如果你只用到tty1的话, 那么启动X就会默认丢到tty2 ,而X :1就会丢到tty3,以此类推. 启动了X server后,接下来就是加载 X client到这个 X server上面了!

启动 X Client 的文件: xinitrc

回到顶部

如果家目录没有~/.xinitrc,X Client会以/etc/X11/xinit/xinitrc作为默认脚本。 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 这个窗口管理器来管理你的环境啰。
不论怎么说,initroot还是希望大家可以通过解析 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显示接口,然后再启动X client到这个X显示接口上。 X client通常就是GNOME或KDE,这两个可以在/etc/sysconfig/desktop里面设置。
既然X是可以跨网络的,那X启动的端口号是多少呢?
考虑X窗口是在本机上运行,因此将端口号改为socket了,无法观察到X启动的端口号。 事实上,X server应该是要启动一个port 6000来与X client通信! 由于系统上面也可能有多个 X 存在,因此我们就会有 port 6001, port 6002... 等等。 这也就是说:(假设为 multi-user.target 模式, 且用户仅曾经切换到 tty1 而已) X 窗口系统 显示接口号码 默认终端机 网络监听端口口
第一个 X hostname:0 tty2 port 6000
第二个 X hostname:1 tty3 port 6001
在 X Window System 的环境下,我们称 port 6000 为第 0 个显示接口,亦即为 hostname:0 , 那个主机名通常可以不写,所以就成了 :0 即可。 在默认的情况下,第一个启动的 X (不论是启动在第几个 port number) 是在 tty2 ,亦即按下 [ctrl]+[Alt]+[F2] 那个画面。 而起动的第二个 X则默认在 tty3 亦即 [ctrl]+[Alt]+[F3] 那个画面呢!
主机上可能同时存在多个X,在启动X Server / Client 时, 应该都要注明该X Server / Client 主要是提供或接受来自哪个display 的 port number才行。

X 启动流程测试

回到顶部

下面对 X Server 与 X client 的架构做个简单的实验! 假设tty1是multi-user.target的,并且曾经打开过tty2,那么X :1将会是tty3! 下面命令都是在tty1下执行的,结果在tty3显示。 请用[ctrl]+[alt]+[F1]/[F3]切换tty1和tty3!
1. 启动X server在 :1 画面中:

                [peter@peter-VirtualBox ~]$ X :1 &
              
单纯启动 X server 的情况
&表示命令在后台运行。此时系统会主动跳到第二个图形接口终端机,即tty8上! 如果一切顺利,应该可以看到一个X的鼠标光标可以移动。该画面就是 X Server启动的画面,看上去很简陋,也没有什么client可以用! 下面我们就启动一些client试试,先启动一个xterm.先按下[ctrl]+[alt]+[F1]回到刚刚下达命令的终端机.
2. 在X中执行虚拟终端机(若没有可自行yum安装)
                [peter@peter-VirtualBox ~]$ xterm -display :1 &
              
在 X 上面启动 xterm 终端机显示的结果 xterm必须在X下才能够执行。参数-display指定xterm要在那个display使用. 按下[ctrl]+[alt]+[F3]去到X画面中,你会发现多了一个终端机. 不过无法看到终端机的标题、也无法移动终端机,当然也无法调整终端机的大小! 现在回到tty1,再次执行刚才的xterm命令:
                [peter@peter-VirtualBox ~]$ xterm -display :1 &
              
再切换到tty3,界面看上面没有什么变化,其实有多出一个终端机, 只是这两个终端机重迭了,我们无法移动终端机,所以只看到一个。 再切回到tty1(可能需要yum install xorg-x11-apps)
3. 在启动一些不同的X client,然后切换到tty3观察界面变化:
                [peter@peter-VirtualBox ~]$ xclock -display :1 &
                [peter@peter-VirtualBox ~]$ xeyes -display :1 &
              
分别启动 xclock 时钟与 xeyes 眼睛的结果
如上我们又启动了两个X client,xclock显示时钟,xeyes会出现一双大眼睛盯着光标,移动光标就可以发现眼睛的焦聚会跑啊 目前的四个 X client都不能够移动或放大缩小!需要启动窗口管理器!
4. 启动window manager,我们先以root安装twm:
                [root@study ~]# yum install http://ftp.ksu.edu.tw/FTP/CentOS/6/os/x86_64/Packages/xorg-x11-twm-1.0.3-5.1.el6.x86_64.rpm
              
可自行到相关的网站下载twm!
                [root@study ~]# yum install xorg-x11-fonts-{100dpi,75dpi,Type1}
              
5. 回到tty1,启动窗口管理器twm:
                [peter@peter-VirtualBox ~]$ twm -display :1 &
              
窗口管理器twm功能显示
切到tty3看看,用鼠标移动一下终端机,可以移动了,也可以缩小放大窗口,同时也出现了标题提示了,也看到两个终端机啦! 现在终于知道窗口管理器的重要性了吧!在黑屏幕地方按下鼠标右键,就会出现类似上面画面最右边的选单,可以进行额外的管理了!
6. 将所有刚刚建立的 X 相关工作全部杀掉!
                [peter@peter-VirtualBox ~]# kill %6 %5 %4 %3 %2 %1
              
通过这个实验,应该会对X server与Window manager及tty3以后的终端接口使用方式有比较清楚的了解了.

Linux主机是否需要默认启动X窗口呢? 如果Linux主机定位为网络服务器,主要服务的配置文件都是纯文本文件格式,根本就是不需要X Window! X Window仅是Linux系统的一个软件而已!
如果Linux主机定位为桌面计算机,那么X Window就相当重要了!我们日常使用的办公软件,都需要用到X Window图形功能!

X Server配置文件xorg.conf解析与设置

回到顶部

X窗口系统能不能成功启动,与X Server有很大的关系。 X Server负责整个画面的描绘,所以没有启动 X Server,X Client也无法将图样显示出来。
X Server管理的是显示适配器、屏幕分辨率、鼠标按键对应等等,尤其是显示适配器芯片的识别。 显示的字体由X Server 管理。 X server 的配置文件默认放置在/etc/X11目录下,而相关的显示模块或上面提到的各种模块,则主要放置在/usr/lib64/xorg/modules下。 比较重要的是字体文件与芯片组,她们主要放置在:
提供的屏幕字体: /usr/share/X11/fonts/
显示适配器的芯片组: /usr/lib64/xorg/modules/drivers/
在 CentOS 底下,这些都要通过一个统一的配置文件来规范,那就是X server配置文件。这个配置文件的文件名就是/etc/X11/xorg.conf

使用X -version查看X Server的版本:

                [root@study ~]# X -version
                X.Org X Server 1.15.0
                Release Date: 2013-12-27
                X Protocol Version 11, Revision 0
                Build Operating System: 2.6.32-220.17.1.el6.x86_64
                Current Operating System: Linux study.centos.initroot 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64
                Kernel command line: BOOT_IMAGE=/vmlinuz-3.10.0-229.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet
                Build Date: 10 April 2015 11:44:42AM
                Build ID: xorg-x11-server 1.15.0-33.el7_1
                Current version of pixman: 0.32.4
                Before reporting problems, check http://wiki.x.org to make sure that you have the latest version.
              
X server是Xorg计划提供的X Server 1.15.0! 配置文件为/etc/X11/xorg.conf。需要留意的是,从CentOS 6以后X server启动的时候会自行侦测系统上的显示芯片、屏幕类型等, 然后自行加载优化的驱动程序。 所以/etc/X11/xorg.conf已经不再需要了。 但如果你不喜欢 X 系统自行侦测的设置值, 也可以自行建置xorg.conf。
此外,如果你只想要加入或者是修改部份的设置,并不是每个组件都要设置,也可以在/etc/X11/xorg.conf.d/目录下建立文件名为.conf的文件, 加入额外配置项目即可!
怎么知道系统用的是哪一个设置呢?可以参考/var/log/Xorg.0.log,该文件前几行记录了使用的配置文件!
注意在修改配置文件之前,务必将这个文件备份下来,以免改错导致X server无法启动。 配置文件的内容分成数个段落,每个段落以Section开始,以EndSection结束, 里面含有该Section相关的设置值,例如:
                Section "section name"
                ...... 
                与这个 section name 有关的设置项目
                ......
                EndSection
              
常见的 section name 主要有:
1. Module: 被加载到 X Server 当中的模块 (某些功能的驱动程序);
2. InputDevice: 包括输入的 1. 键盘的格式 2. 鼠标的格式,以及其他相关输入设备;
3. Files: 设置字体所在的目录位置等;
4. Monitor: 监视器的格式, 主要是设置水平、垂直的刷新频率,与硬件有关;
5. Device: 这个重要,就是显示适配器芯片组的相关设置了;
6. Screen: 这个是在屏幕上显示的相关分辨率与颜色深度的设置项目,与显示的行为有关;
7. ServerLayout: 上述的每个项目都可以重复设置,这里则是此一 X server 要取用的哪个项目值的设置啰。
xorg.conf默认不存在,Xorg提供一个简单的方式让我们重建xorg.conf文件! 这可能也是 X 自行侦测 GPU 所产生的优化设置! 在multi-user.target环境下可以这样生成xorg.conf:
                [root@study ~]# Xorg -configure
                .....(前面省略).....
                Markers: (--) probed, (**) from config file, (==) default setting,
                (++) from command line, (!!) notice, (II) informational,
                (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
                (==) Log file: "/var/log/Xorg.0.log", Time: Wed Sep 16 10:13:57 2015
                List of video drivers: 这里说明系统上已有的显示适配器芯片组的驱动程序
                qxl vmware v4l ati radeon intel nouveau dummy modesetting fbdev vesa
                (++) Using config file: "/root/xorg.conf.new" 使用的配置文件
                (==) Using config directory: "/etc/X11/xorg.conf.d" 额外设置项目的位置
                (==) Using system config directory "/usr/share/X11/xorg.conf.d"
                (II) [KMS] Kernel modesetting enabled.
                .....(中间省略).....
                Your xorg.conf file is /root/xorg.conf.new
                最终新的文件生成了!
                To test the server, run 'X -config /root/xorg.conf.new' 测试方法
              
这样就在root目录下产生一个新的xorg.conf.new文件! 这个文件默认是取消很多设置值的, 所以可能不会看到这么多的设置项目。后面会介绍如何设置这些项目!
                [root@study ~]# vim xorg.conf.new
                X决定使用的设置项目
                Section "ServerLayout"
                Identifier "X.org Configured"
                "Screen0" 0 0 #使用的屏幕为 Screen0 这一个 (后面会解释)
                InputDevice "Mouse0" "CorePointer" # 使用的鼠标设置为 Mouse0
                InputDevice "Keyboard0" "CoreKeyboard" # 使用的键盘设置为 Keyboard0
                Screen 0
                EndSection
                系统可能有多组的设置值,包括多种不同的键盘、鼠标、显示芯片等等,而最终 X 使用的设置,
                # 就是在这个 ServerLayout 项目中来处理的!因此,你还得要去底下找出 Screen0 是啥
                Section "Files"
                ModulePath
                "/usr/lib64/xorg/modules"FontPath "catalogue:/etc/X11/fontpath.d"
                FontPath "built-ins"
                EndSection
                # 我们的 X Server 很重要的一点就是必须要提供字体,这个 Files 的项目就是在设置字体,
                # 当然啦,你的主机必须要有字体文件才行。一般字体文件在:/usr/share/X11/fonts/ 目录中。
                # 但是 Xorg 会去读取的则是在 /etc/X11/fontpath.d 目录下的设置喔!
                Section "Module"
                Load "glx"
                EndSection
                # 上面这些模块是 X Server 启动时,希望能够额外获得的相关支持的模块。
                # 关于更多模块可以搜寻一下 /usr/lib64/xorg/modules/extensions/ 这个目录
                Section "InputDevice"
                Identifier "Keyboard0"
                Driver "kbd"
                EndSection
                # 就是键盘,在 ServerLayout 项目中有出现这个 Keyboard0 吧!主要是设置驱动程序!
                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 "Monitor"
                Identifier "Monitor0"
                VendorName "Monitor Vendor"
                ModelName "Monitor Model"
                EndSection
                # 屏幕监视器的设置仅有一个地方要注意,那就是垂直与水平的刷新频率,常见设置如下:
                # HorizSync 30.0 - 80.0
                # VertRefresh 50.0 - 100.0
                # 在上面的 HorizSync 与 VerRefresh 的设置上,要注意,不要设置太高,
                # 这个玩意儿与实际的监视器功能有关,请查询你的监视器手册说明来设置吧!
                # 传统 CRT 屏幕设置太高的话,据说会让 monitor 烧毁呢,要很注意啊。
                Section "Device"
                # 显示适配器芯片 (GPU) 的驱动程序!很重要的设置!
                Identifier "Card0"
                Driver "qxl"
                # 实际使用的显示适配器驱动程序!BusID
                "PCI:0:2:0"
                EndSection
                # 这地方重要了,这就是显示适配器的芯片模块加载的设置区域。由于我使用 Linux KVM
                # 仿真器仿真这个测试机,因此这个地方显示的驱动程序为 qxl 模块。
                # 更多的显示芯片模块可以参考 /usr/lib64/xorg/modules/drivers/
                # 与显示的画面有关,分辨率与颜色深度
                Section "Screen"
                Identifier "Screen0" # 就是 ServerLayout 里面用到的那个屏幕设置
                Device "Card0" # 使用哪一个显示适配器的意思!
                Monitor "Monitor0" # 使用哪一个屏幕的意思!
                SubSection "Display"
                Viewport 0 0 # 此阶段的附属设置项目
                Depth 1 # 就是颜色深度的意思!
                EndSubSection
                SubSection "Display"
                Viewport 0 0
                Depth 16
                EndSubSection
                SubSection "Display"
                Viewport 0 0
                Depth 24
                EndSubSection
                EndSection
              
Monitor与实际的显示器有关,而Screen与显示的画面分辨率、颜色深度有关。 我们可以设置多个分辨率,实际应用时可以让用户自行选择想要的分辨率来呈现,设置如下:
Modes "1024x768" "800x600" "640x480" 分辨率
上述的Modes是在"Display"下的子设置。
为了避免困扰,通常只指定一到两个分辨率。
上面设置完毕之后,就等于将整个X Server设置好了。如果想要更新其他的例如显示芯片的模块,就去硬件开发商的网站下载源码编译。 设置完毕之后,就可以启动X Server了。然后将xorg.conf.new更名成类似00-initroot.conf之类的文件名, 再将该文件移动到/etc/X11/xorg.conf.d/里面去,这样就OK了!
测试 X server 的配置文件是否正常:
                直接在multi-user.target启动X:
                [root@study ~]# startx 
                在tty3单独启动X server:
                [root@study ~]# Xorg :1 
              
当然也可以使用systemctl isolate graphical.target命令直接切换到图形接口的登入界面。 如果你发现明明有捉到显示适配器驱动程序却老是无法顺利启动X,可以尝试去官网取得驱动程序来安装, 也能够将Device阶段的Driver修改成默认的Driver "vesa",使用该驱动程序来暂时启动 X 内的显示适配器.

23.2.2 字体管理

回到顶部

Xorg使用的字体大都存放在下面的目录:
/usr/share/X11/fonts/
/usr/share/fonts/
Xorg默认加载的字体记录在/etc/X11/fontpath.d/目录中,使用链接文件的模式来进行链接。 xorg.conf里有个Flies设置项,FontPath "catalogue:/etc/X11/fontpath.d"表示Xorg默认使用的字体来自/etc/X11/fontpath.d!
CentOS 7针对中文字体,有楷书与明体,明体默认安装了,不过楷书却没有安装. 下面我们安装楷书,然后将楷书也列为默认的字体之一:
1. 检查中文字体,并且安装中文字体与检验有没有放置到fontpath.d 目录中!

                [root@study ~]# ll -d /usr/share/fonts/cjk*
                drwxr-xr-x. 2 root root 22 May
                4 17:54 /usr/share/fonts/cjkuni-uming
                [root@study ~]# yum install cjkuni-ukai-fonts
                [root@study ~]# ll -d /usr/share/fonts/cjk*
                drwxr-xr-x. 2 root root 21 Sep 16 11:48 /usr/share/fonts/cjkuni-ukai 这就是楷书!
                drwxr-xr-x. 2 root root 22 May 4 17:54 /usr/share/fonts/cjkuni-uming
                [root@study ~]# ll /etc/X11/fontpath.d/
                lrwxrwxrwx. 1 root root 29 Sep 16 11:48 cjkuni-ukai-fonts -> /usr/share/fonts/cjkuni-ukai/
                lrwxrwxrwx. 1 root root 30 May 4 17:54 cjkuni-uming-fonts -> /usr/share/fonts/cjkuni-uming/
                lrwxrwxrwx. 1 root root 36 May 4 17:52 default-ghostscript -> /usr/share/fonts/default/ghostscript
                lrwxrwxrwx. 1 root root 30 May 4 17:52 fonts-default -> /usr/share/fonts/default/Type1
                lrwxrwxrwx. 1 root root 27 May 4 17:51 liberation-fonts -> /usr/share/fonts/liberation
                lrwxrwxrwx. 1 root root 27 Sep 15 17:10 xorg-x11-fonts-100dpi:unscaled:pri=30 -> /usr/share/X11/fonts/100dpi
                lrwxrwxrwx. 1 root root 26 Sep 15 17:10 xorg-x11-fonts-75dpi:unscaled:pri=20 -> /usr/share/X11/fonts/75dpi
                lrwxrwxrwx. 1 root root 26 May 4 17:52 xorg-x11-fonts-Type1 -> /usr/share/X11/fonts/Type1
                # 竟然会自动的将该字体加入到 fontpath.d 当中!太好了! ^_^# 
              
2. 建立该字体的字体缓存数据,并检查是否真的取用了:
                [root@study ~]# fc-cache -v | grep ukai
                /usr/share/fonts/cjkuni-ukai: skipping, existing cache is valid: 4 fonts, 0 dirs
                [root@study ~]# fc-list | grep ukai
                /usr/share/fonts/cjkuni-ukai/ukai.ttc: AR PL UKai TW:style=Book
                /usr/share/fonts/cjkuni-ukai/ukai.ttc: AR PL UKai HK:style=Book
                /usr/share/fonts/cjkuni-ukai/ukai.ttc: AR PL UKai CN:style=Book
                /usr/share/fonts/cjkuni-ukai/ukai.ttc: AR PL UKai TW MBE:style=Book
              
3. 重新启动Xorg,或者是强制重新进入graphical.target
                [root@study ~]# systemctl isolate multi-user.target; systemctl isolate graphical.target
              
现在可以在图形界面下,通过应用程序 --> 公用程序 --> 字体检视程序,找到一个名为AR PL UKai CN, Book字样的字体,表示该字体已经可以被使用了。 让窗口管理器可以使用额外的字体
如果想要使用额外的字体的话,你可以自行取得某些字体来处理的。 initroot这边从 Windows微软正黑体、Times new Romans两种字体加上粗、斜体等共六个文件来处理字体的安装~ 那就来看看如何增加字体吧!(假设上述的字体文件是放置在 /root/font 中) 1. 将字体文件放置到系统设置目录:
               [root@study ~]# cd /usr/share/fonts/
               [root@study ~]# mkdir windows
               [root@study ~]# cp /root/font/*.ttf /usr/share/fonts/windows/
              
2. 使用fc-cache将上述的文件加入字体的支持中:
                [root@study ~]# fc-cache -f -v
                -v 仅是列出目前的字体数据, -f 则是强制重新建立字体快取!
                ....(前面省略)....
                /usr/share/fonts/windows: caching, new cache contents: 6 fonts, 0 dirs
                ....(后面省略)....
              
3. 通过fc-list 列出已经被使用的文件:
                [root@study ~]# fc-list : file | grep window
                被缓存的字体文件:
                /usr/share/fonts/windows/timesbi.ttf:
                /usr/share/fonts/windows/timesi.ttf:
                /usr/share/fonts/windows/msjh.ttf:
                /usr/share/fonts/windows/times.ttf:
                /usr/share/fonts/windows/msjhbd.ttf:
                /usr/share/fonts/windows/timesbd.ttf:
              
在字体查看器里面就会发现有多了Microsoft JhengHei, Times New Roman等等的字体可以用!

显示器参数微调

回到顶部

屏幕分辨率与显示适配器相关性不高,与显示器的刷新频率有关!
刷新频率指的是在一段时间内屏幕重新绘制画面的速度。例如60Hz的刷新频率指的是每秒钟画面更新60次。 要调整显示器的刷新频率,得先找到显示器的使用说明书,查询最高的刷新频率后,接下来选择你想要的分辨率, 通过gtf命令调整:基本上,现在Linux distribution 的 X server 大多使用自行侦测方式来处理这些设置, 因此, 除非你的屏幕特别新或者是特别怪,否则应该不太需要用到gtf功能!
1. 先来测试一下你目前的屏幕搭配显卡所能够处理的分辨率与刷新频率 (须在 X 环境下)

                [root@study ~]# xrandr
                Screen 0: minimum 320 x 200, current 1440 x 900, maximum 8192 x 8192
                Virtual-0 connected primary 1440x900+0+0 0mm x 0mm
                1024x768 59.9 +
                1920x1200 59.9
                1920x1080 60.0
                1600x1200 59.9
                1680x1050 60.0
                1400x1050 60.0
                1280x1024 59.9
                1440x900 59.9*
                1280x960 59.9
                1280x854 59.9
                1280x800 59.8
                1280x720 59.9
                1152x768 59.8
                800x600 59.9
                848x480 59.7
                720x480 59.7
                640x480 59.4
              
上面显示最高分辨率大概是1920x1200 ,目前分辨率为1440x900(*)
使用下面的命令调整分辨率1280*800:
                [root@study ~]# xrandr -s 1280x800
              
2. 若想强制X server更改屏幕分辨率与刷新频率,需要修改xorg.conf配置文件。先来侦测:
                [root@study ~]# gtf 水平像素 垂直像素 刷新频率 [-xv]
                选项与参数:
                水平像素:就是分辨率的 X 轴
                垂直像素:就是分辨率的 Y 轴
                刷新频率:与显示器有关,一般可以选择 60, 75, 80, 85 等频率
                -x :使用 Xorg 配置文件的模式输出,这是默认值
                -v :显示侦测的过程
              
1. 使用 1024x768 的分辨率,75 Hz 的刷新频率来取得显示器内容
                [root@study ~]# 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.d/*.conf文件中的Monitor项:
                [root@study ~]# vim /etc/X11/xorg.conf.d/00-initroot.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
              
重新启动X ,这样就能够选择新的分辨率了!
两个方法重新启动X:
一个是systemctl isolate multi-user.target; systemctl isolate graphical.target 从文本模式与图形模式的执行等级去切换; 如果原本就是graphical.target模式下,那么在X的画面中按下 [alt] + [crtl] + [backspace] 三个组合按键, 就能够重新启动X 窗口!

NVidia显示适配器(显卡)驱动程序安装

回到顶部

有时想要使用显卡的3D加速功能,却发现X提供的默认驱动程序并不支持!此时安装官网提供的驱动程序即可! 目前主流的显卡厂商有Nvidia,AMD (ATI)和Intel这三家, 下面简单介绍这三家显卡驱动程序的安装
安装之前先使用 yum 安装Development Tools 以及 kernel-devel。

Xorg已经针对NVidia显卡驱动程序提供了"nouveau"模块,不过这个模块无法提供额外的功能。 想要使用新的显卡功能,就得要安装NVidia提供给Linux的驱动程序。
去NVidia官网下载和显卡型号相匹配的驱动程序!
通过命令lspci查询显卡的型号:

                [root@study ~]# lspci | grep -Ei '(vga|display)'
                00:02.0 Display controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
                01:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 610] (rev a1)
              
可以看到主机中有内建 Intel 显卡和NVidia GeForece GT610 这两张卡!
屏幕接在NVidia显卡上!
到NVidia官网 (http://www.nvidia.com.tw)自行下载最新的驱动程序,也可以到下面的链接直接查阅Linux用的驱动程序:
http://www.nvidia.com.tw/object/unix_tw.html
请自行选择与你的系统相关的环境。下载文件名有点像: NVIDIA-Linux-x86_64-352.41.run,将文件放置在/root底下!
系统升级与取消 nouveau 模块的加载
建议先升级下系统, 然后安装所需要的编译环境,最后要将nouveau模块排除使用!
因为强迫系统不要使用 nouveau 这个驱动,这样才能够完整的让 nvidia 的驱动程序运作!
1. 系统升级并安装所需要的编译环境:
                [root@study ~]# yum update
                [root@study ~]# yum groupinstall "Development Tools"
                [root@study ~]# yum install kernel-devel kernel-headers
              
2. 禁止加载nouveau模块:
                [root@study ~]# vim /etc/modprobe.d/blacklist.conf
                这文件默认应该不存在
                blacklist nouveau
                options nouveau modeset=0
                [root@study ~]# vim /etc/default/grub
                GRUB_CMDLINE_LINUX="vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet rd.driver.blacklist=nouveau nouveau.modeset=0"
                在GRUB_CMDLINE_LINUX设置里面加上rd.driver.blacklist=nouveau nouveau.modeset=0
                [root@study ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
                [root@study ~]# reboot
                [root@study ~]# lsmod | grep nouveau
              
最后要没有出现任何模块才是对的!
要完成上述的步骤后才可执行下面的步骤,安装驱动程序:
                [root@study ~]# systemctl isolate multi-user.target
                [root@study ~]# sh NVIDIA-Linux-x86_64-352.41.run
              
接下来按照提示安装即可.安装时候可以选择让安装程序主动的去修改xorg.conf!。
安装结束后查阅/etc/X11/xorg.conf的内容,会发现Device的Driver设置为nvidia了. /usr/lib64/xorg/modules/drivers目录内会多出一个nvidia_drv.so驱动程序文件! 同时还提供了一个很有用的程序来帮助我们进行驱动程序升级.
                [root@study ~]# nvidia-installer --update
              
可以进行驱动程序的升级检查喔! 好啰,那你就赶紧试看看新的显示适配器芯片的功能吧。而如果有什么问题,可以查阅/var/log/nvidia* 开头的日志文件.

AMD (ATI)显示适配器(显卡)驱动程序安装

回到顶部

AMD的显卡(ATI)型号也很多,AMD的显卡有提供成为Open Source,有个ELrepo的网站http://elrepo.org主动提供AMD的显卡驱动,ELrepo也提供NVidia的驱动程序!
安装 ELrepo 的 yum 配置文件方式如下:

              [root@study ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
              [root@study ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
              [root@study ~]# yum clean all
              [root@study ~]# yum --enablerepo elrepo-testing search fglrx
              kmod-fglrx.x86_64 : fglrx kernel module(s)
              fglrx-x11-drv.x86_64 : AMD's proprietary driver for ATI graphic cards # 这就对了!
              fglrx-x11-drv-32bit.x86_64 : Compatibility 32-bit files for the 64-bit Proprietary AMD
              driverfglrx-x11-drv-devel.x86_64 : Development files for AMD OpenGL X11 display driver.
              [root@study ~]# yum --enablerepo elrepo-testing install fglrx-x11-drv
              
这样就安装好AMD的显示适配器驱动程序了.安装完毕后,会在/usr/lib64/xorg/modules/drivers/目录下出现fglrx_drv.so驱动程序文件!
与Nvidia相同, ATI也提供一支名为aticonfig的命令来设置xorg.conf,可以直接输入aticonfig -v 来看看处理的方式即可。 重新启动 X 来看看新的驱动程序功能!

Intel显示适配器(显卡)驱动程序安装

回到顶部

Intel针对Linux的图形接口驱动程序已经开放成为Open source了,所以理论上你不需要重新安装 Intel 的显示适配器驱动程序的。 除非你想要使用比默认的更新的驱动程序,那么才需要重新安装底下的驱动程序。 Intel 对 Linux 的显示适配器驱动程序已经有独立的网站在运作, 如下的连结就是安装的说明网页:
https://01.org/zh/linuxgraphics
其实 Intel 的显示适配器用的地方非常的多喔!因为只要是整合型主板芯片组,用的是 Intel 的芯片时, 通常都整合了Intel的显示适配器啰~ 我使用的一组 cluster 用的就是 Intel 的芯片,所以啰~ 这家伙也是用的到的啦!
一般来说, Intel 的显示适配器都常常会使用 i910 等驱动程序,而不是这个较新的 intel 驱动程序! 你可以察看一下你系统是否有存在这些文件:

                [root@study ~]# locate libdrm
                /usr/lib64/libdrm.so.2
                /usr/lib64/libdrm.so.2.4.0
                /usr/lib64/libdrm_intel.so.1
                # 就是这几个怪东西!
                /usr/lib64/libdrm_intel.so.1.0.0
                .....(底下省略).....
                [root@study ~]# locate intel | grep xorg
                /usr/lib64/xorg/modules/drivers/intel_drv.so
              
# 上面这个就是 Intel 的显示适配器驱动程序了! 呼呼!我们的 CentOS 有提供新的 Intel 显示适配器驱动程序啦!所以不需要重新安装说~ 只是可 能需要修改 xorg.conf 这个配置文件的内容。基本上,要修改的地方有:
                [root@study ~]# vi /etc/X11/xorg.conf
                Section "Device"
                Identifier
                "Videocard0"Driver
                "intel"
                原本可能会是使用 i91x 喔
                EndSection
                Section "Module"
                ....(中间省略)....
                Load "glx"
                Load "dri"
                这两个很重要!务必要载入!
                ....(中间省略)....
                EndSection
                Section "DRI"
                Mode 0666
                
                这三行是新增的!让大家都能使用 DRI
                基本上,就是权限的设置
                EndSection
              
接下来就是重新启动X,使用新的Intel驱动程序!
CentOS 7的Xorg自动侦测程序其实还不错,在这次测试实体机器的系统上安装的图形界面时,几乎Xorg都可以正确的抓到驱动程序, 连双屏幕功能也都可以顺利的启用。所以除非必要,否则您应该不需要重新设置xorg.conf

总结

回到顶部

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 Server ,最终由 X server将结果通过他所管理的硬件绘制出来!
每个X client都不知道对方的存在,必须通过Window Manager管理各窗口的重迭、移动、最小化等工作,窗口管理器为特殊的X client.
Display Manager提供图形接口登录界面.
startx 可以侦测 X server / X client 的启动脚本,并呼叫 xinit 来分别执行;
X 可以启动多个,各个 X 显示的位置使用 -display 来处理,显示位置为 :0, :1... Xorg 是一个 X server ,配置文件位于/etc/X11/xorg.conf ,里面含有 Module, Files, Monitor, Device 等设定阶段。 目前较新的设置中, 会将额外的设置放置于 /etc/X11/xorg.conf.d/*.conf
在multi-user.target模式下,可以使用startx进入图形界面, 在graphical.target模式下,直接进入 tty1 即可使用 display manager 登入 X Window 系统。
利用 startx 可以在 multi-user.target 的环境下进入 X Window 系统。
整个 X 窗口系统的重点在启动 X server 并加载 X client ,而执行 X server/X client 呼叫的任务为 xinit , startx 只是一个较为亲和的脚本程序,可以搜寻系统上面的 X server / X client 设置值, 以提供 xinit 来执行而已。
利用root的身份执行X -version 或 Xorg -version查看X系统的版本.
X Server 主要负责屏幕的绘制,以及周边输入设备如鼠标、键盘等数据的收集,并回报给 X Client ; X Client 主要负责数据的运算,收到来自 X Server 的数据后,加以运算得到图形的数据,并回传给 X Server, 让 X server 自行绘制图形。 Window manager 是一个比较特殊的 X Client ,他可以管理更多控制元素, 最重要的地方还是在于窗口的大小、重迭、移动等等的功能。

如何重新启动 X
o 最简单在 X Window System 下,直接按下 [alt]+[ctrl]+[backspace] 即可
o 也可以 systemctl isolate multi-usertarget 再systemctl isolate graphical.target
o 也可以关闭 X 后,再 startx 启动等等。
当我们要启动 X 时,必须要启动 XClient 软件端。这个 ~/.xinitrc 即是在客制化自己的 X Client , 你可以在这个文件内输 入你自己的 X Client。 若无此文件,则默认以 /etc/X11/xinit/xinitrc 替代。 我在 CentOS 的系统中,默认使用 GNOME 登入 X 。
但我想要改以 KDE 登入,该怎么办? o 首先你必须要已经安装KDE 环境 (参考前一章的 yum grouplist 功能), o 然后可以藉由修改 /etc/sysconfig/desktop 内的设置值即可。
o 但如果你不是 root无法修订该文件时,亦可以在自己的家目录参考 /etc/X11/xinit/xinitrc 的内容自行制作 ~/.xinitrc 文件来修改!
X Server 的 port 默认开放在? 目前默认并不会启动 TCP 端口号。不过如果经过设置,则 X port 默认开放在 port 6000 ,而且称此一显示为 :0 Linux主机可以有两个以上的X!第一个X通常在tty1,第二个在tty2以后,依序类推。第几个是以启动的顺序来定义,并非 :0 , :1 的意思~ X Server 的配置文件是 xorg.conf,在该文件中, Section Files 干嘛用的? 相当重要!是设置显示字体用的。而字体一般放置目录在 /usr/share/X11/fonts/ 及 /usr/share/fonts/ 当中。
键盘所输入的字母老是打不出我所需要的单字,可能原因是键盘符号对应表跑掉了。
可以修改 xorg.conf 文件内, 关于 Keyboard 的 Option XkbLayout项目,将他改为 us 即可! 当我的系统内有安装 GNOME 及 KDE 两个 X Widnow Manager ,我原本是以 KDE 为默认的 WM, 若 想改为 GNOME 时,应该如何修改?
修改 /etc/sysconfig/desktop 内部,成为 GNOME 即可!

initroot编辑整理,转载请注明www.initroot.com