Skip to content

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 允许在非 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",
] }
toml

如果改用默认 feature,则会启用 compat-1-2 feature,并且 backend-linuxkms 会隐含 libseat 和 libinput,就像 Slint 1.18 之前那样。

backend-linuxkms-noseat feature 已弃用;请使用 backend-linuxkms-libinput,它选择的 是相同的组合。

启用 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)
plaintext

将 SLINT_DRM_OUTPUT 设置为 DP-3 将在第二台显示器上渲染。

要选择特定的分辨率和刷新率(模式),请设置 SLINT_DRM_MODE 变量。把它设为 list 并 运行你的程序,即可获取可用模式列表。例如,程序输出可能如下所示:

DRM Mode List Requested:
Index: 0 Width: 3840 Height: 2160 Refresh Rate: 60
Index: 1 Width: 3840 Height: 2160 Refresh Rate: 50
Index: 2 Width: 3840 Height: 2160 Refresh Rate: 30
Index: 3 Width: 2560 Height: 1440 Refresh Rate: 59
Index: 4 Width: 1920 Height: 1080 Refresh Rate: 60
Index: 5 Width: 1680 Height: 1050 Refresh Rate: 59
...
plaintext

将 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 度顺时针旋转:

Terminal window
echo 'ENV{LIBINPUT_CALIBRATION_MATRIX}="0 -1 1 1 0 0"' > /etc/udev/rules.d/libinput.rules
udevadm control --reload-rules
udevadm trigger
bash

对于软件渲染,DRM dumb buffer 是将帧缓冲提交到显示器的首选默认方式。如果不支持 DRM dumb buffer, LinuxKMS 后端会回退到使用 Linux 旧版 framebuffer 接口(/dev/fbX)。

要覆盖此默认行为并仅使用旧版 framebuffer 接口,请设置 SLINT_BACKEND_LINUXFB=1 环境变量。


© 2026 SixtyFPS GmbH