X Window System介绍

什么是X Window System?

Unix Like系统下的GUI窗口系统。硬件之上的一个接口层,它是操作系统上的一个应用程序,并且包含了网络通讯协议。现在大部分的distribution使用的X都是由Xorg基金会提供的X11软件。因此查看常用的Linux系统可以看到X11和Xorg执行程序。

主要组件

X Window System是一套采用了网络架构的图形用户接口软件,主要包含X Server和X Client两个组件。X Server管理硬件,负责输入输出显示等。X Client负责接受X Server的输入和为X Server提供数据。需要注意的是不同于常见的客户端服务器结构,X Server是管理客户端的硬件,包括键盘鼠标等设备的输入并将图形绘制到屏幕上,一般运行于客户机上,X Client提供X Server需要显示的数据,它一般运行在客户机和远程服务器上。这点与一般web的CS架构不同。

1.X Server

它的主要任务就是管理客户端主机上的硬件设备,包括键盘、鼠标、显示器以及相应的驱动程序等。它将客户端输入设备的动作告知X Client,X Client则负责处理这些动作。

2.X Client

它将Server传来的输入设备行为产生数据并将数据回传给Server,X Server根据回传的数据将它显示在自己的屏幕上。X Client也称之为X Application。并且可以有多个X Client,他们相互之间是各自独立的,因此在显示时可能会产生重叠。X Client不需要知道X Server的硬件配置与操作系统,只要遵循网络协议即可。

3.X Window Manager

它是一种特殊的X Client,负责管理所有的X Client。上面提到的多个X Client在显示时可能会产生重叠,因此需要一个管理它们的工具,也就是X Window Manager了。负责管理桌面,窗口大小,重叠,窗口移动等参数。Linux下常见的有:

GNOME(GNU Network Object Model Environment)

KDE(K Desktop Environment)

twm(Tab Window Manager)

XFCE(XForms Common Environment)

以CentOS的GNOME为例,需要在CentOS主机上有Xorg的X Server核心,负责屏幕绘制,然后为了方便窗口管理,就需要GNOME这个window manager,为了自己使用更方便,在GNOME上加装更多窗口应用软件,如Firefox、输入法等,这样就构建出了X WIndow System。这些组件往往同时存在于一个Linux主机上。

4.Display Manager

操作系统的图形登录接口,它的任务就是提供登入环境,并且加载使用者选择的Window Manager与语系等数据。在CentOS上GNOME提供了GNOME Display Manager(gdm)的图形接口登陆。

X Window的启动流程

在启动X Window System时,必须先启动管理硬件与绘图的X Server,然后才加载X Client。基本上,目前都是使用WIndow Manager来管理窗口接口风格的。可以通过登入本机的文字接口后,输入startx来启动X窗口;也可以通过diplay manager提供的登入画面输入账号密码登入来启动X窗口。下面介绍从命令行入口启动X的流程。

startx

从命令行登入系统后,输入startx(shell脚本),它的任务就是找到用户或系统默认的X Server与X Client的配置文件,也可以在startx后接配置参数,格式如下

startx [X client参数] -- [X server参数] #如startx -- -depth 16

注意后面的参数以–隔开,前面是client的设定,后面是server的设定。

xinit

实际上startx会启动xinit,startx在帮它找出设置参数。

语法格式

xinit [client option] -- [server or display option]

系统默认的startx,等于

xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc

若xserverrc不存在,则是

xinit /etc/X11/xinit/xinitrc -- /usr/bin/X

单纯执行xinit,系统的默认X client和X server是这样的

xinit xterm -geometry +1+1 -n login -display :0 -- X :0

X server参数

startx后面的参数

若无,则~/.xserverrc

若无,则/etc/X11/xinit/xserverrc

若无,则单纯执行/usr/bin/X

X client参数

startx后面的参数

若无,则~/.xinitrc

若无,则/etc/X11/xinit/xinitrc

若无,则单纯执行xterm

最终会载入KDE或者GNOME,X Client中的两个指令搜寻,startkde和gnome-session,这是CentOS预设的两个主要的WIndow Manager。

概括来说,在命令行模式下启动X时,直接使用startx找到X Server与X Client的参数或配置文件,然后打开xinit启动X窗口系统。xinit先载入X Server找到预设的 :0这个现实接口,然后再加载X Client到这个X现实接口上。而X Client通常就是GNOME或者KDE。另外使用ctrl+alt+Fn可以切换不同终端画面。

X启动流程测试

在tty1中,启动第一个X在:1画面

X :1 &

返回tty1中

xterm -display :1 &

再次在tty1中

xterm -display :1 &
xclock -display :1 &
xeyes -display :1 &

在tty1中,启动Window Manager

twm -display :1 &