libinput (简体中文) - ArchWiki

Jump to content

相关文章

- Xorg
- Touchpad Synaptics
- Wayland

翻译状态：本文是 Libinput 的翻译。上次翻译日期：2022-05-18。如果英文版本有所更改，则您可以帮助同步翻译。

来自libinput wiki 项目

  libinput 是一个函数库，在 Wayland 上用来接收设备的输入，在 X.Org 上提供输入设备的驱动。它提供对设备事件的检测和接收。对输入设备信号进行处理。它提供了一些列的函数供用户使用。

需要注意的是， X.Org 输入驱动为大多数常规输入设备提供了支持，libinput 项目的目标是为触摸板和触摸屏的触摸功能（如多点触控、手势等）提供高级支持。详情请参见 libinput 文档。

## 安装

一般不需要手动安装.

- 在 Wayland 系统中，libinput 包是所有 Wayland 图形环境的依赖包并且已经安装，不需要其它的输入驱动。
- 在 Xorg 系统中，xf86-input-libinput 包也是默认依赖。这个软件包是 libinput 的一个包装（wrapper），能够使 libinput 用于 X 上的输入设备，可以作为 evdev 和 synaptics 的替代品 [1]。代替其他用于 X 输入的软件包（即以 `xf86-input-` 为前缀的软件包）。

可能还要安装 xorg-xinput 以便在程序运行时更改设置。

## 配置

在 Wayland 上, 没有关于 libinput 的配置文件。 可配置内容由你使用的桌面环境对 libinput 的支持情况决定。详情请见 #图形工具 部分。

对于 Xorg, 默认的配置文件安装在 `/usr/share/X11/xorg.conf.d/40-libinput.conf`。一般没有必要使用额外的配置文件来检测键盘，触摸板，指点杆（小红点）和触摸屏。

### 使用 xinput

首先，执行:

    # libinput list-devices

这将会输出系统中的设备和它们被 libinput 支持的具体特性。

重启图形环境之后，如果没有其它驱动程序被配置为优先，设备应由具有默认配置的 libinput 管理。

参见 libinput(4) 了解可设定的常规选项和一些参数信息。xinput 工具用于查看或更改运行中的特定设备的设置。例如：

查看所有设备并确定其名称和编号：

    $ xinput list

查看 device 的设置 （在下文中，`device` 表示要操作的设备的名称或编号）：

    $ xinput list-props device

修改 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#libinput 和 #设置按键映射 中列举了几个例子。

Xorg#Input devices 的替代驱动程序通常可以同时安装。如果您打算将一个设备的驱动程序切换到 libinput，请确保没有在 `/etc/X11/xorg.conf.d/` 的配置文件中为其它驱动程序配置优先。

提示： 如果你同时安装了 libinput 和 synaptics 并使用其默认配置（即 `/etc/X11/xorg.conf.d/` 中没有属于两者中任一的文件），synaptics 将因其在默认安装目录中拥有更高的数字顺序 `70-` 而获得较高优先级。为了避免这种情况，您可以将默认的 libinput 配置文件（`40-libinput.conf`）符号链接到目录搜索顺序优先于 `70-synaptics.conf` 的 `/etc/X11/xorg.conf.d/` 中去取代它：

    # 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` 中的详细配置以获取指导并参考 libinput(4) 手册页获取有关可用配置选项的详细说明

一个基本的配置应该遵循以下的结构：

    /etc/X11/xorg.conf.d/30-touchpad.conf

    Section "InputClass"
        Identifier "devname"
        Driver "libinput"
        ...
    EndSection

你可以在单个配置文件中定义任意多的 Section（通常每个输入设备只配置一个 Section） 要配置你选择的设备，请指定 xorg.conf(5) § INPUTCLASS SECTION 中的一个过滤器，例如：

- `MatchIsPointer "on"` (trackpoint)
- `MatchIsKeyboard "on"`
- `MatchIsTouchpad "on"`
- `MatchIsTouchscreen "on"`

输入设备能够在 CONFIGURATION 中进行配置，详情请看 libinput(4) § CONFIGURATION。一些常用的配置选项有：

- `Option "Tapping" "on"`: 触摸以点击
- `Option "ClickMethod" "clickfinger"`: 触摸板不再拥有中右键区域的区分，与之代替的是双指代表右键，三指代表中键。 详情请看docs.
- `Option "NaturalScrolling" "true"`: 自然滚动（反方向滚动）
- `Option "ScrollMethod" "edge"`: 边缘滚动页面

注意：有的功能只在特定设备中起作用，并且你可能需要重启 “X服务” 来让功能生效。

### 图形工具

下面列出了一些图形工具：

- GNOME:
  - 控制中心（Control center）带有一个基础配置页面，详见 GNOME#Mouse and touchpad.
  - gnome-tweaks 提供一些其他设置。
- Cinnamon:
  - 与 GNOME 界面相似，可更改选项更多。
- KDE Plasma 5:
  - 键盘，鼠标和控制器可以通过系统设置（System Settings）配置。
- Xfce
  - 在 xfce4-settings 下的“鼠标和触摸板（Mouse and Touchpad）”子菜单中进行配置。

- MATE:
  - 你可以在 MATE 的控制面板中配置鼠标相关内容，也可以使用 `mate-mouse-properties`

## 使用技巧

### 交换多指点击动作

本小节以交换触摸板的两指点击与三指点击动作为例进行说明。

为了使用两指点击来替代三指点击的动作，需要修改 Xorg 配置文件中 `TappingButtonMap` 选项。如果希望将单指、两指、三指点击对应的动作分别对应为左键、右键、中键（left/right/middle）点击，将 `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 可以是 `xinput list` 命令返回的设备名或者设备ID。你可以随意交换按钮对应的数字并写回。例如：

    $ xinput set-button-map device 1 6 3 4 5 0 7

在上面的例子中，我们将编号为6的按钮设置为了中键，并为原本的中键配置了按键0以禁用该按键。 关于按键映射的内容可以参阅libinput(4)的“ButtonMapping”部分。 也许在 Wayland 中这种修改方式同样适用，但是需要注意的是，device 的编号与 button-map 也许互不相通。因此在 Xorg 与 Wayland 的设置并不能直接交换。

提示： 你可以使用命令 `xev`（包含于软件包 xorg-xev）来查看物理按键对应的逻辑按键编号。

在列出设备时，某些设备可能会以相同的设备名被多次列出，但是他们往往对应着不同的按键映射，因此准确修改按键映射需要辨别真正需要修改按键映射的设备。下面是一个通过 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
    ...

### 更改触摸板灵敏度

寻找触摸板适合的灵敏度阈值的方法可以参考上游文档[2]

自定义触摸板的按压灵敏度可以通过“temporary local device quirks”实现，参见 device-quirks 文档[3]。

注意：

Quirks 是一组内部API（internal API），并不保证能够在未来版本的 libinput 中正常工作。 在libinput 1.11 到 1.12 版本中，udev规则[4] 被 `.quirk`文件[5]取代。

### 禁用触摸板

禁用触摸板需要先使用命令 `xinput list` 获取触摸板名称，之后使用命令 `xinput disable name` 来禁用。

注意：

- 使用设备ID来禁用设备是一种相对较为鲁莽的行为，因为设备ID可能被重新分配。
- 当设备名中包含空格时，需要使用英文引号将其包含在内。

如果希望其在系统启动时生效，参见 自动启动 相关内容。

可以编写相应脚本来启用/禁用触摸板[6]。

### 手势操作

虽然 libinput 已经提供了手势操作，比如：捏、滑。但部分桌面环境（DE）和窗口管理器（WM）可能还没有支持这些功能。

#### libinput-gestures

对于兼容 EWMH（另见 wm-spec）的窗口管理器（WM）, 可以使用 libinput-gestures 。 程序从 libinput 获取触摸板的手势 (通过 `libinput debug-events`) ，然后根据相关配置将其映射成相对应的行为。这个程序提供了相当多了可自定义的功能。

要使用 libinput-gestures, 请安装 libinput-gesturesAUR 。 你能使用很多系统级别的手势操作，也能自定义配置文件，详情请看 README 。

#### fusuma

Fusuma 是一个使用 Ruby 编写的多点手势识别器（multitouch gesture recognizer），可以作为 libinput-gestures 的替代品。

使用 Ruby gem 安装 `fusuma`：

    $ gem install fusuma

或者可以从 AUR 安装：ruby-fusumaAUR。

除了 `fusuma` 模块，还需要安装Ruby模块 `fusuma-plugin-sendkey` 或者从 xdotool（用于X）与 ydotoolAUR 中任选其一。其他可选择的工具可以参见项目说明

提示： `fusuma-plugin-sendkey` 模块同时支持 X 和 Wayland.

fusuma 安装完成后可以在配置文件 `~/.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` 适用的配置同上。

适当配置滑动阈值（swip threshold）可以避免在滚动时划过过多页面。

需要注意的是该配置仅适用于三指滑动，并不适用于两指滑动[7]

#### Gebaar

Gebaar 是另一个手势识别器（gesture recognizer）。与 Fusuma 相比，gebaar 不支持“捏”的手势（该手势支持已经被加入开发计划中）和阈值配置，但是增加了四指、五指滑动手势与斜线滑动。

gebaar的一份fork可以使用AUR安装：gebaar-libinput-gitAUR，这一版本的gebaar适配了“捏”的手势以及一些其他功能。该版本当前正处于积极开发的状态，但是配置文件与gebaar原始版本不兼容。

#### GnomeExtendedGestures

对于 GNOME 环境，可以尝试 GnomeExtendedGestures（gnome-shell-extension-extended-gestures-gitAUR）。 使用该工具可以将三指水平和垂直滑动对应动作配置为相关 gnome-shell actions（例如切换应用视图或在应用间切换）。

### 使用鼠标按键实现滚动

通过配置，在按住某个鼠标按键（例如左键或者右键，或者鼠标上的其他按键）的同时移动鼠标，可以实现滚动页面的动作，这对于轨迹球之类没有滚轮的设备十分有帮助。只需要将 `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`，而且你可以通过如下方法配置滚动缩放（set a scaling factor）：

    $ xinput --set-prop 'RAPOO Rapoo 2.4G Wireless Device' 'libinput Scroll Distance Scale' 2.5 2.5

上述命令中，`RAPOO Rapoo 2.4G Wireless Device` 是你的鼠标在 `xinput --list` 输出中展示的设备名，`2.5 2.5` 是缩放比例，分别对应 x 和 y 方向。

或者你可以选择安装 libinput-multiplierAUR 并重启 Xorg，之后将y轴滚动距离配置为6倍：

    $ echo 6 > /tmp/libinput_discrete_deltay_multiplier

这个示例展示了如何在焦点发生变化时调整滚动缩放。

## 疑难解答

当遇到libinput相关问题时，可以尝试使用 `libinput debug-events` 来帮助你进行调试，相关内容请参考 libinput-debug-events(1)。

一些输入事件需要内核支持，查看支持的输入事件可以安装软件包 evemu，使用工具 `evemu-describe` 进行确认。

### 触摸板在 GNOME 中无法工作

首先需要确认触摸板的事件倍正确的发送给了 GNOME 处理，可以执行下面的命令：

    $ gsettings set org.gnome.desktop.peripherals.touchpad send-events enabled

此外，GNOME 可能会重载部分行为，例如关闭轻触点击和强制使用自然滚动（Natural Scrolling）。 如果希望进行修改，必须使用 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

## 参阅

- libinput Wayland documentation
- FOSDEM 2015 - libinput - Hans de Goede on goals and plans of the project
- Peter Hutterer's Blog - numerous posts on libinput from one of the project's hackers
- Talk by the primary libinput maintainer outlining the history and state (as of 2020) of Linux input device handling
- Blog post by the libinput maintainer outlining the rationale for libinput

Category:

- Input devices (简体中文)