什么是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 &