Skip to content

LinuxKMS 后端仅在 Linux 上运行,无需 Wayland 或 X11 等窗口系统。 它改用以下库和接口直接渲染到屏幕,并响应触摸、鼠标和键盘输入。

  • 通过 KMS/DRI 使用 OpenGL。
  • 通过 wgpu 和 Vulkan KHR Display Extension 使用 Vulkan。
  • 使用 DRM dumb buffers 进行软件渲染,以及传统的 LinuxFB 渲染。
  • 使用 libinput/libudev 处理来自鼠标、触摸屏或键盘的输入事件。
  • 使用 libseat 在不要求 root 权限的情况下访问 GPU 和输入设备。(可选)

依赖

编译时使用 pkg-config 来确定以下必需系统库的位置:

pkg-config 包名基于 Debian 的发行版上的包名
gbmlibgbm-dev
xkbcommonlibxkbcommon-dev
libudevlibudev-dev
libseatlibseat-dev

注意

如果你的目标系统上没有 libseat,那么可以选择 backend-linuxkms-noseat 来代替 backend-linuxkms。LinuxKMS 后端的这个变体无需安装 libseat,但作为交换条件,要求应用程序以有权访问所有输入和 DRM/KMS 设备文件的用户身份运行;通常是 root 用户。

渲染器

LinuxKMS 后端支持不同的渲染器。可以通过 SLINT_BACKEND 环境变量明确选择使用哪一个渲染器。

渲染器名称所需的图形 API用于选择渲染器的 SLINT_BACKEND
FemtoVGOpenGL ES 2.0linuxkms-femtovg
FemtoVG (wgpu)Vulkanlinuxkms-femtovg-wgpu
SkiaOpenGL ES 2.0, Vulkanlinuxkms-skia-opengllinuxkms-skia-vulkanlinuxkms-skia-software
Softwarelinuxkms-software

注意

该后端仍处于实验阶段。该后端尚未在各种设备上进行充分的测试,并且存在一些已知问题

注意

鼠标作为输入设备受支持,但鼠标光标的渲染仅在使用 Skia 和 FemtoVG 渲染器时有效,在 Slint 软件渲染器下无效。

显示器选择

所有渲染器都使用 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: 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...

plaintext

SLINT_DRM_MODE 设置为 4 以选择 1920x1080@60。

配置键盘

默认情况下,键盘布局和型号假定为美式型号和布局。设置以下环境变量以配置对不同键盘的支持:

  • 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 在渲染时进行旋转。支持的值是以度为单位的旋转角度:090180270

请注意,此变量仅旋转渲染输出。如果你使用连接到同一显示器的触摸屏,可能还需要对其进行配置,以便对生成的触摸事件也应用旋转。有关配置 libinput 的 LIBINPUT_CALIBRATION_MATRIX,请参阅 libinput 文档 以获取有效值的列表。通常可以通过将这些值写入 /etc/udev/rules.d 下的规则文件来进行设置。

以下示例将 libinput 配置为对任何连接的触摸屏应用 90 度顺时针旋转:

Terminal window

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

传统 LinuxFB 接口

对于软件渲染,DRM dumb buffers 是将帧缓冲区发布到显示器的首选默认方式。如果不支持 DRM dumb buffers,LinuxKMS 后端会回退到使用 Linux 传统帧缓冲区接口(/dev/fbX)。

要覆盖此默认值并仅使用传统帧缓冲区接口,请设置 SLINT_BACKEND_LINUXFB=1 环境变量。

基于 MIT 协议发布