一、X Window
X Window是Linux上的窗口系统,由三个基本元素组成:X Server、X Client和二者通信的通道。
X Server
控制输出及输入设备并维护相关资源的程序,它接收输入设备的信息,并将其传给X Client,而将X Client传来的信息输出到屏幕上(在屏幕上构造方块(窗口),然后画出里面的元素 )。
每一套显示设备只对应唯一的X Server。由系统供应商提供,通常无法被用户修改 。只是一个普通的用户程序
自由软件编写者或厂商开发出了多种X Server:
- XFree86:一个免费的X Server软件,2004年弃用GPL协议。
- Xorg:XFree86的衍生版本。这是运行在大多数Linux系统上的X Server,Red Hat Enterprises Linux 5.0上也是如此。
- Accelerated X:由Accelerated X Product开发,在图形的加速显示上做了改进。
- X Server suSE:SuSE Team’s开发。
X Client
应用程序的核心部分,它与硬件无关,每个应用程序就是一个X Client。X Client可以是终端仿真器(Xterm)或图形界面程序,它不直接对显示器绘制或者操作图形,而是与X Server通信,由X Server控制显示。
X Client是X Window中的用户端程序,多种多样的X Client程序向X Server发出请求,由X Server运算得出结果,再显示到指定的地方去,如本地或者远程的一台显示器。
X Client无法直接影响视窗行为或显示效果,它们只能发送一个请求给X Server,由X Server来完成这些的请求
X通信通道
X Client与X Server之间传输信息的媒介 。
X通信通道的主体是xlib(X函数库),
X Client调用xlib,利用相应的通信功能向X Server发出请求
X Server完成任务之后,同样调用xlib把结果显示指点的设备上去
二、图形界面开发库
GTK、Qt是图形界面开发库(GUI Toolkit),用户可以使用这些开发库编写GUI应用。
这两套库又是基于X window server的,需要遵守x11协议。
- GDK: 对libx11的简单封装
- GLIB: 加强版的libc, 封装了很多实用函数
- libx11/libxcb: 最底层的图形界面库, QT/GTK使用该库实现; 开始只有libx11, 但是不太好用, libxcb试图替代libx11;
三、桌面环境
KDE、GNOME是桌面环境,我们用户真正看到的图形界面,窗口管理器,当然他们还提供了例如菜单,软件列表,鼠标,桌面等控件,所以称他们为桌面环境更合适。
KDE基于QT实现,GNOME基于GTK实现。
四、wayland
Wayland是一套display server(Wayland compositor)与client间的通信协议,而Weston是Wayland compositor的参考实现。其官网为http://wayland.freedesktop.org/。它们定位于在Linux上替换X图形系统。在X系统中,X Server作为中心服务,连接clien和硬件以及compositor。但时至今日,X Server就显得比较累赘了。Wayland在架构上去掉了这个中间层,将compositor作为display server,使client与compositor直接通信,从而在灵活性和性能等方面上能够更加出色。