kde5与archlinux环境下配置libinput-gestures多手势操作

初衷

自己的笔记本是archlinux+kde plasma5的环境,看到同事的macbook pro支持很多手势操作(gestures),自己也希望在archlinux和kde的环境下配置方便的手势操作。

查询资料后发现touchegglibinput-gestures都可以满足需求,但是在实际配置过程中,touchegg存在很多问题一直都没能解决,而libinput-gestures基本没有太大的问题。所以本文主要介绍如何配置libinput-gestures。

预备知识

  1. 计算机窗口管理器
  2. kde是X.Org桌面环境,aur上维护了一个基于X.Org Server的驱动xf86-input-libinput-git,很方便。它们间的关系如下:


X11 client在我这里就是kde plasma5。

  1. 驱动程序libinput,linux生态提供了很多驱动,本文使用的驱动是libinput,它负责分析内核从输入设备得到的数据,发送给桌面环境,桌面环境根据不同的数据进行反馈。

术语解释

  • touchpad:通常意义上的触摸板。
  • clickpad:指底部没有按钮的touchpad,参考clickpad。clickpad中通过不同手指数量的点击行为来模拟鼠标左键、中键、右键点击。这些都可以配置或者关闭。
  • click:点击,本文语境中之物理按钮的“按压”和“释放”。
  • Clickpad software button behavior:clickpad上软按钮的行为,详情见Clickpad software button behavior

libinput

安装

  1. 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":开启点击拖拽。

调试

  1. 确定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)]
......
  1. 查看touchpad的详细配置
➜  ~ 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命令行时会用到这个路径。

  1. 使用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)
  1. 使用libinput debug-gui 监控touchpad事件
➜  ~ libinput debug-gui --device /dev/input/event10
info: event10 SynPS/2 Synaptics TouchPad     added

这时会出现一个GUI画面帮助检测。
kde-libinput-gestures-001

libinput-gestures

配置好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中的切换桌面的快捷键配置:
kde-libinput-gestures-002

Demo

  1. 四指横向滑动切换桌面:

kde-gestures-demo-1-min

  1. 四指上下滑动显示所有桌面和所有活动窗口:

kde-gestures-demo-2-min

TODOs

通过捏和(pinch in/pinch out)来放大/缩小网页(对标macbook)

$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

网页的前进/后退(对标macbook)

$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的扩展性更强一些,但是需要更专业的知识和动手能力。

相关参考


QuanTalk
公众号[机器学习与系统],专注于计算机科学与技术、独立思考、阅读分享。欢迎关注交流
585 声望
25 粉丝
0 条评论
推荐阅读
ArchLinux Plasma 简洁优雅桌面环境设置
而 Plasma 是一个由 KDE 开源社区维护的免费桌面环境,这款桌面环境的定制性也很强,可以自定义主题、应用图标、开机启动画面、窗口样式等。而且大量爱好者贡献了很多优秀插件,直接搜索安装就可以。

陆道峰阅读 1.1k

工具篇:iTerm与Zsh
iTerm2支持许多的主题配色,可以自己定义,也可以参考网上现成的主题配色。我个人比较喜欢draculatheme配色。支持item,vim,phpstorm , 下方存在主题官网路径,按照教程安装即可。

super白4阅读 4.7k

麒麟操作系统 (kylinos) 从入门到精通 - 常用软件安装 - 第三篇 常用软件安装(windows下的习惯)
本篇内容大部分从应用商店进行安装,部分通过官网下载,少部分通过命令行安装。1.原生应用1.1钉钉1.2飞书1.3 蓝信1.4 腾讯文档1.5 金山文档1.6 搜狗输入法(拼音)1.7 五笔输入法1.8 libreoffice官方也带了WPS,...

码上世界3阅读 7.4k评论 17

封面图
深入剖析容器网络和 iptables
Docker 能为我们提供很强大和灵活的网络能力,很大程度上要归功于与 iptables 的结合。在使用时,你可能没有太关注到 iptables 的作用,这是因为 Docker 已经帮我们自动完成了相关的配置。

张晋涛3阅读 1.3k

封面图
Metasploit实现木马生成、捆绑及免杀
在一次渗透测试的过程中,避免不了使用到社会工程学的方式来诱骗对方运行我们的木马或者点击我们准备好的恶意链接。木马的捆绑在社会工程学中是我们经常使用的手段,而为了躲避杀毒软件的查杀,我们又不得不对木...

白风之下1阅读 9k

麒麟操作系统 (kylinos) 从入门到精通 - 办公环境 - 第十三篇 字体安装与windows字体的利用
正常情况下,系统下的wps或libreoffice用到的字体都已默认安装。但有时候一些ttf字体或者microsoft office下一些字体需要安装。我们可以在安装好office、acrobat之后,将C:\windows\Fonts文件夹中的字体(我是win...

码上世界2阅读 3.8k

封面图
麒麟操作系统 (kylinos) 从入门到精通 - 影音娱乐- 第三十篇 利用PKS观看电视台(IPTV)直播
类别:笔记本型号:中国长城 UF712硬件平台:飞腾处理器(ArmV8 指令集)系统:银河麒麟操作系统 V10 SP1(2203) 关键词:信创,麒麟系统,linux,PKS,银河麒麟,飞腾,arm64,arm,湖南卫视,中央电视台,电视直播,iptv

码上世界1阅读 3.8k

封面图
585 声望
25 粉丝
宣传栏