kde5与archlinux环境下配置libinput-gestures多手势操作
初衷
自己的笔记本是archlinux+kde plasma5的环境,看到同事的macbook pro支持很多手势操作(gestures)
,自己也希望在archlinux和kde的环境下配置方便的手势操作。
查询资料后发现touchegg和libinput-gestures都可以满足需求,但是在实际配置过程中,touchegg存在很多问题一直都没能解决,而libinput-gestures基本没有太大的问题。所以本文主要介绍如何配置libinput-gestures。
预备知识
计算机窗口管理器
kde是X.Org桌面环境,aur上维护了一个基于X.Org Server的驱动xf86-input-libinput-git,很方便。它们间的关系如下:
X11 client在我这里就是kde plasma5。
驱动程序libinput,linux生态提供了很多驱动,本文使用的驱动是libinput,它负责分析内核从输入设备得到的数据,发送给桌面环境,桌面环境根据不同的数据进行反馈。
术语解释
touchpad:通常意义上的触摸板。
clickpad:指底部没有按钮的touchpad,参考clickpad。clickpad中通过不同手指数量的点击行为来模拟鼠标左键、中键、右键点击。这些都可以配置或者关闭。
click:点击,本文语境中之物理按钮的“按压”和“释放”。
Clickpad software button behavior:clickpad上软按钮的行为,详情见Clickpad software button behavior。
libinput
安装
install basic libinput and xf86-input-libinput
sudo gpasswd -a $USER input sudo pacman -S libinput xf86-input-libinput
配置
libinput有两种配置方式:
使用配置文件的永久配置方式
使用xinput命令行工具,针对运行时(runtime)进行实时配置,主要用来调试。
配置文件
libinput安装后默认的配置文件在/usr/share/X11/xorg.conf.d
目录下,如何你安装多个驱动,会存在多个文件:
➜ 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会根据文件前缀数字的大小决定优先使用哪个配置文件,数字越大,优先级越高。
我们需要把默认配置文件复制到/etc/X11/xorg.conf.d/
目录下:
sudo cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/40-libinput.conf
下面是文件中touchpad部分的配置:
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,解释下几个重要的配置参数:
Option “Tapping” “on”:手指点击touchpad发送鼠标点击事件
Option “TappingButtonMap” “lmr”:1个手指点击对应
鼠标左键
,2个手指点击对应鼠标中键
,3个鼠标点击对应鼠标右键
。Option “ButtonMapping” “1 3 0 4 5 6 7”,按钮映射,详情见libinput#Button_Mapping,这里笔者关闭了3指对应的左键。
Option “DisableWhileTyping” “on”:打字时不检测touchpad事件,防止用户不小心触碰touchpad引起不必要的影响。
Option “TappingDrag” “on”:开启点击拖拽。
调试
确定touchpad设备
➜ ~ 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)] ......
查看touchpad的详细配置
➜ ~ xinput list-props "SynPS/2 Synaptics TouchPad" Device 'SynPS/2 Synaptics TouchPad':Device Enabled (142): 1Coordinate Transformation Matrix (144): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000libinput Tapping Enabled (295): 1libinput Tapping Enabled Default (296): 0libinput Tapping Drag Enabled (297): 1libinput Tapping Drag Enabled Default (298): 1libinput Tapping Drag Lock Enabled (299): 0libinput Tapping Drag Lock Enabled Default (300): 0libinput Tapping Button Mapping Enabled (301): 0, 1libinput Tapping Button Mapping Default (302): 1, 0libinput Accel Speed (277): 0.000000libinput Accel Speed Default (278): 0.000000libinput Natural Scrolling Enabled (282): 0libinput Natural Scrolling Enabled Default (283): 0libinput Send Events Modes Available (262): 1, 1libinput Send Events Mode Enabled (263): 0, 0libinput Send Events Mode Enabled Default (264): 0, 0libinput Left Handed Enabled (284): 0libinput Left Handed Enabled Default (285): 0libinput Scroll Methods Available (286): 1, 1, 0libinput Scroll Method Enabled (287): 1, 0, 0libinput Scroll Method Enabled Default (288): 1, 0, 0libinput Click Methods Available (303): 1, 1libinput Click Method Enabled (304): 1, 0libinput Click Method Enabled Default (305): 1, 0libinput Middle Emulation Enabled (291): 0libinput Middle Emulation Enabled Default (292): 0libinput Disable While Typing Enabled (306): 1libinput Disable While Typing Enabled Default (307): 1Device Node (265): "/dev/input/event10"Device Product ID (266): 2, 7libinput Drag Lock Buttons (293): <no items>libinput Horizontal Scroll Enabled (294): 1
这里面有一个值很重要Device Node (265): “/dev/input/event10”,后面使用libinput命令行时会用到这个路径。
使用libinput debug-events 监控touchpad事件
➜ ~ 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 监控touchpad事件
➜ ~ libinput debug-gui --device /dev/input/event10 info: event10 SynPS/2 Synaptics TouchPad added
这时会出现一个GUI画面帮助检测。
libinput-gestures
配置好touchpad和手势后,下面利用libinput-gestures
来解析touchpad的数据,然后执行相关的操作。这里主要用到xdotool,xdotool是模拟键盘/鼠标输入和窗口管理等的命令行工具。libinput-gestures依赖xdotool。
libinput-gestures安装后会有默认的配置,位置在/etc/libinput-gestures.conf
,用户可以在~/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中的切换桌面的快捷键配置:
Demo
四指横向滑动切换桌面:
TODOs
通过捏和(pinch in/pinch out)来放大/缩小网页(对标macbook)
网页的前进/后退(对标macbook)
待添加…
总结
本文从想法到配置好前前后后花了大约1个月时间,大部分时间用在了理解输入驱动、配置驱动以及配置调试toucgegg和libinput-gestures上了。
笔者在配置好自己的archlinux 手势后,机缘巧合用了一个星期的macbook pro,体会了苹果下面的手势操作。总体感觉苹果的手势操作更流畅,识别更准确。毕竟苹果是自己的生态系统,可以针对自己的macOS系统进行封装和调试。而在Linux生态中,因为存在多个Linux发行版和桌面环境,手势操作很难兼容所有发行版,这就要求用户要有较强的动手能力和理解能力。可以说两者都能实现丰富的手势操作,而且Linux的扩展性更强一些,但是需要更专业的知识和动手能力。
相关参考
GitHub: libinput-gestures
arch wiki: libinput
libinput official doc: related pages
libinput man page
libinput man page: based on X.Org input dirver
kde5与archlinux环境下配置libinput-gestures多手势操作相关推荐
- Window环境下配置MySQL 5.6的主从复制、备份恢复
Window环境下配置MySQL 5.6的主从复制.备份恢复 1.环境准备 Windows 7 64位 MySQL 5.6 主库:192.168.103.207 从库:192.168.103.208 ...
- Mac环境下配置Java开发环境(jdk+maven+tomcat+idea)
记录下在Mac环境下配置java开发环境,包括jdk,maven,tomcat和idea 下载及安装jdk 首先到官网下载jdk,这里就用目前官网最新的9.0.4 无脑双击安装就可以: 配置jdk 进 ...
- Windows环境下配置环境变量
安装好MySQL后,在Windows环境下配置环境变量 1)新建MYSQL_HOME系统变量 配置MySQL的安装路径:C:\Program Files\MySQL\MySQL Server 8.0 ...
- JDK5.0环境下配置PKCS#11
JDK5.0环境下配置PKCS#11 发表日期:2008-1-5 新浪微博 QQ空间 QQ微博 百度搜藏 腾讯朋友 QQ收藏 百度空间 人人网 开心网 这篇文章不介绍具体的编程方法,而是针对PKCS# ...
- 全开源深度学习平台PaddlePaddle入手之路(二)----利用Docker在Windows10专业版环境下配置PaddlePaddle...
利用Docker在Windows10专业版环境下配置PaddlePaddle 对于PaddlePaddle的安装,查询官网信息,PaddlePaddle提供pip安装和Docker安装运行的使用方式. ...
- linux 环境下配置ftp服务器
之前写了 linux 环境下安装和配置mysql数据库以及远程登录,以及linux 环境下配置python虚拟环境,这一篇记录一下 linux系统中如何安装配置 ftp . 安装ftp // ...
- 【转载】Ubuntu环境下配置Android Studio
之前学习Android开发的时候,一直跟各种教程一样,使用的是Eclipse+ADT,主要是比较方便,容易上手,特别是对于习惯用Eclipse开发java的朋友来说,上手更是好无压力.但毕竟Eclip ...
- IS环境下配置PHP5+MySql+PHPMyAdmin
IIS环境下配置PHP5+MySql+PHPMyAdmin Posted on 2009-08-07 15:18 谢启祥 阅读(1385)评论(18) 编辑 收藏 虽然主要是做.net开发的,但是,时 ...
- apache2配置支持php7,Ubuntu14.04服务器环境下配置PHP7.0+Apache2+Mysql5.7的方法
这篇文章主要介绍了Ubuntu14.04服务器环境下配置PHP7.0+Apache2+Mysql5.7的方法,较为详细的分析了Ubuntu14.04操作系统环境下配置PHP7.0+Apache2+My ...
最新文章
- cjson 对象是json数组型结构体_cJSON创建并解析json结构体 | 学步园
- python怎么写文件-python头文件怎么写
- 新设备关联Gitlab
- 深度探索c++对象模型读书笔记:Data语意学-Data Member的绑定
- 逻辑回归模型详解(Logistic Regression)
- Scala闭包特性的一个测试
- Android之华为平板打日志提示Permission denied
- java .net des_DES加密解密 JAVA与.NET互通程序代码
- 技术文档的撰写_如何撰写出色的技术博客文章
- JavaScript重难点解析3(原型与原型链、执行上下文与执行上下文栈)
- CentOS查看系统信息命令和方法
- VirtualBox中虚拟XP共享文件夹设置
- 管理数据,应用程序和主机安全-C
- Ueditor 使用
- NDS程序开发可行性分析报告
- 在mac上怎么把png转换成jpg
- 许奔创新社-第29问:什么是创新者的王者匠心?
- c语言中if函数应用举例,if函数(if函数的应用举例)
- A股-股票程序自动化交易接口
- ASP.NET_母版页嵌套母版页
热门文章
- Jboss seam特点优势
- 黄若:垂直电商里没有寒冬
- python 几何计算_【理解黎曼几何】6. 曲率的计数与计算(Python)
- for in,forEach,for of
- Webpack5中CSS处理(单独文件、兼容及压缩)
- 播放PPT时,如何可以在学员面前不显示备注呢?
- AWS和Azure频频中断,可靠性让公有云成为带刺的玫瑰
- Think Fast, Talk Smart - 8: 如何用非母语自信地进行交流
- 3 Drools语法介绍(contains和not contains,memberOf和not memberOf,matches和not matches,update,insert,retract)
- PHP添加PNG图片背景透明水印