触摸板上的多点触控手势

触摸板上的多点触控手势

我想知道如何在 Ubuntu 中配置多点触控手势。在 Windows 中,我可以使用 synaptics 驱动程序软件来执行此操作。

我已经习惯synclient配置点击、手掌检测、滚动等。但我还想要手势支持。这可能吗?

系统信息:Ubuntu 12.10,Synaptics 点击板

答案1

2016 年 9 月 15 日更新 Multitouch 开箱即用,下面列出的所有解决方案(mtrack、synclient、ginn 等)都会搞砸事情,因此如果您从需要它们的旧内核更新,请删除所有辅助应用程序,然后尝试使用桌面管理器的触摸板用户界面的开箱即用内核行为。它应该可以满足您的需要,如果您想要更多手势和其他东西,请添加效果很好的 easystroke。它现在已在库存内核输入驱动程序中排序,并且至少从内核 4.1.32 开始就可以正常工作,尽管一些早期的 4.0 内核无法工作。当前的 LTS 内核 4.4 和 4.7 都可以正常工作。

更新 9/2015...高于 3.14 的内核现在已内置了大部分多点触控功能,因此如果遇到问题,请尝试卸载 mtrack。自内核 3.14 以来,内置多点触控驱动程序和 easystroke 对我来说运行良好,尽管 4.0 及更高版本似乎出现了回归问题,从而破坏了苹果触控板。不过 3.18 内核运行良好。

解决方案有很多,但大多数都还不够成熟。很多文档都已经过时了,所以一定要查看你谷歌搜索的内容的日期。

Ubuntu 在鼠标/触摸板设置小程序中内置了基本的手势(2 指)支持。
我发现它随机地失效了,然后两指滚动会莫名其妙地变灰,让我不得不花很长时间在 Google 上搜索,希望能够恢复它。
然后我尝试了 touchegg,有时它还算管用。
它是最容易配置的,并且有很好的说明,但它基于一个较旧的守护进程解决方案。ubuntu
多点触控指南(您必须谷歌搜索,因为我只能提供两个链接)已经严重过时,但正在慢慢得到改进。它提供了另一套不完善的解决方案,但正在更新中。

我目前正在使用的解决方案是轨道交通(在仓库中)结合轻松一击(必须从源代码编译)。
如果我理解正确的话,Mtrack 支持多点触控的内核版本,而不是像 touchegg 和 ginn 这样的临时解决方案,但 easystroke 是另一个守护进程解决方案,目前似乎在 mtrack 上运行良好。

Mtrack 的方法似乎是发展的方向。

卸载其他东西(ginn,touchegg)如果你使用它然后从 repos 安装 mtrack,全名是xserver-xorg-输入-mtrack

配置起来很麻烦,而且我还没有用三根手指滑动。请参阅线程末尾的链接,查看人们的各种配置文件。我使用苹果魔术触控板,它在这方面表现相当不错,但它有一个恼人的故障,例如双击并拖动以移动窗口时会不稳定。解决方法是使用实​​际按钮单击来移动窗口,或者在双击并按住后犹豫一秒钟再移动窗口。

我刚刚发现轻松一击,并且直到 mtrack 获得 gui 之前,如果您有足够的冒险精神去尝试编译程序,您可能想尝试一下。

一旦通过运行编译make -j2并安装sudo make install,使用启动它以easystroke -g获取 GUI 并转到维基百科页面以获取说明。

您可能需要解决的另一个问题是驱动程序。

如果你使用轨道交通,你可能需要重新编号文件,以便你的轨道交通驱动程序最后读取或突触设置将抓取一切。

这些驱动程序存储在/usr/share/X11/xorg.conf.d

复制轨道交通司机/etc/X11/xorg.conf.d,编辑该文件夹中的设置(有关如何操作,请参阅链接线程和 README),以充分利用您的三指优势(或使用轻松一击),并将文件重命名为更高的数字,以便50-mtrack.conf变成60-mtrack.conf,否则我发现突触驱动程序会有一半的时间抓取你的触摸板。

将文件放入/ETC意味着它不会被更新覆盖,例如/usr文件,并且最后读取,因此优先于默认驱动程序/usr

希望这能有所帮助。这是一个相当活跃的开发领域,所以我写的任何内容可能在一年内就会过时,希望情况会好起来。

答案2

我只是想建议使用我在 github 上提供的 mtrack 延续版本:https://github.com/p2rkw/xf86-input-mtrack,因为它支持 3 指拖动(说明位于自述文件底部)。

我也将它与 easystroke 结合使用,但我必须修改 easystroke 以删除有关绝对设备的一些限制,通过这个简单的更改(我不记得这样做的确切原因,抱歉):

diff --git a/handler.cc b/handler.cc
index 8830ea2..c9e3f91 100644
--- a/handler.cc
+++ b/handler.cc
@@ -563,7 +563,7 @@ protected:
        }
 protected:
        void move_back() {
-               if (!prefs.move_back.get() || (xstate->current_dev && xstate->current_dev->absolute))
+               if (!prefs.move_back.get())
                        return;
                XTestFakeMotionEvent(dpy, DefaultScreen(dpy), orig_x, orig_y, 0);
        }

我还减少了手势的误差幅度:

diff --git a/gesture.cc b/gesture.cc
index 8531c08..0df990e 100644
--- a/gesture.cc
+++ b/gesture.cc
@@ -104,9 +104,9 @@ int Stroke::compare(RStroke a, RStroke b, double &score) {
                return -1;
        score = MAX(1.0 - 2.5*cost, 0.0);
        if (a->timeout)
-               return score > 0.85;
+               return score > 0.95;
        else
-               return score > 0.7;
+               return score > 0.92;
 }

...并且效果非常好。

关于痛苦配置的附注:您可以使用 xinput 进行动态配置,然后相应地编辑 xorg.conf,或者使用 xinput 调用创建启动脚本。

相关内容