1. GUI图形界面是什么
GUI是graphical user interface的缩写,图形用户接口,实现了基本的WIMP(windows,icons,menus,pointer)。一个GUI的基本组成:display server实现windowing system。参考下图:
1.1 windowing system
windowing system:管理不同的display screens的软件。是一种GUI的实现。
下表是常见的windowing system,我主要感兴趣的是Wayland和X Window System。
类unix系统 | Windows NT家族系统 | Web | 其他 |
---|---|---|---|
Quartz Compositor(Mac OS X) | DWM(Desktop Window Manager)(微软Vista及之后系统用的视窗系统) | Dojo | MiniGUI |
Wayland | ReactOS Explorer | ExtJS | DM |
X Window System | Classic Shell | … | VWS |
W Window Ssytem | Talisman Desktop | … | |
… | … |
1.1.1 display server
windowing system中主要的组成是display server(或者window server,compositor)。任何用来在窗口中显示GUI界面的软件应用,都是该display server的一个client客户端。
display server与client之间的交互协议叫做display server communications protocol。
display server |
---|
X.Org server(主要是类unix) |
Wayland(主要是类unix) |
Mir(主要是类unix) |
SurfaceFlinger(谷歌安卓) |
Quartz Compositor(苹果MacOS) |
Desktop Window Manager(微软) |
1.1.2 display server communications protocols
X11
X.Org server跑在类unix系统kernel之上,用于接收用户数据并处理然后传给其clients,也用于接收clients传来的数据,进行处理影响合成compositing,并将数据传给kernel模块三者之一:DRM,gem,KMS drvier。它是通过将数据写入framebuffer,然后framebuffer中的数据通过GLX传给相关的screen显示。
- GLX:opengl extension to the X window system。是OpenGL与X Window System之间的连接桥梁。
X.Org是一种X Window System实现,但其实现还依赖于另一个软件compositing window manager来做影响合成,比如Mutter和KWin,实现X11客户端库可以依赖于Xlib和XCB。
下图是X.Org server与X clients(比如Amarok)通过X11协议来通信交互。
通常,X、X11、X Window System的说法可以混为一谈,都代表一种windowing system,那就是X11系统,而X.Org是X Window System中display server的一种实现,通常也叫它X Server。
GLX
GLX(OpenGL Extension to the X Window System)是指OpenGL在X Window System上的扩展,它允许OpenGL程序与X Window System进行交互,并在X Window System中显示图形。GLX最初是由SGI(Silicon Graphics International)开发的,后来成为了OpenGL的标准扩展之一。目前,GLX已经成为了Linux和Unix系统中OpenGL标准的一部分,提供了一种可靠且高效的图形编程方式。
GLX最初的实现是GLX API,叫GLcore,是在X系统中加载了一个mesa渲染器来渲染opengl命令。
随着DRI(direct rendering infrastructure)发展,可以通过direct render方式来加速opengl命令。后来又有DRI2(通过KMS,kernel mode-setting内核模块)替换了DRI。再后来,linux kernel3.12出现render node直接渲染。
下图是通过DRM(direct rendering manager)直接访问到显卡来做处理。
早期通过DRM API,是通过DRM设备/dev/dri/cardX来处理的,后来kernel中合入了render node,/dev/dri/renderDX。
linux kernel3.12开始render node被合入。wayland是通过EGL来direct rendering。
wayland
wayland也是一种display server。同X11类似,wayland也需要依赖wayland compositors,比如Weston、mutter、KWin等。
Wayland compositors与Wayland Clients之间交互协议是Wayland display server protocol。该协议定义client可以通过EGL rendering API来直接访问framebuffer。
1.2 window manager
什么是window manager?GUI中,在window system中,负责控制视窗位置、外表等的系统软件。大部分window manager具备提供desktop环境的能力。
Gnome、Xfce、KDE都是window manager,不过它们都是工作在X display server上,所以又都是X window manager。
window manager | 描述 | 实例 |
---|---|---|
X window manager | 使用X window system | GNOME、KDE、Xfce |
Microsoft windoes | 微软从windows2.0开始就提供了集成window manger | |
ChromeOS | Ash |
1.2.1 gnome/kde desktops
GNOME,KDE和Xfce desktops是Linux环境下的desktop。display server比如X11只提供基本的绘画能力,然后client通过Xlib和XCB等库来作用X11,具备了不同的视觉能力。
如何开发一个GUI?,通过widget toolkits,比如GTK和Qt。
开发套件 | 窗口管理器 |
---|---|
GTK | GNOME,Xfce |
Qt | KDE |
1.2.2 display manager
不同的desktop可能使用不同的display manager(更准确的应该叫做graphical login manager,图形登录系统)。
window manager | display manager |
---|---|
GNOME | gdm3 |
Xfce | lightdm |
KDE | kdm,sddm |
LXDE | LXDM |
display manager提供在X server上(或远程)启动一个session会话的功能。
下图示意了基本的框架理解
【参考文档】
-
https://en.wikipedia.org/wiki/Windowing_system#List_of_windowing_systems
-
https://unix.stackexchange.com/questions/345344/difference-between-xorg-and-gnome-kde-xfce