介绍
Windows 的触摸板手势可用性随着 Windows 10 的铺开愈来愈高,不仅手势的样式较前更为多样,而且顺滑度也不容置疑地有了很大的提升。相比之下,优化在桌面乏力的 Linux 在触摸板的体验,就成了生存在 Linux 用户和笔记本用户两者并集的使用者需要操心的问题了。
下文主要围绕 Wayland 自带的 libinput 而不讨论 synaptics 等替代方案。另外,本人对 libinput 的 Archwiki 中文词条 做了一些微小的贡献,可以配合食用。
编辑触摸板相关 Xorg 配置文件
Linux 的输入设备的配置文件都存储在 /etc/X11/xorg.conf.d
而 30-touchpad.conf
顾名思义为触摸板的配置信息。将其复制到 /usr/share/X11/xorg.conf.d
进行修改。此时可以引用 40-libinput.conf
的基本框架,按照以下配置格式:
|
|
其中 Option "Tapping" "on"
开启了触摸板的「触摸点按」操作。不用再按下触摸板;
Option "NaturalScrolling" "true"
则还原了更为 Natural 的滚动方向,让你得以梦回 Windows;
Option "ClickMethod" "clickfinger"
就开启「双指点按即右键单击,三指点按即中键单击」的选项。
除此之外 libinput 提供了更多关于「点按」、「滚动」、「触摸板指针加速度」等较为丰富的选项,其它的配置选项可参见 libinput 的 man page。
关于 libinput 的各种点按滚动操作,在其 文档 中有友好形象的图例帮助理解。同时,你也可以在里面看到对于其它如「小红点」、「触摸屏幕」等输入设备的配置与支持,不在本文「触摸板」的讨论范围之内,所以不议。
安装 xdotool
xdotool 是一个可以模拟键盘鼠标输入的工具。与下文提到的 libinput-gestures 包配合使用,便可以将触摸板手势绑定相应的热键或是鼠标操作,从而达到添加并优化触摸板手势的目的。
ArchWiki 中对于 Xorg 中模拟键鼠输入的 推荐 中,xdotool 被描述为「Very Buggy」,然而简单使用下来,我认为 xdotool 的使用十分简单且没有什么毛病(也许是我只是使用了它对键盘输入处理的部分 😂)以下是 xdotool 的基本操作:
|
|
这可以说是非常明了的语法了。值得注意的是,对于几个特殊的按键,xdotool 是这么称呼的:「1」鼠标左键、「2」鼠标中键、「3」鼠标右键,「Left」方向左键、「Right」方向右键、「Super」Windows 徽标键、「plus」加号、「minus」减号。
xdotool 还支持窗口检索、获取窗口焦点等功能,可以实现大部分键鼠自动化的需求。
使用 libinput-gestures
安装 libinput-gestures 并将当前用户添加到 input 组,将配置文件模板 /etc/libinput-gestures.conf
复制到 ~/.config/
下进行修改。启动 libinput-gestures-setup
进行初始化。
|
|
其中 gestures 在 libinput-gestures 的认知中有 swipe
和pinch
两种,分别对应手指在触摸板上滑动和捏合操作。众所周知,这 Ctrl
+ +
和 Ctrl
+ -
两个热键基本可以实现大多数软件视图上的放大和缩小,习惯上我们把双指张开作放大操作,双指捏合作缩小操作,所以先添加到 ~/.config/libinput-gestures.conf
中。
|
|
关于 pinch
,你可以指定 in
和 out
和参与动作的手指数量。同理,对于 swipe
,参与动作的手指数量和滑动的四个方向(分为 Left
、Right
、Up
、Down
)也可以被指定,以下则是一个左右滑动实现在 Chrome 中切换标签页的例子。
|
|
向右三指滑动进入下一个标签页,向左三指滑动进入上一个标签页。虽然没有相应动画反馈,但也用得顺手。
通过阅读 libinput-gestures 相关章节 对于原理的介绍得知,触摸板对于参与动作手指数量相同的 swipe 和 pinch 的区分判断并不是完全准确,所以不要配置出同手指数量的两种不同动作共存,后期体验会比较差,较大概率发生误判。特别是同手指数量滑动但是不同方向的时候,如配置双指左右滑动切换应用,很可能与双指上下滑动,也就是滚动的动作产生冲突。
更多可能性
当然,libinput-gestures 和 xdotool 并非必须配合使用,也可以使用支持键鼠输入的如 xte、xvkbd,而它们的操作与 xdotool 大体上也是相同的。
以下是 xvkbd 分别实现了 鼠标左键点击
and Ctrl+Tab
的例子。
|
|
xte 对组合键的操作是使用 keydown
和 keyup
实现的。以下是 xte 实现了 Ctrl+Tab
的例子。
|
|
同样,你也可以直接给 libinput-gestures 绑定启动一个应用,如四指上滑呼出应用快捷入口。
遇到触摸板指针跳跃闪烁,或者手势严重误判的时候,可以尝试用以下命令重启 libinput-gestures。
|
|
感谢阅读 💗