libinput
来自 libinput wiki 页面
- libinput 是一个用于处理 Wayland 合成器中输入设备的库,并提供通用的 X.Org 输入驱动程序。它提供设备检测、设备处理、输入设备事件处理和抽象,以最大限度地减少合成器需要提供的自定义输入代码量,从而实现用户期望的通用功能集。
X.Org 输入驱动程序支持大多数常规的输入设备。特别值得注意的是该项目的目标是为触摸板和触摸屏提供高级触摸(多点触控和手势)功能支持。有关更多信息,请参阅libinput 文档。
安装
如果您安装了 Xorg 或 Wayland,则 Libinput 应该已经作为依赖项安装;没有必要的额外软件包。
- 对于 Wayland,libinput 软件包应作为您使用的任何具有 Wayland 的图形环境的依赖项安装,并且不需要额外的驱动程序。
- 对于 Xorg,xf86-input-libinput 也是一个依赖项。它是“libinput 的一个薄封装,允许在 X 中将 libinput 用于输入设备。此驱动程序可用作 evdev 和 synaptics 的替代品。” [1]。它取代了用于 X 输入的其他软件包(即,那些以
xf86-input-
为前缀的软件包)。- 您可能需要安装 xorg-xinput 以便能够在运行时更改设置。
配置
对于 Wayland,没有 libinput 配置文件。可配置选项取决于您的桌面环境对其支持的进度(请参阅#图形工具)或通过应用与桌面无关的 udev 规则(请参阅校准触摸屏#通过 udev 规则自动执行和#通过 Udev 规则)。要配置您的桌面环境尚不支持的选项(例如,GNOME 上的触摸板滚动速度),可以使用 libinput-config-gitAUR 作为一种变通方法。该工具的可用选项记录在 libinput-config README 中。
对于 Xorg,包装器的默认配置文件安装在 /usr/share/X11/xorg.conf.d/40-libinput.conf
。无需额外的配置即可自动检测键盘、触摸板、轨迹点和支持的触摸屏。
通过 Xorg 上的 xinput
首先,执行
# libinput list-devices
它将输出系统上的设备及其 libinput 支持的各自功能。
在重启图形环境后,如果没有配置其他驱动程序优先,设备应由 libinput 使用默认配置进行管理。
有关要设置的常规选项和有关允许值的信息,请参阅 libinput(4)。xinput 工具用于查看或更改特定设备在运行时可用的选项。例如
$ xinput list
查看所有设备并确定其名称和编号。在下文中,device
是标识要操作的设备的名称或编号。
$ xinput list-props device
查看和
$ xinput set-prop device option setting
更改设置。option
可以是选项的编号或名称。例如,要设置 libinput 点击方法启用 (303) 的两个选项,可以发出以下任一命令
$ xinput set-prop 14 303 1 1
或
$ xinput set-prop 14 "libinput Click Method Enabled" 1 1
通过 Xorg 配置文件
有关永久选项设置,请参阅 Xorg#使用 .conf 文件。罗技轨迹球鼠标#libinput 和 #轻击按钮重映射 说明了一些示例。
用于 Xorg#输入设备 的替代驱动程序通常可以并行安装。如果您打算切换设备的驱动程序以使用 libinput,请确保 /etc/X11/xorg.conf.d/
中没有其他驱动程序的旧配置文件优先。
- 如果您并行安装了 libinput 和 synaptics 且使用默认配置(即
/etc/X11/xorg.conf.d
中没有任一驱动程序的文件),由于其在默认安装目录中较高的数字顺序70-
,synaptics 将优先。为了避免这种情况,您可以将默认 libinput 配置 (40-libinput.conf
) 符号链接到/etc/X11/xorg.conf.d/
,其中目录搜索顺序优先级将取代70-synaptics.conf
# ln -s /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/40-libinput.conf
- 如果您确实有
/etc/X11/xorg.conf.d/
的配置文件,则 libinput 文件必须按顺序排在第二位;请参阅 Xorg#使用 .conf 文件。如果您想禁用 libinput(并回退到旧驱动程序)- 只需从/etc/X11/xorg.conf.d/
中删除先前创建的符号链接即可。
- 如果配置文件似乎完全不起作用,请检查它是否可供非特权用户读取。
检查哪些设备由 libinput 管理的一种方法是 xorg 日志文件。例如,以下
$ grep -e "Using input driver 'libinput'" /path/to/Xorg.0.log
[ 28.799] (II) Using input driver 'libinput' for 'Power Button' [ 28.847] (II) Using input driver 'libinput' for 'Video Bus' [ 28.853] (II) Using input driver 'libinput' for 'Power Button' [ 28.860] (II) Using input driver 'libinput' for 'Sleep Button' [ 28.872] (II) Using input driver 'libinput' for 'AT Translated Set 2 keyboard' [ 28.878] (II) Using input driver 'libinput' for 'SynPS/2 Synaptics TouchPad' [ 28.886] (II) Using input driver 'libinput' for 'TPPS/2 IBM TrackPoint' [ 28.895] (II) Using input driver 'libinput' for 'ThinkPad Extra Buttons'
是一台笔记本电脑,/etc/X11/xorg.conf.d/
中没有任何配置文件,即设备是自动检测的。
当然,您可以选择为一个设备使用替代驱动程序,而为其他设备使用 libinput。许多因素可能会影响使用哪个驱动程序。例如,与 Touchpad Synaptics 相比,libinput 驱动程序自定义触摸板行为的选项较少,但处理多点触控事件(例如,手掌检测)的程序逻辑要多得多。因此,如果您在使用某个驱动程序时硬件遇到问题,尝试另一种驱动程序是有意义的。
自定义配置文件应放置在 /etc/X11/xorg.conf.d/
中,并遵循广泛使用的命名方案,通常选择 30-touchpad.conf
作为文件名。
/usr/share/X11/xorg.conf.d/40-libinput.conf
中的配置详细信息以获得指导,并参阅 libinput(4) 手册页以获得可用配置选项的详细描述。基本配置应具有以下结构
/etc/X11/xorg.conf.d/30-touchpad.conf
Section "InputClass" Identifier "devname" Driver "libinput" ... EndSection
您可以在单个配置文件中定义任意数量的节(通常每个输入设备一个)。要配置您选择的设备,请使用 xorg.conf(5) § INPUTCLASS_SECTION 中的可用过滤器之一指定过滤器,例如
MatchIsPointer "on"
(轨迹点)MatchIsKeyboard "on"
MatchIsTouchpad "on"
MatchIsTouchscreen "on"
然后可以使用 libinput(4) § CONFIGURATION_DETAILS 的任何行配置输入设备。常用选项包括
Option "Tapping" "on"
:轻击,也称为点击触摸Option "ClickMethod" "clickfinger"
:触控板不再具有中间和右键区域,而是双指点击为上下文点击,三指点击为中键点击,请参阅 文档。Option "NaturalScrolling" "true"
:自然(反向)滚动Option "ScrollMethod" "edge"
:边缘(垂直)滚动
请记住,其中一些可能仅适用于某些设备,您需要重启 X 才能使更改生效。
通过 Udev 规则
主要的 udev 和 校准触摸屏 文章有更多详细信息,但总结如下
# libinput list-devices
记下相关输入设备的设备:名称和内核路径。例如,这可能是路径 /dev/input/event0
上的 HID 02eb:114e
。
为该设备创建规则。例如,将所有触摸屏输入旋转 270 度
/etc/udev/rules.d/99-mytouchscreen-calibration.rules
# Do a 270 degree rotation on the input ENV{ID_USB_SERIAL}=="02eb_114e", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"
然后,重新加载规则并测试以查看您的设备是否已注册该规则
# udevadm info /dev/input/event0
您应该在那里看到为设备列出的 LIBINPUT_CALIBRATION_MATRIX
。
最后,重启您的机器或重启您的 Wayland 桌面。
图形工具
有不同的 GUI 工具
- GNOME:
- 控制中心具有基本的用户界面。请参阅 GNOME#鼠标和触摸板。
- gnome-tweaks 提供了一些额外的设置。
- Cinnamon:
- 类似于 GNOME 用户界面,但选项更多。
- MATE:
- 设置面板中提供了鼠标选项。也可以使用
mate-mouse-properties
访问
- 设置面板中提供了鼠标选项。也可以使用
- KDE Plasma:
- 可以在系统设置中配置键盘、鼠标和控制器设备。
- Xfce:
- 在 xfce4-settings 中的鼠标和触摸板子菜单中配置。
技巧与诀窍
轻击按钮重映射
交换触摸板的双指和三指轻击是一个简单的示例。您可以配置双指轻击粘贴而不是默认的三指轻击粘贴,方法是在您的 Xorg 配置文件中设置 TappingButtonMap
选项。要将 1/2/3 指轻击设置为左/右/中,请将 TappingButtonMap
设置为 lrm
,对于左/中/右,请将其设置为 lmr
。
/etc/X11/xorg.conf.d/30-touchpad.conf
Section "InputClass" Identifier "touchpad" Driver "libinput" MatchIsTouchpad "on" Option "Tapping" "on" Option "TappingButtonMap" "lmr" EndSection
如果您的设备不是触摸板,请记住删除 MatchIsTouchpad "on"
并相应地调整 Identifier
。
手动按钮重映射
对于某些设备,需要更改按钮映射。一个常见的例子是在鼠标上使用拇指按钮代替中键(在 X11 中用于粘贴),其中中键是鼠标滚轮的一部分。您可以通过以下方式查询当前按钮映射
$ xinput get-button-map device
其中 device 是设备名称或设备 ID,如 xinput list
返回的那样。您可以自由排列按钮编号并写回。示例
$ xinput set-button-map device 1 6 3 4 5 0 7
在此示例中,我们将按钮 6 映射为中键,并通过将其分配给按钮 0 来禁用原始中键。有关更多信息,请阅读 libinput(4) 中的“ButtonMapping”部分。这也可用于 Wayland,但请注意,device 编号及其按钮映射都将不同。因此,设置不是直接可互换的。
某些设备在同一设备名称下出现多次,但暴露的按钮数量不同。以下是通过 xinitrc 可靠地更改罗技 Revolution MX 鼠标的按钮映射的示例
~/.xinitrc
... for i in $(xinput list | grep "Logitech USB Receiver" | perl -n -e'/id=(\d+)/ && print "$1\n"') do if xinput get-button-map "$i" 2>/dev/null| grep -q 20; then xinput set-button-map "$i" 1 17 3 4 5 8 7 6 9 10 11 12 13 14 15 16 2 18 19 20 fi done ...
您也可以使用 Xorg 配置文件来做到这一点。此示例中使用的轨迹球具有物理滚轮,没有滚轮的设备可能需要参考 罗技轨迹球鼠标 的配置。Kensington Slimblade 轨迹球布局中的物理按钮是
----------- |2(M)|8(S)| ----------- |1(L)|3(R)| -----------
因此,对于左手用户,您可以使用以下配置。尽管该设备没有向上和向下滚动按钮,但您无法在配置中禁用它们,否则某些应用程序将不会响应滚轮的操作。
----------- |2(N)|8(M)| ----------- |1(R)|3(L)| -----------
/etc/X11/xorg.conf
Section "InputClass" Identifier "Trackball" MatchProduct "Kensington Kensington Slimblade Trackball" MatchProduct "Trackball" Driver "libinput" Option "ButtonMapping" "3 0 1 4 5 6 7 8 2" EndSection
更改触摸板灵敏度
在 [2] 上游文档中可以找到查找 libinput 何时将触摸注册为 DOWN 和再次 UP 的正确阈值的方法。
可以通过临时的本地设备怪癖设置自定义的触摸板压力值。请参阅 [3]。
禁用设备
使用环境变量
LIBINPUT_IGNORE_DEVICE
环境变量 可用于阻止特定设备的初始化。[6] 最好使用 udev 规则设置它
/etc/udev/rules.d/99-libinput-ignore.rules
ACTION=="add|change", device_delineation, ENV{LIBINPUT_IGNORE_DEVICE}="1"
其中 device_delineation 使用 udev 语法划定特定设备。例如,对于您希望 libinput 忽略的整个 USB 设备,您可以使用 SUBSYSTEMS=="usb", ATTRS{idVendor}=="vendor_id", ATTRS{idProduct}=="product_id"
,使用来自 lsusb
的 ID。
创建文件后,udev 将自动获取更改(请参阅 Udev#加载新规则);您只需重新连接设备即可使更改生效。
使用 xinput
要禁用触摸板等设备,首先使用 xinput list
获取其名称,然后使用 xinput disable name
禁用它。
- 按名称禁用它比按 ID 编号禁用它更可靠。设备可能会重新编号。
- 如果名称包含空格,则需要用引号引起来。
要使其永久生效,请参阅 自启动。
要切换,请编写一个脚本,例如 [7]。
手势
虽然 libinput 驱动程序已经包含处理高级多点触控事件(如滑动和捏合 手势)的逻辑,但 桌面环境 或 窗口管理器 可能尚未实现所有这些手势的操作。
libinput-gestures
对于 EWMH(另请参阅 wm-spec)兼容的窗口管理器,同时可以使用 libinput-gestures 实用程序。该程序从触摸板读取 libinput 手势(通过 libinput debug-events
),并根据配置文件将其映射到手势。因此,它在 libinput 内置识别的范围内提供了一定的灵活性。
要使用它,请安装 libinput-gesturesAUR 软件包。您可以使用默认的系统范围配置的滑动和捏合手势,或在个人配置文件中定义自己的手势,有关详细信息,请参阅 README。
如果使用 touchegg,请卸载 libinput-gesturesAUR 软件包以防止冲突(请参阅 [8])。
fusuma
Fusuma 是一个多点触控手势识别器,用 Ruby 编写,可以用作 libinput-gestures 的替代品。
安装 fusuma
Ruby gem
$ gem install fusuma
或者,还有一个 ruby-fusumaAUR。
除了 fusuma
Ruby gem 之外,您还必须安装 fusuma-plugin-sendkey
Ruby gem 或 xdotool(用于 X)和 ydotool(通用:Wayland、X11 等)之间的一个。其他替代方案在 此处 列出。
fusuma-plugin-sendkey
Ruby gem 同时支持 X 和 Wayland然后在 ~/.config/fusuma/config.yml
中,您必须设置类似
~/.config/fusuma/config.yml
swipe: 3: left: sendkey: 'LEFTALT+RIGHT' right: sendkey: 'LEFTALT+LEFT' up: sendkey: 'LEFTALT+LEFTSHIFT+TAB' down: sendkey: 'LEFTALT+TAB' pinch: in: sendkey: 'LEFTALT+LEFTSHIFT+TAB' out: sendkey: 'LEFTALT+TAB' threshold: swipe: 0.5 pinch: 0.2 interval: swipe: 0.2 pinch: 0.2
或对于 xdotool
~/.config/fusuma/config.yml
swipe: 3: left: command: 'xdotool key alt+Right' right: command: 'xdotool key alt+Left' up: command: 'xdotool key ctrl+shift+plus' down: command: 'xdotool key ctrl+minus' pinch: in: command: 'xdotool key ctrl+shift+plus' out: command: 'xdotool key ctrl+minus' threshold: swipe: 0.5 pinch: 0.2 interval: swipe: 0.2 pinch: 0.2
ydotool
也是如此。
滑动阈值对于不过多地向后滑动页面很重要。
请注意,配置是用于三指滑动。不支持双指滑动 [9]。
Gebaar
Gebaar 是另一个手势识别器。与 Fusuma 不同,它不支持捏合(计划在未来支持)和阈值,但除了使用 3/4 根手指左右上下滑动外,它还支持对角线滑动,而 Fusuma 不支持。
在 Gebaar 有一个 gebaar 的分支,可以通过 gebaar-libinput-gitAUR 安装,它支持捏合手势并为原始 gebaar 添加了其他功能。请注意,此版本目前正在积极开发中,并引入了配置更改,使其与原始 Gebaar 不兼容
GnomeExtendedGestures
为了更深入地集成 GNOME,有 GnomeExtendedGestures (gnome-shell-extension-extended-gestures-gitAUR)。可以配置三指水平和垂直手势来执行 gnome-shell 操作(例如切换应用程序概览或在它们之间循环)。
按住按钮用鼠标滚动
有一个很好的技巧可以优化使用鼠标或轨迹球的滚动,方法是按住鼠标按钮(如右键或中键,或者如果鼠标有更多按钮,则使用其他按钮)并移动鼠标。如果您的鼠标没有鼠标滚轮(轨迹球通常是这种情况),这将非常有用。要做到这一点,必须将 ScrollMethod
设置为 button
,并在操作的 ScrollButton
选项中指定鼠标按钮。以下是实现此目的的配置示例
/etc/X11/xorg.conf.d/00-mouse.conf
Section "InputClass" Identifier "system-mouse" MatchIsPointer "on" Option "ScrollMethod" "button" Option "ScrollButton" "3" EndSection
鼠标滚轮滚动速度缩放
对于某些鼠标,尤其是在 HiDPI 桌面使用时,滚轮滚动速度太慢。补丁已提交给 libinput,但尚未被接受。有一个第三方 xf86-input-libinput 包含此补丁。
此补丁为鼠标引入了一个新的属性 libinput Scroll Distance Scale
,您可以设置一个缩放因子,例如
$ xinput --set-prop 'device_name' 'libinput Scroll Distance Scale' 2.5 2.5
其中 device_name
是您的鼠标设备名称,在 xinput --list
中列出。2.5 2.5
分别是 x 轴和 y 轴的缩放因子。
或者,安装 libinput-multiplierAUR 并重启 Xorg,然后通过以下方式将 y 轴滚动距离扩大 6 倍
$ echo 6 > /tmp/libinput_discrete_deltay_multiplier
这是一个 示例,用于在焦点更改时修改缩放因子
在打字时启用触摸板
默认情况下,libinput 在打字时禁用鼠标板。这对于某些软件(如 Inkscape)来说是冲突的,Inkscape 具有需要在按下按键时进行鼠标移动的快捷键。您可以通过将以下行添加到 /etc/X11/xorg.conf.d/30-touchpad.conf
的 InputClass
部分来禁用此功能
Section "InputClass" ... Option "DisableWhileTyping" "0" EndSection
故障排除
首先,查看执行 libinput debug-events
是否可以帮助您调试问题,请参阅 libinput-debug-events(1) 以获取选项。
某些输入需要内核支持。来自 evemu 软件包的工具 evemu-describe 可用于检查
将其输出(例如)与 受支持的触控板 进行比较。即几个 ABS_ 轴,几个 ABS_MT 轴,没有 REL_X/Y 轴。对于点击板,如果支持,还应设置 INPUT_PROP_BUTTONPAD
属性。
触摸板在 GNOME 中无法工作
通过运行以下命令,确保触摸板事件正在发送到 GNOME 桌面
$ gsettings set org.gnome.desktop.peripherals.touchpad send-events enabled
此外,GNOME 可能会覆盖某些行为,例如关闭轻击和强制自然滚动。在这种情况下,必须使用 GNOME 的 gsettings
命令行工具或您选择的图形前端来调整设置。例如,如果您希望为您的用户启用轻击并禁用自然滚动,请像下面这样调整触摸板键值
$ gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true $ gsettings set org.gnome.desktop.peripherals.touchpad natural-scroll false
惯性滚动在 KDE 中不起作用
该功能目前尚未实现,请参阅 KDE 错误 456383。作为基于 Chromium 的浏览器的解决方法,请安装 SmoothScroll 扩展。
进入平板模式后按键卡住
在某些平板电脑(特别是联想 Yoga)上,在进入平板模式时按住键盘按键可能会导致按键卡住,直到平板模式被禁用。有时可以通过修改 libinput 怪癖文件来修复此行为。请参阅 问题 914。
例如,找到键盘设备的名称
# libinput list-devices
... Device: AT Translated Set 2 keyboard Kernel: /dev/input/event3 Capabilities: keyboard ...
然后,创建一个覆盖文件
/etc/libinput/local-overrides.quirks
[Lenovo Thinkpad Yoga] MatchName=AT Translated Set 2 keyboard ModelTabletModeNoSuspend=0
ModelTabletModeNoSuspend=0
禁用导致该错误的行为。有关配置格式和选择要配置的设备的 Match 指令的信息,请查阅 设备怪癖。通常可以根据您的特定设备的现有怪癖条目创建覆盖文件。默认的怪癖文件可以在 /usr/share/libinput/
中找到。
参见
- libinput Wayland 文档
- FOSDEM 2015 - libinput - Hans de Goede 谈论项目的目标和计划
- Peter Hutterer 的博客 - 来自该项目黑客之一的关于 libinput 的众多帖子
- 主要 libinput 维护者的演讲 概述了 Linux 输入设备处理的历史和状态(截至 2020 年)
- libinput 维护者的博客文章 概述了 libinput 的基本原理