Linux上面的图形用户界面模式称为X Window System,简称为X或X11。X Window System分为X Server 与X Client(C/S架构),是可以跨网络、跨平台的

什么是 X Window System

UNIX-like 操作系统不是只能进行服务器的架设而已,在美化、排版、制图、多媒体应用上也是有其需要的,这些需求都需要用到图形用户接口(Graphical User Interface)GUI。

X Window System 的发展简史

X是由UNIX的System V 系统上面开发而来,初衷是希望能够通过网络进行图形用户界面的读写因此发展出许的X通讯协议,这个窗口接口不要与硬件有强烈的相关性,因为与硬件的相关性高的话那就是一个操作系统了
早期Linux使用的X Window System 的主要内核都是由XFree86计划所提供的,所以常常将X与XFree86画上等号
CentOS 7.X 使用的X就是Xorg提供的X11R7.X,包括Mac OS X v10.3 也曾利用过这个架构来设计他们的窗口

总结:

  • 在UNIX-like上面的图形用户接口(GUI)被称为X或X11
  • X11是一个软件而不是一个操作系统
  • X11是利用网络架构来进行图形用户接口的执行与绘制
  • 较著名的X版本为X11R6这一版,目前大部分的X都是这一版本演化而来(包括X11R7)
  • 现在大部分的Linux发行版使用的X都是由Xorg基金会所提供的X11
  • X11使用的是MIT授权,类似GPL的开放源代码授权的方式

主要组件:X Server/X Client/Window Manager/Display Manager

X基本上分成X Server 和X Client 两个组件,X Server管理硬件,X Client是应用程序。X Client应用程序会将所想要呈现的图形告知X Server,最终由X Server来将结果通过它所管理的硬件绘制出来

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

  • X Server管理的硬件设备与输入/输出有关:包括键盘、鼠标、手写板、显示器、屏幕分辨率与色彩深度、显卡(包含驱动程序)、与显示的字体等
  • X Window System 有自己的配置文件,Linux的设置与X Server的设置不一定要相同。
  • 总之 X Server的主要功能就是管理主机上面的显示硬件与驱动程序

X Server的目的在于管理客户端的硬件设备
每台客户端主机都需要安装X Server,而服务器端则是提供X Client软件,以提供客户端绘图所需要的数据,X Server会将接口设备的这些操作行为告知X Client,让X Client去完成

X Client:负责X Server要求的事件之处理

X Client会根据输入设备的操作来进行处理,最后X Client会得到【嗯,这个输入设备的操作会产生某个图形】,然后将这个图形的显示数据返回给X Server,X Server再根据X Client传来的绘图数据将它显示在自己的屏幕上。
X Client 最重要的工作即处理来自X Server 的操作,将该操作处理成为绘图数据,再将这些绘图数据传回给X Server,每个X Client并不知道其他X Client的存在,且不需要知道X Server的硬件设备与操作系统,非常先进与优秀,Linux主机端不在乎客户端用的是什么操作系统

X Window Manager:特殊的X Client,负责管理所有的 X Client软件

X Client 本身不知道它在X Server当中的位置、大小以及其他相关信息,为了解决这个问题,因此就有Window Manager(WM,窗口管理器)的产生。窗口管理器也是X Client,只是它主要在负责全部X Client的管理,还包括某些特殊的功能:

  • 提供许多的控制元素,包括任务栏、后台桌面的设置等
  • 管理虚拟桌面(virtual desktop)
  • 提供窗口控制参数,包括窗口的大小、窗口的重叠显示、窗口的移动、窗口的最小化等
    KDE、GNOME、Xfce还有普通的twm等都是一些窗口管理器的项目

Display Manager:提供登录需求

  • 在本机的命令行模式下可输入 startx 来启动X
  • 但如果是graphical.target 环境使用的图形用户界面模式登陆的是Display Manager,例如XShell
    image.png

Display Manager最大的任务就是提供登录环境,并且加载用户选择的Window Maager与语系等数据

几乎所有的大型窗口管理器项目计划都会提供Display Manager,在CentOS上面我们主要利用的是GNOME的GNOME Display Manager(gdm)这个程序来提供tty1的图形用户界面模式登录。登录后取得的Window Manager,则可以在gdm上面进行选择。所以并非gdm只能提供GNOME的登录而已

X Window System 的启动流程

要启动X Window System 必须要先启动X Server,再加载X Client,基本上都是使用窗口管理器来管理窗口界面的。

  • 获取窗口系统:
    1.进入本机命令行模式,输入startx启动
    2.通过Display Mangaer(如果有启动graphical.target)提供的登陆界面,输入账号密码来登陆与启动X窗口

X的启动流程如下:

在命令行模式启动X:通过startx 命令

  • X窗口可以根据不同的用户而有不同的设置。
  • startx 为一个shell脚本,会主动地帮忙用户建立起他们的X所需要引用的配置文件而已。
  • startx最重要的任务就是找出用户或是系统默认的X Server与X Client的配置文件
  • 也可以使用startx 外界参数来替换配置文件的内容
    startx [X Client 参数] -- [X Server 参数]
  • 启动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下面的终端软件)
    image.png

由startx调用执行的xinit

当startx找到需要的设置值后,就调用xinit实际启动X
xinit [client option] -- [server or display option]
因为需要执行的xinit参数很多且由startx可以去处理查找,故用户不必直接执行xinit方法手动输入
系统默认的X Client与X Server的内如下:
xinit xterm -geometry +1+1 -n login -display :0 -- X :0

最重要的是startx找到的那些参数即/etc/X11/xinit/目录下的xinitrc与xserverrc两个文件的内容(xserverrc默认不存在)

启动X Server的文件:xserverrc

默认没有该文件,则直接执行/usr/bin/X 这个最原始的X Server 执行文件,此时会读取/etc/X1/xorg.conf配置文件
Linux可以同时启动多个X,第一个X界面会在-display :0 即tty2,第二个X则是-display :1即tty3,后续还可以有其他X存在

启动X Client的文件:xinitrc

xinitrc会将其他文件参数引进来,如/etc/X11/xinit/xinitrc-common 与/etc/X11/xinit/Xclients 还有/etc/sysconfig/desktop。最终加载KDE或GNOME,如果二者都没有就使用twm。可通过修改/etc/sysconfig/desktop 内的DESKTOP=GNOME或DESKTOP=KDE来决定默认使用哪个窗口管理器

X启动的端口

CentOS 由于考虑X窗口是在本机上面运行,从而将端口改为了socket文件(socket),因此无法观察到X启动的端口。但X Server启动的端口应为6000与X Client进行沟通,如果有多个X存在,则会有6001、6002等端口

X启动流程测试

我是否需要启用 X Window System

X server 配置文件解析与设置

显卡驱动程序安装范例


这个家伙很懒,啥也没有留下😋