libinput

出自 Arch Linux 中文维基

來自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:
  • 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)與 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 環境,可以嘗試 GnomeExtendedGesturesgnome-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

參閱[編輯 | 編輯原始碼]