前置知识

Linux 图形系统架构(2026版)

一、 图形后端与显示服务 (Backends & Display Servers)

这层负责“如何把像素投射到屏幕上”以及“如何管理多个窗口”。

  1. 现代主流方案
    Wayland: (首选协议) 现代 Linux 系统的标准显示协议,高效、安全,已全面取代 X11。
    DRM/KMS (Direct Rendering Manager): (底层标准) 现代 Linux 内核驱动框架。如果你不使用窗口系统(如直接在嵌入式屏幕显示),这是直接操作显卡的唯一推荐方式。
    GBM (Generic Buffer Management): 连接 DRM 和 OpenGL/Vulkan 的纽带,用于分配显存缓冲区。
  2. 传统/特定方案
    X11 (X11R7/Xwayland): 老牌显示协议。目前主要通过 Xwayland 运行在 Wayland 之上,用于兼容旧应用。
    FBDev (Framebuffer): 即 /dev/fb0。已过时,仅存在于极少数低端 MCU 或 legacy 工业设备中,不支持硬件加速。
    DirectFB: 已停止维护。曾用于嵌入式,现已被“Wayland + 硬件加速渲染”方案取代。

二、 UI 前端框架 (Frontends / Toolkits)

这层负责“如何画出按钮、菜单和动画”,即开发者直接使用的库。

  1. 综合型重量级框架 (桌面与高端嵌入式)
    Qt 6 / Qt 5: 工业界最通用的 C++ 框架。支持多种后端(Wayland, EGLFS, DRM)。
    GTK 4 / GTK 3: 同样支持 Wayland 和 X11。GTK4 对 GPU 加速的支持远超 GTK3。
    Flutter: 通过自定义 Embedder 运行在 DRM/KMS 上。

2. 轻量级嵌入式框架 (资源受限系统)
LVGL: (嵌入式最火) 占用资源极小(几百KB),非常适合带屏单片机或精简版 Linux。

Slint: 现代声明式 UI 框架,内存占用极低,支持 Rust/C++,在工业仪表领域增长迅速。

三、 渲染引擎与接口 (Rendering API)

介于前端和后端之间,负责具体的绘制算法。

OpenGL ES / Vulkan: 硬件加速绘制的标准接口。

Skia / Cairo: 二维矢量绘图库。Chrome 使用 Skia,GTK 常用 Cairo。

EGL: 桥接 API,用于将 OpenGL/Vulkan 的渲染内容关联到本地窗口系统(如 Wayland 或 DRM 表面)。

四、 典型架构组合示例

现代桌面: 应用 -> GTK4/Qt6 -> Wayland -> DRM/KMS -> 屏幕。

高性能嵌入式 (车载/医疗): 应用 -> Qt (EGLFS) -> DRM/KMS -> 屏幕。

极简嵌入式 (轻量仪表): 应用 -> LVGL -> FBDev/DRM -> 屏幕。

高手玩家: 应用 -> 自定义绘图算法 -> Framebuffer -> 屏幕。

查看本机的组合

以本机ubuntu20.04 lts版本为例:

默认技术栈方案

图形后端: Xorg (X11)。

窗口管理器/合成器: GNOME Shell(运行在 X11 模式下)。

底层驱动接口: DRM/KMS(现代内核驱动标准,Xorg 也是通过它与内核通信)。

前端/UI 框架: GTK 3(桌面环境核心使用)及 Qt 5(支持大部分第三方应用)。

1
echo $XDG_SESSION_TYPE

或者执行ps -e | grep -E 'Xorg|wayland'
输出:X11

查看桌面外壳程序依赖的库(GNOME)

1
ldd $(which gnome-shell) | grep -E "gtk|qt"

输出:

1
libgtk-3.so.0 => /lib/x86_64-linux-gnu/libgtk-3.so.0 (0x00007fedc63a2000)

gtk交叉编译

占坑中…


参考

嵌入式Linux图形界面程序交叉编译实战示例