libinput
來自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/
的配置文件中為其它驅動程序配置優先。
/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
- 你可以在 MATE 的控制面板中配置滑鼠相關內容,也可以使用
使用技巧[編輯 | 編輯原始碼]
交換多指點擊動作[編輯 | 編輯原始碼]
本小節以交換觸摸板的兩指點擊與三指點擊動作為例進行說明。
為了使用兩指點擊來替代三指點擊的動作,需要修改 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 環境,可以嘗試 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