跳转至内容

libinput

来自 ArchWiki

来自 libinput wiki 页面

libinput 是一个用于在 Wayland 合成器中处理输入设备并提供通用 X.Org 输入驱动的库。它提供设备检测、设备处理、输入设备事件处理和抽象,以最大限度地减少合成器需要提供的自定义输入代码量,以提供用户期望的常见功能集。

X.Org 输入驱动支持大多数常规的 输入设备。特别值得注意的是,该项目旨在为触摸屏和触摸板提供高级触摸(多点触控和手势)功能支持。有关更多信息,请参阅 libinput 文档

安装

如果您安装了 XorgWayland,那么 Libinput 应该作为依赖项已安装;无需其他额外的软件包。

  • 对于 Waylandlibinput 包应该作为您使用的任何具有 Wayland 的图形环境的依赖项安装,无需额外的驱动程序。
  • 对于 Xorgxf86-input-libinput 也是一个依赖项。它“是 libinput 的一个薄包装器,允许 libinput 用于 X 中的输入设备。此驱动程序可以作为 evdev 和 synaptics 的直接替代品。” [1]。它取代了其他用于 X 输入的软件包(即以 xf86-input- 开头的软件包)。
    • 您可能希望安装 xorg-xinput 以便在运行时更改设置。

配置

对于 Wayland,没有 libinput 配置文件。可配置选项取决于您的桌面环境对它们的支​​持进度(请参阅 #图形化工具)或通过应用桌面无关的 udev 规则(请参阅 Calibrating Touchscreen#Do it automatically via a udev rule#Via a udev rule)。要配置您的桌面环境尚不支持的选项(例如,GNOME 上的触摸板滚动速度),可以使用 libinput-config-gitAUR 作为一种变通方法。该工具可用的选项记录在 libinput-config README 中。

对于 Xorg,包装器的默认配置文件安装在 /usr/share/X11/xorg.conf.d/40-libinput.conf。无需额外配置即可自动检测键盘、触摸板、轨迹指针和支持的触摸屏。

通过 xinput 在 Xorg 上

首先,执行

# libinput list-devices

它将输出系统上的设备以及 libinput 支持的相应功能。

在图形环境重启后,如果没有任何其他驱动程序配置优先,设备应该由 libinput 和默认配置进行管理。

请参阅 libinput(4) 获取要设置的通用选项以及有关允许值的​​信息。xinput 工具用于查看或更改运行时特定设备可用的选项。例如

$ xinput list

查看所有设备并确定它们的名称和编号。在以下内容中,device 是识别要操作的设备的名称或编号。

$ xinput list-props device

查看和

$ xinput set-prop device option setting

更改设置。option 可以是选项的编号或名称。例如,要设置 libinput Click Method Enabled (303) 的两个选项,可以执行以下任一命令

$ xinput set-prop 14 303 1 1

或者

$ xinput set-prop 14 "libinput Click Method Enabled" 1 1

通过 Xorg 配置文件

请参阅 Xorg#Using .conf files 以获取永久选项设置。Logitech Marble Mouse#X11#Tapping button re-mapping 提供了示例。

Xorg 输入设备的替代驱动程序通常可以并行安装。如果您打算为设备切换驱动程序以使用 libinput,请确保没有用于其他驱动程序的旧配置文件 /etc/X11/xorg.conf.d/ 具有优先权。

提示
  • 如果您并行安装了 libinput 和 synaptics 并使用默认配置(即,在 /etc/X11/xorg.conf.d 中没有任一驱动程序的配置文件),synaptics 将因其在默认安装目录中较高的数字顺序 70- 而具有优先权。为避免这种情况,您可以将默认的 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#Using .conf files。如果您想禁用 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 中的 CONFIGURATION DETAILS 以获取指导,并参考 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": 点击,又名 tap-to-click
  • Option "ClickMethod" "clickfinger": 触摸板不再具有中间和右按钮区域,而是两指点击作为上下文点击,三指点击作为中间点击,请参阅 文档
  • Option "NaturalScrolling" "true": 自然(反向)滚动
  • Option "ScrollMethod" "edge": 边缘(垂直)滚动

请注意,其中一些可能只适用于特定设备,您需要重新启动 X 才能使更改生效。

通过 udev 规则

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 这看起来不像是一个通用的配置方法,除了 LIBINPUT_CALIBRATION_MATRIX 实际上可以这样设置。(在 Talk:Libinput 中讨论)

主要的 udevCalibrating Touchscreen 文章有更多细节,但总而言之

# libinput list-devices

记下相关输入设备的 Device: 名称和 Kernel 路径。例如,这可能是 HID 02eb:114e,路径为 /dev/input/event0

为该设备创建一条规则。例如,要将所有触摸屏输入旋转 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"
提示 查看 Libinput 文档中的“通过 Udev 进行静态设备配置”部分,了解其他坐标转换。

然后,重新加载规则并测试以查看您的设备是否已注册该规则

# udevadm info /dev/input/event0

您应该在此处看到您的 LIBINPUT_CALIBRATION_MATRIX 列出了该设备。

最后,重启您的机器或重启您的 Wayland 桌面。

图形工具

有不同的 GUI 工具

  • GNOME:
  • Cinnamon:
    • 类似于 GNOME UI,但选项更多。
  • MATE:
    • 设置面板中提供了鼠标选项。也可以通过 mate-mouse-properties 访问
  • KDE Plasma:
    • 可以从系统设置中配置键盘、鼠标和控制器设备。
  • Xfce:

技巧与提示

点击按钮重新映射

交换触摸板的两指和三指点击是一个直接的例子。而不是默认的三指点击用于粘贴,您可以通过在您的 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 编号及其按钮映射都会有所不同。因此,设置不能直接互换。

提示 您可以使用 xev(来自 xorg-xev 包)来找出当前哪个物理按钮映射到哪个 ID。

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 本节的其余部分对于不同设备的参数来说过于复杂。应将独特的想法拆分成子节以使其更易读。(在 Talk:Libinput 中讨论)

有些设备在同一设备名称下出现多次,具有不同数量的暴露按钮。以下是通过 xinitrc 可靠地更改 Logitech 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 配置文件来执行此操作。此示例中使用的轨迹球有一个物理滚轮,没有滚轮的设备可能需要参考 Logitech Marble Mouse 的配置。Kensington Slimblade Trackball 布局中的物理按钮是

-----------
|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

更改触摸板灵敏度

在 libinput 注册触摸按下和抬起的确切阈值的方法可以在 [2] 的上游文档中找到。

可以通过临时本地设备 quirks 设置自定义触摸板压力值。请参阅 [3]

注意 Quirks 是一个内部 API,不能保证在未来的 libinput 版本中工作。在版本 1.11 和 1.12 之间,udev 规则 [4].quirk 文件 [5] 取代。

禁用设备

使用环境变量

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",其中 ID 来自 lsusb

创建文件后,udev 会自动识别更改(请参阅 Udev#Loading new rules);您只需重新连接设备即可使更改生效。

使用 xinput

要禁用触摸板等设备,首先使用 xinput list 获取其名称,然后使用 xinput disable name 禁用它。

  • 通过名称禁用比通过 ID 号禁用更可靠。设备可能会被重新编号。
  • 如果名称包含空格,则需要引用该名称。

要使其永久生效,请参阅 Autostarting

要切换,请编写一个脚本,例如 [7]

手势

虽然 libinput 驱动程序已经包含处理高级多点触控事件(如滑动和捏合 手势)的逻辑,但 桌面环境窗口管理器可能尚未为所有这些手势实现操作。

libinput-gestures

对于符合 EWMH(另请参阅 wm-spec)的窗口管理器,可以暂时使用 libinput-gestures 工具。该程序通过 libinput debug-events 读取触摸板的 libinput 手势,并根据配置文件将它们映射到手势。因此,它在 libinput 内置识别的范围内提供了一些灵活性。

要使用它,请安装 libinput-gesturesAUR 包。

libinput-gestures 需要访问触摸板设备。传统上,您可以将自己添加到 input 组来设置此项,但更现代、更安全的方法是使用 udev、logind 和 acls 动态管理访问。要使其工作,请创建一个文件

/etc/udev/rules.d/71-touchpad.rules
ACTION!="remove", ENV{ID_INPUT_TOUCHPAD}=="1", TAG+="uaccess"

文件开头的数字很重要:在索引 70 处,设备属性 ENV{ID_INPUT_TOUCHPAD} 可能会被取消设置,并且对于 systemd-logind(8),需要在索引 73 之前添加 uaccess 标签。

您可以使用默认的系统范围配置的滑动和捏合手势,或者在个人配置文件中定义自己的手势,有关详细信息,请参阅 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,有 GnomeExtendedGesturesgnome-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)冲突,后者有需要在按下按键时移动鼠标的快捷键。一种在打字时启用触摸板的方法是,在 /etc/X11/xorg.conf.d/30-touchpad.confInputClass 部分添加以下行

Section "InputClass"
    ...
    Option "DisableWhileTyping" "0"
EndSection

使用 xinput 也可以实现相同的效果。该属性可能名为 libinput Disable While Typing Enabled

故障排除

首先,检查执行 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 命令行工具或您选择的图形前端来调整设置。例如,如果您希望为您的用户启用 Tapping 并禁用 Natural Scrolling,请像下面这样调整触摸板键值

$ gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true
$ gsettings set org.gnome.desktop.peripherals.touchpad natural-scroll false

KDE 中惯性滚动不工作

该功能目前尚未实现,请参阅 KDE bug 456383。作为 Chromium 浏览器的一个变通方法,安装 SmoothScroll 扩展。

进入平板模式后按键卡住

在某些平板电脑(尤其是联想 Yoga)上,在进入平板模式时按住键盘按键可能会导致按键卡住,直到禁用平板模式。有时可以通过修改 libinput quirks 文件来修复此行为。请参阅 Issue 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 指令的信息,请参阅 Device quirks。通常可以根据您特定设备的现有 quirks 条目创建覆盖文件。默认 quirks 文件位于 /usr/share/libinput/

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.