桌面环境 DE
桌面环境(Desktop Environment):打包好的一套图形界面,包含窗口管理器、面板、启动器、设置面板、文件管理器、终端,外加一堆后台服务。
桌面环境的价值在"集成",不自己东拼西凑。
主流工具包
| 工具包 | 使用的 DE | 备注 |
|---|---|---|
| GTK (GIMP Toolkit) | GNOME, XFCE, Cinnamon, MATE, Budgie | GNOME 主导开发,C 写成 |
| Qt | KDE Plasma, LXQt, Deepin DE | Widgets 和 QML 均有 |
常见桌面环境一览
| 桌面环境 | 风格 | 资源占用 | 适合 |
|---|---|---|---|
| GNOME | 现代简约,活动热角设计 | 中高 | 喜欢 macOS 式工作流、不想折腾 |
| KDE Plasma | 万物皆可调,设置多 | 中 | 折腾玩家、从 Windows 迁移过来 |
| XFCE | 传统 Windows 式布局,朴实无华 | 低 | 老机器、简单够用 |
| LXQt | 比 XFCE 还轻,Qt 写成 | 极低 | 超低配设备、嵌入式环境 |
| Cinnamon | Mint 的默认 DE,经典布局 | 中 | 从 Windows 迁移、不想学新交互的人 |
| MATE | GNOME 2 的精神续作 | 低 | 怀念 GNOME 2 的老登 |
| Budgie | 美观轻量,Soulus 项目出品 | 中低 | 想要好看又不想用 GNOME 的人 |
大型 DE(GNOME、KDE)已经切到 Wayland 默认了,中型 DE(XFCE、Cinnamon)正在路上,小型/复古 DE(MATE、LXQt)继续 X11。
发行版默认 DE
| 发行版 | 默认桌面环境 |
|---|---|
| Debian | GNOME(安装时可换) |
| Ubuntu | GNOME(早期是 Unity,17.10 切回 GNOME) |
| Fedora | GNOME(Workstation 版) |
| RHEL / CentOS Stream | GNOME |
| XUbuntu | XFCE |
| KUbuntu | KDE Plasma |
| Linux Mint | Cinnamon |
| openSUSE | KDE Plasma(也可选 GNOME) |
| Manjaro | 不指定,GNOME/KDE/XFCE 三版同发 |
窗口管理器 WM
只管一件事:窗口怎么摆、怎么动、怎么切。
浮动式(Stacking / Floating)
窗口可以拖来拖去、互相叠压,Windows 和 Mac 的方式
| WM | 所属 DE | 备注 |
|---|---|---|
| Mutter | GNOME | 也是 Wayland 合成器 |
| KWin | KDE Plasma | 也是 Wayland 合成器,内置 flex 般的效果引擎 |
| Xfwm | XFCE | 朴实,没有合成功能(合成交给独立的 compton/picom) |
| Muffin | Cinnamon | Mutter 分支 |
| Marco | MATE | 从 GNOME 2 的 Metacity 分支出来 |
| Openbox | 无(独立 WM) | 极简,LXDE 时期用过,现在几乎只做老爷机部署 |
平铺式(Tiling)
窗口自动排布、不重叠,纯键盘操作,手不用离开键盘。折腾玩家首选。
| WM | 平台 | 备注 |
|---|---|---|
| i3 / i3-gaps | X11 | 手动平铺,配置文件即一切 |
| Sway | Wayland | i3 的 Wayland 复刻,配置兼容,可以直接迁 |
| bspwm | X11 | 二叉空间分割(BSP),纯 C |
| dwm | X11 | suckless 出品,源码即配置,2000 行 C 搞定 |
| awesome | X11 | Lua 配置,带轻量 DE 组件 |
| Qtile | X11 / Wayland | Python 配置,可扩展性好 |
| Hyprland | Wayland | 动态平铺 + 丝滑动画,目前最火 |
| River | Wayland | Zig 写成,动态布局,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 的,效果丰富 |
| Sway | wlroots | i3 兼容 Wayland |
| Hyprland | wlroots | 动画优雅,社区活跃 |
| River | wlroots | Zig 写成 |
| wlroots | — | 库,不是合成器,但大部分独立合成器都用它 |
wlroots 可以说是 Wayland 生态的半边天——它把 DRM、libinput、渲染后端全封装好了,让写一个新的合成器不再是造轮马拉松。
**NVIDIA **:Wayland + NVIDIA 曾经是灾难级体验(黑屏、闪退、随机 bug)。2024 年后改善不少。
Display Manager(登录管理器)
管登录界面——选用户、输密码、选桌面环境/WM,登进去后它自己退场。
| DM | 常用 DE | 备注 |
|---|---|---|
| GDM | GNOME | GNOME 亲儿子,Wayland 兼容好,但配置最不灵活 |
| SDDM | KDE Plasma | Qt 写成,可定制性高,KDE 默认 |
| LightDM | XFCE / MATE / i3 党 | 轻量,前端和后台分离,随便换 Greeter |
| Ly | 极简党 | TUI 界面,C 写成,连鼠标都不用 |
启动链路:
systemd → DM → (验证登录) → 启动 DE / WMDM 本身就是一个 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 这样的设备名 |
| 用户空间服务(旧) | PulseAudio | 2004 年诞生,取代了 ALSA 用户态混音。支持网络音频、每个应用独立音量。问题是延迟偏高,专业音频用不了 |
| 用户空间服务(专业) | JACK (JACK2) | 专为低延迟设计,实时内核 + 固定 buffer。音乐人、录音棚必备。但桌面日常用体验不如 PulseAudio |
| 用户空间服务(现代) | PipeWire | 2020 年出现,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 下由合成器模拟
- CLIPBOARD:
Ctrl+C/Ctrl+V,跟 Windows/macOS 体验一致
wl-clipboard(wl-copy / wl-paste)是 Wayland 下的命令行剪切板工具,X11 时代用 xclip。
一个常见坑:应用关了,剪切板内容就没了。可以用 cliphist、copyq 这类工具做持久化管理。