LinuxKMS 后端
LinuxKMS 后端仅在 Linux 上运行,并且无需诸如 Wayland 或 X11 之类的窗口系统。 相反,它使用以下库和接口直接渲染到屏幕,并对触摸、鼠标和键盘输入做出反应。
- 通过 KMS/DRI 使用 OpenGL。
- 通过 wgpu 和 Vulkan KHR Display Extension 使用 Vulkan。
- 用于软件渲染的 DRM dumb buffer,以及旧版 LinuxFB 渲染。
- libinput/libudev,用于处理来自鼠标、触摸屏或键盘的输入事件。(可选)
- libseat,无需 root 权限即可访问 GPU 和输入设备。(可选)
编译时,使用 pkg-config 来确定你选择的 feature 所需的系统库的位置。 并非每种配置都需要它们全部:
| pkg-config 包名 | Debian 系发行版上的包名 | 所需用途 |
|---|---|---|
gbm |
libgbm-dev |
FemtoVG 和 Skia OpenGL 渲染器 |
libseat |
libseat-dev |
libseat 支持 |
libinput |
libinput-dev |
libinput 支持 |
libudev |
libudev-dev |
libinput 支持 |
xkbcommon |
libxkbcommon-dev |
libinput 支持 |
软件渲染器不需要其中任何一个:它通过 DRM dumb buffer 渲染,Slint 直接驱动它们
而无需 C 库。字体处理与此表分开,并且在每种配置中都需要 fontconfig
(libfontconfig-dev)。
选择 libseat 和 libinput
Section titled “选择 libseat 和 libinput”libseat 允许在非 root 身份下访问 GPU 和输入设备。libinput 传递 鼠标、触摸和键盘事件。两者都是可选的,而且选择它们的方式在 Rust 和 C++ 之间有所不同。
禁用默认 feature,选择 compat-1-18 feature,然后将
backend-linuxkms 与你需要的能力组合起来:
| Cargo feature | libseat | libinput |
|---|---|---|
backend-linuxkms |
否 | 否 |
backend-linuxkms-libseat |
是 | 否 |
backend-linuxkms-libinput |
否 | 是 |
backend-linuxkms-libseat 和 backend-linuxkms-libinput |
是 | 是 |
[dependencies]slint = { version = "1.18.0", default-features = false, features = [ "compat-1-18", "backend-linuxkms", "backend-linuxkms-libinput", "renderer-software",] }如果改用默认 feature,则会启用 compat-1-2 feature,并且 backend-linuxkms
会隐含 libseat 和 libinput,就像 Slint 1.18 之前那样。
backend-linuxkms-noseat feature 已弃用;请使用 backend-linuxkms-libinput,它选择的
是相同的组合。
SLINT_FEATURE_BACKEND_LINUXKMS 会启用带有两个库的后端,并在你不需要时关闭其中任一个。
_LIBSEAT 和 _LIBINPUT 也能各自启用后端并可以组合,因此 SLINT_FEATURE_BACKEND_LINUXKMS 不是先决条件:
| CMake 选项 | libseat | libinput |
|---|---|---|
SLINT_FEATURE_BACKEND_LINUXKMS |
是 | 是 |
SLINT_FEATURE_BACKEND_LINUXKMS 和 ..._LIBSEAT=OFF |
否 | 是 |
SLINT_FEATURE_BACKEND_LINUXKMS 和 ..._LIBSEAT=OFF ..._LIBINPUT=OFF |
否 | 否 |
SLINT_FEATURE_BACKEND_LINUXKMS_LIBSEAT |
是 | 否 |
SLINT_FEATURE_BACKEND_LINUXKMS_LIBINPUT |
否 | 是 |
SLINT_FEATURE_BACKEND_LINUXKMS_LIBSEAT 和 ..._LIBINPUT |
是 | 是 |
cmake -DSLINT_FEATURE_BACKEND_LINUXKMS=ON ..配置输出会报告构建最终采用的是这两个库中的哪一个。
SLINT_FEATURE_BACKEND_LINUXKMS_NOSEAT 已弃用;请使用
SLINT_FEATURE_BACKEND_LINUXKMS_LIBINPUT,它选择的是相同的组合。
鼠标可作为输入设备使用,但鼠标光标的渲染仅适用于 Skia 和 FemtoVG 渲染器, 不适用于 Slint 软件渲染器。
启用 Rust 的 renderer-skia-software feature 并搭配一个 Linux KMS 后端 feature,
即可在没有 GPU 渲染器的情况下编译 Skia 的 CPU 渲染路径。
所有渲染器都使用 Linux 的直接渲染管理器(DRM)子系统来配置显示输出。Slint 默认选择第一个已连接的
显示器,并以它的首选分辨率(如果可用)或最高分辨率来配置它。设置 SLINT_DRM_OUTPUT
环境变量可以选择特定的显示器。要获取可用输出列表,请把 SLINT_DRM_OUTPUT
设为 list,运行你的程序,并观察输出。
例如,在一台带有内置屏幕(eDP-1)和外接显示器(DP-3)的笔记本电脑上,输出可能如下所示:
DRM Output List Requested:eDP-1 (connected: true)DP-1 (connected: false)DP-2 (connected: false)DP-3 (connected: true)DP-4 (connected: false)将 SLINT_DRM_OUTPUT 设置为 DP-3 将在第二台显示器上渲染。
要选择特定的分辨率和刷新率(模式),请设置 SLINT_DRM_MODE 变量。把它设为 list 并
运行你的程序,即可获取可用模式列表。例如,程序输出可能如下所示:
DRM Mode List Requested:Index: 0 Width: 3840 Height: 2160 Refresh Rate: 60Index: 1 Width: 3840 Height: 2160 Refresh Rate: 50Index: 2 Width: 3840 Height: 2160 Refresh Rate: 30Index: 3 Width: 2560 Height: 1440 Refresh Rate: 59Index: 4 Width: 1920 Height: 1080 Refresh Rate: 60Index: 5 Width: 1680 Height: 1050 Refresh Rate: 59...将 SLINT_DRM_MODE 设置为 4 即可选择 1920x1080@60。
默认情况下,假定键盘的型号和布局为 US 型号和布局。设置以下 环境变量来配置对不同键盘的支持:
XKB_DEFAULT_LAYOUT:要包含在 keymap 中的布局(语言)的逗号分隔列表。 接受的语言代码列表请参见 xkeyboard-config(7) 中的 layouts 一节。 以获取支持的布局列表。XKB_DEFAULT_MODEL:用于解释按键的键盘型号。接受的型号代码列表请参见 xkeyboard-config(7) 中的 models 一节。XKB_DEFAULT_VARIANT:一个逗号分隔的变体列表,每个布局一个,用于配置特定于布局的变体。接受的变体代码列表请参见 xkeyboard-config(7) 中 layouts 一节里括号内的值。XKB_DEFAULT_OPTIONS:一个逗号分隔的选项列表,用于配置与布局无关的按键组合。接受的选项代码列表请参见 xkeyboard-config(7) 中的 options 一节。
如果你的显示器的默认方向与你想要的用户界面方向不匹配,那么你可以
设置 SLINT_KMS_ROTATION 环境变量来指示 Slint 在渲染时旋转。支持的值
是以度为单位的旋转角度:0、90、180 和 270。
注意,该变量仅旋转渲染输出。如果你使用的是连接到同一显示器的触摸屏,
那么你可能需要对其进行配置,以便对所产生的触摸事件也应用旋转。关于配置
libinput 的 LIBINPUT_CALIBRATION_MATRIX,合法值列表请参见
libinput 文档。
通常可以通过把值写入 /etc/udev/rules.d 下的规则文件来设置这些值。
以下示例配置 libinput 对任何连接的触摸屏应用 90 度顺时针旋转:
echo 'ENV{LIBINPUT_CALIBRATION_MATRIX}="0 -1 1 1 0 0"' > /etc/udev/rules.d/libinput.rulesudevadm control --reload-rulesudevadm trigger旧版 LinuxFB 接口
Section titled “旧版 LinuxFB 接口”对于软件渲染,DRM dumb buffer 是将帧缓冲提交到显示器的首选默认方式。如果不支持 DRM dumb buffer,
LinuxKMS 后端会回退到使用 Linux 旧版
framebuffer 接口(/dev/fbX)。
要覆盖此默认行为并仅使用旧版 framebuffer 接口,请设置 SLINT_BACKEND_LINUXFB=1 环境变量。
© 2026 SixtyFPS GmbH