什么是 X Window System?
X Window即X Windows图形用户接口,是一种计算机软件系统和网络协议,提供了一个基础的图形用户界面(GUI)和丰富的输入设备能力联网计算机。其中软件编写使用广义的命令集,它创建了一个硬件抽象层,允许设备独立性和重用方案的任何计算机上实现。
主要组件: X Server/X Client/Window Manager/Display Manager
1.服务端( X Server):硬件管理、屏幕绘制、提供字体功能
Server是控制显示器和输入设备(键盘和鼠标)的软件。Server可以创建视窗,在视窗中绘图和文字,回应Client程序的“需求”(requests),但它不会自己完成,只有在Client程序提出需求后才完成动作。
每一套显示设备只对应惟一的Server,而Server一般由系统供应商提供,通常无法被用户修改。对操作系统而言,Server只是一个普通的用户程序而已,因此很容易更换新版本,甚至更换成第三方提供的原始程序。
2.客户端(X Client):负责 X Server 要求的『事件』之处理:
Client是使用系统视窗功能的一些应用程序。在X下的应用程序称做Client,原因是它是Server的客户,要求Server回应它的请求完成特定动作。Client无法直接影响视窗行为或显示效果,只能送一个请求(request)给Server,由Server来完成这些的请求。典型的请求通常是“在某个视窗中写‘Hello World’的字符串”,或者从A到B划一条直线。
Client的功能大致可分为两部分:1.向Server发出“需求”只是它的一部分功能;2.其他的功能是为用户执行程序而准备的。例如输入文字信息、作图、计算等等。通常,Client程序的这一部分是和X独立的,它对于X几乎不需要知道什么。比如,应用程序(特别是只大型的标准绘图软件、统计软件等)对许多输出设备具有输出的能力,而在X视窗中的显示只是Client程序许多输出中的一种,所以,Client程序中和X相关的部分只占整个程序中很小的一部分。
用户可以通过不同的途径使用Client程序:通过系统提供的程序使用;通过第三方的软件使用;或者用户为了某种特殊应用而自己编写的Client程序来使用。
3.X Window Manager:特殊的 X Client ,负责管理所有的 X client 软件
主要在负责全部 X client 的控管,还包括提供某些特殊的功能,例如:
4.Display Manager:提供登陆需求
X Window的启动流程
1).通过startx命令,读取用户或系统默认的X Server和X Client的配置文件
startx 是一个 shell script,找出使用者或者是系统默认的 X server 与 X client 的配置文件,而使用者也能够使用 startx 外接参数来取代配置档的内容。这个意思是说:startx 可以直接启动,也能够外接参数,例如底下格式的启动方式:
[root@www ~]# startx [X client 参数] -- [X server 参数] # 范例:以色彩深度为 16 bit 启动 X [root@www ~]# startx -- -depth 16
启动 X 的是 xinit 这支程序, startx 仅是在找出配置值!那么 startx 找到的配置值可用顺序为何呢?基本上是这样的:
2).由startx调用执行的xinit,启动X Server和加载X Client
当 startx 找到需要的配置值后,就呼叫 xinit 实际启动 X 的。用法是:
[root@www ~]# xinit [client option] -- [server or display option]
因为单纯只是运行 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 系统时,你就会发现 tty7 有画面了!只是.....很丑~因为还没启动 window manager !
启动X server文件:xserverrc
X 窗口最先需要启动的就是 X server 。 CentOS 5.x 根本就没有 /etc/X11/xinit/xserverrc和~/.xserverrc文件。所以只有运行原始 /usr/bin/X命令,该命令读取 /etc/X11/xorg.conf。其实 X 启动的时候还可以指定启动的界面。 :0 这个参数,这是啥? 事实上我们的 Linux 可以『同时启动多个 X』!第一个 X 的画面会在 :0 亦即是 tty7 ,第二个 X 则是 :1 亦即是 tty8 。 后续还可以有其他的 X 存在的。启动了 X server 后,接下来就是加载 X client 到这个 X server 上面。
启动X client文件:xinitrc
X Client从 ~/.xinitrc或以 /etc/X11/xinit/xinitrc 作为启动 X Client 的默认脚本。不过分析到最后,其实最终就是加载 KDE 或者是 GNOME 而已。你也可以发现最终在 XClient 文件当中会有两个命令的搜寻, 包括 startkde 与 gnome-session 这两个,这也是 CentOS 默认会提供的两个主要的 Window Manager。
X 启动的端口
考虑 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 , 那个主机名称通常可以不写,所以就成了 :0 即可。在默认的情况下,第一个启动的 X (不论是启动在第几个 port number) 是在 tty7 ,亦即按下 [ctrl]+[Alt]+[F7] 那个画面。 而起动的第二个 X (注意到了吧!可以有多个 X 同时启动在您的系统上呢) 则默认在 tty8 亦即 [ctrl]+[Alt]+[F8] 。