Linux 图形合成器 (Compositor)是负责接收应用程序窗口的图像、将它们合成为一帧最终画面、并输出到显示器的核心组件。在Wayland架构中,合成器直接兼任显示服务器 + 窗口管理器;在X11中则是独立的合成管理器。
简单说:** compositor = 合成器 **,就是负责把所有窗口 “拼在一起”、然后送到屏幕上显示的程序。在 Linux 图形栈里,它的地位非常关键,而且X11 和 Wayland 下的 compositor 完全不是一个东西。
你屏幕上同时有:
- 浏览器窗口
- 终端
- 状态栏
- 壁纸
这些窗口不是直接画在屏幕上的,而是:
- 每个窗口先画在自己的 ** 一块画布(帧缓冲 / 纹理)** 上
- compositor 把这些画布按位置叠起来
- 加上阴影、透明、圆角、动画
- 最终合成一整张画面送给显卡显示
这个 “拼图 + 美化 + 输出” 的人,就是compositor。
核心作用
- 离屏渲染:每个窗口先画到独立缓冲区(避免闪烁、撕裂)
- 画面合成:按层级、位置、透明度组合所有窗口
- 特效处理:阴影、模糊、圆角、动画、窗口变换
- 输出到硬件:通过DRM/KMS提交给显卡显示
- 输入转发:接收鼠标 / 键盘,转发给对应窗口(Wayland)
X11 里的 compositor(配角)
X11 结构:
应用 → X Server(管窗口、输入、绘图) ↓ compositor(额外附加的) ↓ 屏幕- 架构:Xorg 负责绘图与输入,合成器(如
picom)仅做后期合成 - 代表:
- picom(最主流,compton 后继)
- xcompmgr(极简)
- Compiz(老牌 3D 特效)
- 特点:额外进程、延迟较高、易撕裂
- X Server 才是老大,管一切
- Compositor 只是后来加上的美化层
- 负责:透明、阴影、窗口动画、防撕裂
- 典型:
- Compiz
- xfwm4 + compositor
- Mutter / KWin(同时当窗口管理器 + 合成器)
问题:
- 绕来绕去,结构冗余
- 容易撕裂、延迟高
Wayland 里的 compositor(主角,全能)
Wayland 架构下没有 X Server,compositor 直接上位当老大:
应用 ────────┐ 应用 ───┐ │ 应用 ───┼────┼──→ compositor → 屏幕 │ │ 输入设备 ─────┘- 架构:合成器 = 显示服务器 + 窗口管理器 + 合成器
- 客户端自己渲染(OpenGL/Vulkan)→ 直接交合成器
- 更低延迟、更少拷贝、更好 tearing 防护
- 代表:Mutter、KWin、Sway、Hyprland、Weston等
一个 compositor 同时干三件事:
- 显示服务器:和应用通信,接收画面
- 窗口管理器:管理窗口位置、最大化、最小化、切换
- 合成器:拼图、做特效、送显示
- 输入处理器:接管键盘鼠标触摸板,发给对应窗口
所以:Wayland compositor = X Server + Window Manager + Compositor
Wayland 合成器是三合一的单一进程:
- 显示服务器:管理显示器、GPU、输入设备(鼠标 / 键盘 / 触摸)。
- 窗口管理器:控制窗口位置、大小、全屏、最小化、切换。
- 合成器:将所有应用渲染好的画面(缓冲区)合成为一帧,直接送给显示器(KMS/DRM)。
工作流程:
- 应用(客户端)自己渲染画面到显存(EGL/Vulkan/GBM)。
- 应用把显存句柄(FD)发给合成器。
- 合成器按层级、位置、透明度合成所有窗口。
- 合成器通过KMS/DRM直接刷到屏幕(无额外拷贝)。
- 输入事件由合成器直接转发给对应窗口。
合成器类型
- 系统合成器(System Compositor)
- 开机启动、关机退出,接管虚拟终端(VT)。
- 管理多用户会话切换。
- 示例:
systemd-compositor、部分嵌入式实现。
- 会话合成器(Session Compositor)
- 用户登录后运行,提供桌面环境。
- 可直接跑在硬件上,或嵌套在系统合成器下。
- 示例:
Mutter(GNOME)、KWin(KDE)、Sway、Weston。
- 嵌套合成器(Nested Compositor)
- 在另一个合成器里再跑一个合成器(如 Weston 嵌套在 GNOME 下)。
- 用于开发、测试、容器内图形、远程桌面。
关键技术栈
- wlroots:模块化库,Sway、Wayfire、River 等的基础。
- libinput:统一输入设备处理。
- GBM (Generic Buffer Management):GPU 缓冲区管理。
- DRM/KMS:内核显示输出接口。
- XWayland:无根 X 服务器,运行 X11 应用。
常见 compositor 列表
Wayland 合成器(主流)
- Mutter:GNOME 桌面用
- KWin:KDE Plasma 用
- Sway:i3 风格平铺窗口管理器(Wayland 版)
- Hyprland:热门动态平铺 compositor
- Weston:官方参考实现(偏测试)
- wlroots系列:Sway、Hyprland、Wayfire 都基于它
X11 合成器
- Compiz
- Mutter(也可在 X11 下运行)
- KWin(同上)
- xfwm4、metacity 等内置合成功能
核心区别
- X11:compositor 是附加组件,负责美化
- Wayland:compositor 是核心服务,整个显示系统的中心
合成器对比
| 合成器 | 协议 | 定位 | 特点 |
|---|---|---|---|
| picom | X11 | 轻量特效 | 透明、模糊、低占用 |
| Mutter | Wayland/X11 | GNOME | 流畅、集成度高 |
| KWin | Wayland/X11 | KDE | 功能最强、特效多 |
| Sway | Wayland | 平铺 | i3 兼容、稳定 |
| Hyprland | Wayland | 动态平铺 | 颜值、性能、极客 |