libinput - Arch Linux 中文维基

跳至內容

# libinput

出自 Arch Linux 中文维基

翻譯狀態：

- 本文（或部分內容）譯自 Libinput，最近一次同步於 2022-05-18，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- Xorg
- Touchpad Synaptics
- Wayland

來自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-` 為前綴的軟體包）。

libinput-tools包軟體包帶有 `libinput` 命令，無論使用哪種顯示伺服器，都可以用它來調試函數庫與硬體之間的交互。

## 配置

在 Wayland 上, 沒有關於 libinput 的配置文件。 可配置內容由你使用的桌面環境對 libinput 的支持情況決定（參見 #圖形工具 部分），或者使用與桌面環境無關的 udev 規則來實現（參見 Calibrating Touchscreen#Do it automatically via a udev rule和 #使用 udev 規則）。要配置那些桌面環境尚未支持的選項（例如 GNOME 的觸摸板滾動速度），可以先藉助 libinput-config-gitAUR，該工具的可選配置項已於 libinput-config README 列出。

對於 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服務」 來讓功能生效。

### 使用 udev 規則

本文或本章節的語言、語法或風格需要改進。參考：幫助:風格

原因：這不像是通用的配置方法，實際上通過這種方式可以設置的不僅僅是 `LIBINPUT_CALIBRATION_MATRIX`。（在Talk:Libinput討論）

udev 和 Calibrating Touchscreen 給出了更詳細的信息，簡要總結如下：

    # libinput list-devices

該命令列印輸入設備的設備名稱（Device）和內核路徑（Kernel）。例如，內核路徑`/dev/input/event0` 的設備 `HID 02eb:114e`。

下面為該設備創建了一個規則，將所有觸控螢幕輸入旋轉 270 度：

    /etc/udev/rules.d/99-mytouchscreen-calibration.rules

    # 將輸入旋轉 270 度
    ENV{ID_USB_SERIAL}=="02eb_114e", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"

提示：參考 Libinput 文檔 中的 Static Device Configuration Via Udev 部分，以了解其他坐標變換方法。

然後，重新加載規則並查看設備是否已經成功註冊該規則：

    # udevadm info /dev/input/event0

你應該能看到該設備的 `LIBINPUT_CALIBRATION_MATRIX` 已被列出。

最後，重啟你的機器或 Wayland 桌面。

### 圖形工具

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

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

你也可以用 Xorg 配置文件實現。本例中使用的軌跡球（Trackball）帶有一個物理滾輪，沒有滾輪的設備可能需要參考 Logitech Marble Mouse 的配置。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]

自定義觸摸板的按壓靈敏度可以通過「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）與 ydotool包 中任選其一。其他可選擇的工具可以參見項目說明

提示： `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` 在打字時會禁用觸摸板。這會與某些軟體產生衝突，例如 Inkscape，該軟體具有需要在按下按鍵的同時移動滑鼠的快捷鍵。一種在打字時啟用觸摸板的方法是將下面幾行添加到 `/etc/X11/xorg.conf.d/30-touchpad.conf` 的 `InputClass` 部分：

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

也可以使用 xinput 達到同樣的效果。屬性名稱可能類似於 `libinput Disable While Typing Enabled`。

## 疑難解答

當遇到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

### 慣性滾動在 KDE 中無法工作

該功能尚未實現，參見 KDE bug 456383。對於基於 Chromium 的瀏覽器，可以安裝 SmoothScroll 擴展作為臨時解決方案。

### 進入平板電腦模式後按鍵卡住

在某些平板電腦（尤其是 Lenovo 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`會禁用導致該 bug 的行為。有關配置格式和用於選擇待配置設備的 Match 指令，請參考 Device quirks。通常可以根據針對您特定設備的現有 quirks 條目來創建覆蓋文件。默認的 quirks 文件可以在 `/usr/share/libinput/` 中找到。

## 參閱

- 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

分類：​

- 輸入設備
- 使用「模板:風格」標記的頁面或章節

libinput
新增話題