本身的笔记本是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的扩展性更强一些,可是须要更专业的知识和动手能力。