Skip to content

桌面环境 DE

桌面环境(Desktop Environment):打包好的一套图形界面,包含窗口管理器、面板、启动器、设置面板、文件管理器、终端,外加一堆后台服务。

桌面环境的价值在"集成",不自己东拼西凑。

主流工具包

工具包使用的 DE备注
GTK (GIMP Toolkit)GNOME, XFCE, Cinnamon, MATE, BudgieGNOME 主导开发,C 写成
QtKDE Plasma, LXQt, Deepin DEWidgets 和 QML 均有

常见桌面环境一览

桌面环境风格资源占用适合
GNOME现代简约,活动热角设计中高喜欢 macOS 式工作流、不想折腾
KDE Plasma万物皆可调,设置多折腾玩家、从 Windows 迁移过来
XFCE传统 Windows 式布局,朴实无华老机器、简单够用
LXQt比 XFCE 还轻,Qt 写成极低超低配设备、嵌入式环境
CinnamonMint 的默认 DE,经典布局从 Windows 迁移、不想学新交互的人
MATEGNOME 2 的精神续作怀念 GNOME 2 的老登
Budgie美观轻量,Soulus 项目出品中低想要好看又不想用 GNOME 的人

大型 DE(GNOME、KDE)已经切到 Wayland 默认了,中型 DE(XFCE、Cinnamon)正在路上,小型/复古 DE(MATE、LXQt)继续 X11。

发行版默认 DE

发行版默认桌面环境
DebianGNOME(安装时可换)
UbuntuGNOME(早期是 Unity,17.10 切回 GNOME)
FedoraGNOME(Workstation 版)
RHEL / CentOS StreamGNOME
XUbuntuXFCE
KUbuntuKDE Plasma
Linux MintCinnamon
openSUSEKDE Plasma(也可选 GNOME)
Manjaro不指定,GNOME/KDE/XFCE 三版同发

窗口管理器 WM

只管一件事:窗口怎么摆、怎么动、怎么切。

浮动式(Stacking / Floating)

窗口可以拖来拖去、互相叠压,Windows 和 Mac 的方式

WM所属 DE备注
MutterGNOME也是 Wayland 合成器
KWinKDE Plasma也是 Wayland 合成器,内置 flex 般的效果引擎
XfwmXFCE朴实,没有合成功能(合成交给独立的 compton/picom)
MuffinCinnamonMutter 分支
MarcoMATE从 GNOME 2 的 Metacity 分支出来
Openbox无(独立 WM)极简,LXDE 时期用过,现在几乎只做老爷机部署

平铺式(Tiling)

窗口自动排布、不重叠,纯键盘操作,手不用离开键盘。折腾玩家首选。

WM平台备注
i3 / i3-gapsX11手动平铺,配置文件即一切
SwayWaylandi3 的 Wayland 复刻,配置兼容,可以直接迁
bspwmX11二叉空间分割(BSP),纯 C
dwmX11suckless 出品,源码即配置,2000 行 C 搞定
awesomeX11Lua 配置,带轻量 DE 组件
QtileX11 / WaylandPython 配置,可扩展性好
HyprlandWayland动态平铺 + 丝滑动画,目前最火
RiverWaylandZig 写成,动态布局,tag 式工作区

动态平铺(Hyprland、River)和手动平铺(i3、Sway)的区别:动态模式下,开新窗口自动按布局算法排好,不用手动指定分屏方向——省心很多。


显示服务器 / 显示协议

显示服务器(Display Server)就是中间商——接收键盘鼠标输入,给应用程序提供画图的接口,管着屏幕上的窗口对象。

X11 (X Window System, Xorg 实现)

老古董,从 1984 年活到现在。核心思想是"网络透明"——你可以把窗口渲染在一台机器、显示在另一台机器上。这个设计在当年很超前,现在成了包袱。

X11 从根上就是客户端 - 服务器模型,而且有两个维度的"分家":

维度一:C/S 分离——计算和显示可以在不同机器上

X Server 跑在插着键盘鼠标显示器的那台机器上,管硬件——往屏幕上画像素、从输入设备收事件。应用程序是 X Client,不直接碰硬件,通过 X 协议往 Server 发命令:"帮我在 (100, 200) 画一个窗口"。

Server 和 Client 可以在同一台机器(Unix domain socket),也可以跨网络(TCP 6000)。这就是当年吹得很响的"网络透明"——机房服务器跑应用,办公桌上的 X 终端只管显示。

维度二:角色分离——显示服务器、窗口管理器、合成器各是各的进程

                    屏幕 / 输入设备

                    ┌─────▼─────┐
                    │  X Server  │  ← 唯一直接操作硬件的进程
                    │  (Xorg)   │
                    └──┬──┬──┬──┘
        X 协议        │  │  │        X 协议
  ┌───────────────────┘  │  └───────────────────┐
  │                      │                      │
┌─▼──────┐   ┌───────────▼──┐   ┌─────────────▼──┐
│ 浏览器  │   │  窗口管理器   │   │   合成器       │
│X Client│   │  X Client    │   │  X Client      │
└────────┘   └──────────────┘   └────────────────┘
  我要画按钮     窗口最大化               加阴影、透明

关键点:WM 和合成器也是 X Client——它们跟浏览器一样,通过 X 协议跟 X Server 通信。WM 说"把这个窗口移到左边",X Server 去移。合成器说"给所有窗口加半透明阴影",X Server 去画。它们是旁路控制者,不是数据路径上的串行环节。

这种设计自由度极高——WM 可以随便换,合成器也可以单独关掉。但代价也明显:三个独立进程来回通信,一条绘制路径要中转好几次,延迟几乎没法避免。而且 X Server 拿着绝对控制权,一个客户端卡了可能拖慢整个桌面。

维度怎么分好处代价
C/S 分离X Server ↔ X Client可以远程显示,应用不需要硬件权限绘制路径长,来回通信开销大
角色分离Server / WM / Compositor 三个独立进程可以随便换 WM,自由度极高协同复杂,一个崩了全卡

X11 真正的问题是协议设计过时——它不理解双指滚动、不理解混色、不理解每个窗口独立渲染。所有现代特性都是补丁摞补丁,技术债比山高。

Wayland

2010 年前后开始搞,目标简单:砍掉中间商,让应用直接跟合成器谈。

应用程序 (Wayland Client)


Wayland Compositor(= 显示服务器 + WM + 合成器,三合一)


内核 DRM/KMS + 显卡驱动

屏幕

Wayland 把显示服务器、窗口管理器、合成器合为一体了。每个应用在自己的 buffer 上渲染,合成器只管拼在一起、处理输入事件。因为少了好几层中转,延迟更低,画面撕裂也天然避免了。

XWayland:一个兼容层,给那些还只会说 X11 协议的老应用用的。Electron 应用、Wine、各种单体 X 应用都靠它撑着。大多数情况下你感受不到它的存在,但偶尔会遇到缩放糊掉的问题(HiDPI 下的经典痛点)。

常见的 Wayland Compositor

Compositor基于备注
Mutter自研GNOME 的,功能完善
KWin自研KDE 的,效果丰富
Swaywlrootsi3 兼容 Wayland
Hyprlandwlroots动画优雅,社区活跃
RiverwlrootsZig 写成
wlroots库,不是合成器,但大部分独立合成器都用它

wlroots 可以说是 Wayland 生态的半边天——它把 DRM、libinput、渲染后端全封装好了,让写一个新的合成器不再是造轮马拉松。

**NVIDIA **:Wayland + NVIDIA 曾经是灾难级体验(黑屏、闪退、随机 bug)。2024 年后改善不少。


Display Manager(登录管理器)

管登录界面——选用户、输密码、选桌面环境/WM,登进去后它自己退场。

DM常用 DE备注
GDMGNOMEGNOME 亲儿子,Wayland 兼容好,但配置最不灵活
SDDMKDE PlasmaQt 写成,可定制性高,KDE 默认
LightDMXFCE / MATE / i3 党轻量,前端和后台分离,随便换 Greeter
Ly极简党TUI 界面,C 写成,连鼠标都不用

启动链路

systemd → DM → (验证登录) → 启动 DE / WM

DM 本身就是一个 systemd service。登录成功后,DM 会把会话交给 systemd --user,然后由用户级的 systemd 拉起桌面环境的各个组件。这也是为什么 loginctl 能管理登录会话——因为登录这件事情本身就是 systemd 在协调。


Hyprland

目前 Linux 桌面圈最火的 Wayland 合成器。核心卖点:

  • 动态平铺:窗口自动排布,不用你手动 $mod+shift+方向 调半天
  • 丝滑动画:窗口打开、关闭、切工作区全是渐变 + 弹性动画,不拖泥带水
  • 配置热加载:改一下 hyprland.conf,效果立刻生效,不用登出
  • 插件系统:社区生态起来了,hypridle、hyprlock、hyprpicker 周边越来越多

入门成本不低——自己装 polkit 代理、通知守护、状态栏(waybar/eww)、壁纸管理器等等。但组装好之后体验确实非常好,尤其是对习惯了 macOS 动画但又要键盘平铺工作流的人。


音频系统

Linux 音频是好几层叠起来的。从内核到用户空间,一路往上:

层级组件说明
内核层ALSA (Advanced Linux Sound Architecture)直接跟声卡驱动打交道,提供最底层的 PCM 设备接口。每个声卡有独立的 hw:0,0 这样的设备名
用户空间服务(旧)PulseAudio2004 年诞生,取代了 ALSA 用户态混音。支持网络音频、每个应用独立音量。问题是延迟偏高,专业音频用不了
用户空间服务(专业)JACK (JACK2)专为低延迟设计,实时内核 + 固定 buffer。音乐人、录音棚必备。但桌面日常用体验不如 PulseAudio
用户空间服务(现代)PipeWire2020 年出现,Fedora 34 起默认。同时兼容 PulseAudio 和 JACK 的 API,应用不用改就能用上低延迟。相当于一个服务通吃所有场景

现在的主线:ALSA(内核) → PipeWire(用户空间)→ 应用程序

PipeWire 最厉害的地方是它统一了音频和视频流——屏幕录制、摄像头、音频输入输出全走一条管线。尤其在 Wayland 时代,屏幕采集以前是各显神通(Portal、PipeWire、FFmpeg 各种 hack),现在 PipeWire 直接提供标准接口,录屏工具(OBS、wf-recorder)终于不用为兼容性头疼了。

历史脉络

ALSA dmix (混音凑合用)
  → PulseAudio (桌面音频大一统)
    → JACK (专业低延迟,跟 PA 各管各的,两者并存很痛苦)
      → PipeWire (一统天下,PA + JACK 双兼容)

外围常识

XDG 标准 (freedesktop.org)

桌面环境之间协作靠的是 freedesktop.org 定义的一票标准:

标准管什么
XDG Base Directory~/.config~/.local/share~/.cache 目录约定,不污染 ~
Desktop Entry (.desktop)启动器图标、菜单项、MIME 关联,/usr/share/applications/ 下那些 .desktop 文件
XDG Autostart自动启动项,/etc/xdg/autostart/~/.config/autostart/
MIME 类型文件类型关联——双击文件用什么应用打开
D-Bus进程间通信总线,桌面组件互相喊话就靠它
Portal (xdg-desktop-portal)应用向宿主请求文件选择、截图、录屏的标准化接口,Flatpak 和 Wayland 时代格外重要

没有这些标准的话,每个 DE 各搞一套,生态早就散了。freedesktop.org 的存在也许是 Linux 桌面没有彻底分裂的最大原因。

主题和外观

Linux 桌面的外观体系分为几层,每一层都可以独立换:

组件GTK 桌面Qt 桌面
控件主题GTK Theme (CSS 语法)Qt Style / Kvantum
图标~/.local/share/icons/同上,通用
窗口装饰WM 主题Aurorae / KWin 主题
光标XCursor / Hyprcursor同上

跨 GTK/Qt 的统一外观一般靠 qt5ct / qt6ct——让 Qt 应用去读 GTK 主题的颜色和字体。不算完美,但大多数情况下能看。

输入法

Linux 输入法框架经历了一条漫长的演化路:

框架状态备注
XIM已淘汰X11 时代的原始协议,不支持光标跟随
SCIM已淘汰早年尝试统一输入法,架构复杂到运维劝退
IBus主流GNOME 默认,Red Hat 主导,Wayland 支持尚可
Fcitx4仍在使用C++ 写成,WPS/钉钉等国产软件兼容性好
Fcitx5推荐Fcitx4 的重写版,Wayland 原生支持,配置可读性好很多

剪切板

Linux 剪切板其实有两套机制:

  • PRIMARY:选中即复制,中键粘贴。X11 原生特性,Wayland 下由合成器模拟
  • CLIPBOARDCtrl+C / Ctrl+V,跟 Windows/macOS 体验一致

wl-clipboardwl-copy / wl-paste)是 Wayland 下的命令行剪切板工具,X11 时代用 xclip

一个常见坑:应用关了,剪切板内容就没了。可以用 cliphistcopyq 这类工具做持久化管理。