0 前言
Linux桌面环境琳琳琅满目,本文对其进行梳理和总结。
1 桌面环境
    可进入系统设置查看所用桌面环境,也可通过“XDG_CURRENT_DESKTOP”环境变量确认所用桌面环境的类型:
| Linux发行版 | XDG_CURRENT_DESKTOP | DESKTOP_SESSION | |
| Ubuntu | 10.04 | 空 | gnome | 
| 12.04 | Unity | ubuntu-2d | |
| 14.04 | ubuntu | ||
| 16.04 | |||
| 18.04 | ubuntu:GNOME | ||
| 20.04 | |||
| 22.04 | |||
| Ubuntu MATE | 22.04 | mate | |
| Kubuntu | 22.04 | KDE | |
| openKylin | 0.9.5 | UKUI | |
| Ubuntu Kylin | 22.04 | ||
| Deepin Community | 20.8 | Deepin | |
| UOS home | 22 | ||
| UOS pro | 20 | ||
下表是各Linux桌面环境的技术栈对比情况:
| 桌面 | 开源 | 图形库 | 发行版 | 显示服务器(协议) | 显示管理器(登录) | 窗口管理器 | |
| KDE | Y | Qt | Kubuntu | 22.04 | x11 | sddm | KWin | 
| MATE | ? | ? | Ubuntu MATE | 22.04 | lightdm | Metacity(Marco) | |
| GNOME | Y | GTK | Ubuntu | 10.04 | gdm | ||
| 18.04 | gdm3 | GNOME Shell(Mutter) | |||||
| 20.04 | |||||||
| 22.04 | wayland | ||||||
| UNITY | ? | ? | 12.04 | x11 | lightdm | Metacity(Marco) | |
| 14.04 | Compiz | ||||||
| 16.04 | |||||||
| LXDE | ? | ? | Lubuntu | 18.04 | Openbox | ||
| XFCE | ? | ? | FreeBSD | ||||
| DDE | Y | Qt | Deepin | 20.8 | x11 | lightdm | KWin | 
| UOS home | 22 | ||||||
| UOS pro | 20 | ||||||
| UKUI | openKylin | 0.9.5 | wayland | ukui-kwin | |||
| UbuntuKylin | 22.04 | x11 | ukwm(源自Mutter) | ||||
通过可总结出以下几点:
- UOS的图形技术栈和Deepin是一样的;
- UOS/UbuntuKylin的显示服务器协议依然是x11,均未升级至最新的wayland,这点不如openKylin-0.9.5和Ubuntu-22.04。
2 显示服务器
2.1 协议
    可通过环境变量“XDG_SESSION_TYPE”来确认所用显示服务器协议类型:
| Linux发行版 | XDG_SESSION_TYPE | 说明 | |
| Ubuntu | 12.04 | 空 | |
| 14.04 | |||
| 16.04 | x11 | ||
| 17.10 | wayland | ||
| 18.04 | x11 | ||
| 20.04 | 默认x11,但可以安装并切换到Wayland | ||
| 21.04 | wayland | ||
| 22.04 | |||
| CentOS | 7 | 空 | |
| openKylin | 0.9.5 | wayland | |
| Lubuntu | 18.04 | x11 | |
| Kubuntu | 22.04 | ||
| UbuntuKylin | 22.04 | ||
| Deepin Community | 20.8 | ||
| UOS home | 22 | ||
| UOS pro | 20 | ||
可见,虽然说wayland是未来的趋势,但目前为止多数发行版用的依然是x11。
2.2 实现
开源实现主要有XFree86和X.Org,其中前者是先驱(1992年),后者由前者的4.4RC2版本衍生而来以规避许可证问题(2004年)[10],因此X.Org中存在大量XFree86源码。
3 显示管理器
“显示管理器”又称“登录管理器”),通常是一个在启动过程结束时代替默认shell显示的图形用户界面,与“窗口管理器”和“桌面环境”类似,“显示管理器”也有很多实现[4],下表是一些流行的显示管理器:[7]
| GDM | GNOME显示管理器GNOME Display Manager,GNOME桌面环境的首选 | 
| SDDM | 简单桌面显示管理器Simple Desktop Display Manager,KDE桌面环境的首选 | 
| lightDM | 由Ubuntu为Unity桌面环境开发,但被广泛应用到其它桌面环境 | 
各Linux发行版均可通过下面方法查看所用的显示管理:
(1)方法1:适用于X11
| cat/etc/X11/default-display-manager/usr/sbin/lightdm# [5] Ubuntu 14.04 22.04 | 
(2)方法2:适用于X11和Wayland
| cat/etc/systemd/system/display-manager.service # [6] | 
4 窗口管理器
- 标题栏:一般来说窗口管理器会对应用程序窗口加上标题栏,用以进行窗口的拖拽操作,其中还有最小化,最大化,关闭按钮,方便用户快捷的操作窗口。
- 边框:窗口管理器还会对窗口边框进行处理,设计边框颜色和阴影效果来区分激活与非激活窗口;
- 快捷键:大部分窗口管理器还提供了一些快捷键绑定,来实现窗口切换,工作区切换,显示桌面等功能;
不同发现版所用窗口管理器有所不同,可通过下面方法查看:
(1)方法1
可安装“wmctrl”工具,然后查看所用的窗口管理器:
sudo apt-get install -y wmctrl
export DISPLAY=:01 # ssh登录才需设置这个
wmctrl -m          # [8]其结果中的“Name”字段表示所用窗口管理器类型,总结如下:
| Linux发行版 | Name | |
| Ubuntu | 14.04 | Compiz | 
| 20.04 | GNOME Shell | |
| 22.04 | ||
| Ubuntu Kylin | 22.04 | Ukwm | 
| Ubuntu MATE | 22.04 | Metacity(Marco) | 
| Kubuntu | 22.04 | KWin | 
| Deepin | 20.8 | |
| UOS home | 22 | |
| UOS pro | 20 | |
(2)方法2
Ubuntu12.04之前的版本均无法安装wmctrl,此时只能查看窗口管理器进程来确定所用的窗口管理器:
ps -ef | egrep -i "Metacity|Compiz"参考资料
[1]X,X11,Xorg,XServer,XClient,Xlib
[2]Implementation needs for Android/Wayland graphics buffer sharing
[3]窗口管理器Linux用哪个,如何确定哪个窗口管理器正在运行
[8]窗口管理器Linux用哪个,如何确定哪个窗口管理器正在运行
[9]X.Org Server
[10]XFree86(百度百科)
[11]UKUI 桌面环境之窗口管理器(UbuntuKylin官网)
