本身的筆記本是archlinux+kde plasma5的環境,看到同事的macbook pro支持不少手勢操做(gestures)
,本身也但願在archlinux和kde的環境下配置方便的手勢操做。php
查詢資料後發現touchegg和libinput-gestures均可以知足需求,可是在實際配置過程當中,touchegg存在不少問題一直都沒能解決,而libinput-gestures基本沒有太大的問題。因此本文主要介紹如何配置libinput-gestures。html
X11 client在我這裏就是kde plasma5。linux
sudo gpasswd -a $USER input sudo pacman -S libinput xf86-input-libinput
libinput有兩種配置方式:git
libinput安裝後默認的配置文件在/usr/share/X11/xorg.conf.d
目錄下,如何你安裝多個驅動,會存在多個文件:github
➜ xorg.conf.d ll total 12K -rw-r--r-- 1 root root 1.4K Aug 14 05:40 10-quirks.conf -rw-r--r-- 1 root root 964 May 5 20:24 40-libinput.conf -rw-r--r-- 1 root root 1.8K Nov 18 2016 70-synaptics.conf
筆者這裏安裝了3個驅動,因此有3個配置文件,默認狀況下,kde會根據文件前綴數字的大小決定優先使用哪一個配置文件,數字越大,優先級越高。chrome
咱們須要把默認配置文件複製到/etc/X11/xorg.conf.d/
目錄下:shell
sudo cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/40-libinput.conf
下面是文件中touchpad部分的配置:vim
Section "InputClass" Identifier "touchpad" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Driver "libinput" Option "Tapping" "on" Option "ButtonMapping" "1 3 0 4 5 6 7" Option "TappingButtonMap" "lmr" Option "DisableWhileTyping" "on" Option "TappingDrag" "on" EndSection
詳細參數和解釋見libinput man page: based on X.Org input dirver,解釋下幾個重要的配置參數:windows
鼠標左鍵
,2個手指點擊對應鼠標中鍵
,3個鼠標點擊對應鼠標右鍵
。➜ ~ xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)] ⎜ ↳ TPPS/2 IBM TrackPoint id=16 [slave pointer (2)] ......
➜ ~ xinput list-props "SynPS/2 Synaptics TouchPad" Device 'SynPS/2 Synaptics TouchPad': Device Enabled (142): 1 Coordinate Transformation Matrix (144): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Tapping Enabled (295): 1 libinput Tapping Enabled Default (296): 0 libinput Tapping Drag Enabled (297): 1 libinput Tapping Drag Enabled Default (298): 1 libinput Tapping Drag Lock Enabled (299): 0 libinput Tapping Drag Lock Enabled Default (300): 0 libinput Tapping Button Mapping Enabled (301): 0, 1 libinput Tapping Button Mapping Default (302): 1, 0 libinput Accel Speed (277): 0.000000 libinput Accel Speed Default (278): 0.000000 libinput Natural Scrolling Enabled (282): 0 libinput Natural Scrolling Enabled Default (283): 0 libinput Send Events Modes Available (262): 1, 1 libinput Send Events Mode Enabled (263): 0, 0 libinput Send Events Mode Enabled Default (264): 0, 0 libinput Left Handed Enabled (284): 0 libinput Left Handed Enabled Default (285): 0 libinput Scroll Methods Available (286): 1, 1, 0 libinput Scroll Method Enabled (287): 1, 0, 0 libinput Scroll Method Enabled Default (288): 1, 0, 0 libinput Click Methods Available (303): 1, 1 libinput Click Method Enabled (304): 1, 0 libinput Click Method Enabled Default (305): 1, 0 libinput Middle Emulation Enabled (291): 0 libinput Middle Emulation Enabled Default (292): 0 libinput Disable While Typing Enabled (306): 1 libinput Disable While Typing Enabled Default (307): 1 Device Node (265): "/dev/input/event10" Device Product ID (266): 2, 7 libinput Drag Lock Buttons (293): <no items> libinput Horizontal Scroll Enabled (294): 1
這裏面有一個值很重要Device Node (265): "/dev/input/event10",後面使用libinput命令行時會用到這個路徑。app
➜ ~ libinput debug-events --device /dev/input/event10 -event10 DEVICE_ADDED SynPS/2 Synaptics TouchPad seat0 default group1 cap:pg size 100x56mm tap(dl off) left scroll-nat scroll-2fg-edge click-buttonareas-clickfinger dwt-on event10 GESTURE_SWIPE_BEGIN +2.82s 3 event10 GESTURE_SWIPE_UPDATE +2.82s 3 0.00/ 0.44 ( 0.00/ 3.63 unaccelerated) event10 GESTURE_SWIPE_UPDATE +2.84s 3 0.00/ 3.43 ( 0.00/19.38 unaccelerated) event10 GESTURE_SWIPE_UPDATE +2.87s 3 0.00/ 5.00 ( 0.00/19.38 unaccelerated) event10 GESTURE_SWIPE_UPDATE +2.89s 3 0.00/ 3.33 ( 0.00/10.90 unaccelerated) event10 GESTURE_SWIPE_UPDATE +2.92s 3 0.00/ 2.74 ( 0.00/ 8.48 unaccelerated)
➜ ~ libinput debug-gui --device /dev/input/event10 info: event10 SynPS/2 Synaptics TouchPad added
這時會出現一個GUI畫面幫助檢測。
配置好touchpad和手勢後,下面利用libinput-gestures
來解析touchpad的數據,而後執行相關的操做。這裏主要用到xdotool,xdotool是模擬鍵盤/鼠標輸入和窗口管理等的命令行工具。libinput-gestures依賴xdotool。
libinput-gestures安裝後會有默認的配置,位置在/etc/libinput-gestures.conf
,用戶能夠在~/libinput-gestures.conf
$HOME/.config/libinput-gestures.conf
配置本身的配置。筆者根據本身的須要修改了相關配置,以下:
# Switch to next desktop gesture swipe right 4 xdotool key ctrl+F1 # Switch to prev desktop gesture swipe left 4 xdotool key ctrl+F2 # Present windows (current desktop) gesture swipe down 3 xdotool key ctrl+F9 # Present windows (all desktop) gesture swipe down 4 xdotool key ctrl+F10 # Show desktop gesture swipe up 3 xdotool key super+d # Show desktops grid gesture swipe up 4 xdotool key ctrl+F8
主要思想是針對不一樣的手勢觸發相關的快捷鍵,快捷鍵的配置則能夠在系統偏好設置-->快捷鍵中設置。下圖是筆者在plasma5中的切換桌面的快捷鍵配置:
$HOME/.config/libinput-gestures.conf
中添加以下內容(方向能夠本身定義):
# back history of chromium/chrome gesture swipe right 3 xdotool key alt+Left gesture swipe left 3 xdotool key alt+Right
$HOME/.config/libinput-gestures.conf
中添加以下內容
# pinch gesture pinch in 2 xdotool key ctrl+minus # 2指捏: 縮小 gesture pinch out 2 xdotool key ctrl+plus # 2指張: 放大
本文從想法到配置好前先後後花了大約1個月時間,大部分時間用在了理解輸入驅動、配置驅動以及配置調試toucgegg和libinput-gestures上了。
筆者在配置好本身的archlinux 手勢後,機緣巧合用了一個星期的macbook pro,體會了蘋果下面的手勢操做。整體感受蘋果的手勢操做更流暢,識別更準確。畢竟蘋果是本身的生態系統,能夠針對本身的macOS系統進行封裝和調試。而在Linux生態中,由於存在多個Linux發行版和桌面環境,手勢操做很難兼容全部發行版,這就要求用戶要有較強的動手能力和理解能力。能夠說二者都能實現豐富的手勢操做,並且Linux的擴展性更強一些,可是須要更專業的知識和動手能力。