#linux #input #input-event #multi-touch #gestures #gesture #syngesture

app syngestures

Linux的可配置多指手势守护进程,最初针对 xf86-input-synaptics

4 个版本 (稳定版)

2.0.0 2024年6月18日
1.0.1 2022年8月18日
1.0.0 2022年7月14日
0.1.0 2020年11月23日

操作系统 中排名 48

Download history 169/week @ 2024-06-13 41/week @ 2024-06-20 1/week @ 2024-06-27 1/week @ 2024-07-04

每月下载量 216

MIT 许可证

46KB
909 代码行

Syngestures: Linux 多点触摸协议用户空间守护进程

syngestures 是一个实用程序,为各种实现 Linux 多点触摸协议的 Linux 触控板/轨迹板驱动程序提供多手势支持,例如 xf86-input-synaptics。有关 syngesture、其开发的动力以及它如何在 X11/Wayland evdev/libinput 生态系统中定位的更多信息,请参阅发布公告

目的和设计

syngestures 是一个守护进程(后台应用程序),它监听由您的触控板或轨迹板生成的输入事件,并在检测到多指手势时进行检测。它可以配置(全局或按用户级别)在识别到特定手势时执行用户定义的操作(如果您安装了多个触控板,则支持每个设备的独特配置)。

它可以使用单独使用,或者更常见的是,与桌面环境/显示服务器集成/驱动程序一起使用 - 我们建议在 X11 下与 xf86-input-synaptics 一起使用,以获得最响应和“自然”的光标移动和加速。

依赖关系

预构建的 syngesture 二进制文件是静态编译的,没有运行时依赖项。通常从源代码构建 syngestures 会创建对 libevdev 的依赖,如果您使用的是任何现代 Linux 发行版,它应该已经安装。

安全考虑

根据您的系统配置,您可能需要添加 udev 规则或确保您的用户帐户是特定组的成员,才能在没有 root 权限的情况下使用 syngestures - 有关详细信息,请参阅下面的“故障排除”部分。 不建议以 root 或 sudo 的身份运行 syngestures,因为 syngestures 允许在触摸手势的响应下运行任意命令。

有关更多信息,请参阅下面的故障排除部分。

安装

标记为 syngestures 版本的包含预构建二进制文件的软件包可用于各种系统,并可以从 GitHub 获取(请参阅右侧的侧边栏)。

syngestures是用Rust编写的,需要安装完整的Rust工具链以及一个功能正常的C编译器才能从源代码构建。可以通过检出源代码副本并使用Rust包管理器cargo进行构建和安装。

git clone https://github.com/mqudsi/syngesture.git
cd syngesture
cargo install --path .

或者,可以直接通过cargo下载、构建和安装。

cargo install syngestures

要构建一个将事件记录到终端以进行调试的版本(对于在GitHub上提交问题所必需),您需要使用以下命令(如果您已经克隆了git仓库,请进入目录并使用下面的命令代替):cargo install syngestures(或cd进入目录,使用cargo install --path . --features logging)。

配置

syngesture通过一个或多个TOML配置文件进行配置,一个示例文件包含在这个仓库中。配置文件可以安装到机器级别的/usr/local/etc/syngestures.toml,或者安装到/usr/local/etc/syngestures.d/*.toml的多台设备配置文件,或者安装到用户级别的$HOME/.config/syngestures.toml,或者安装到$HOME/.config/syngestures.d/*.toml的多台设备配置文件。支持多个文件,并将它们连接起来,对于同一输入设备的用户配置文件将覆盖相同路径的系统配置文件。

注意,如果您以系统服务或root用户身份运行syngestures,则只能使用全局配置路径(不是以$HOME开始的路径)。

配置文件的基本格式如下,每个输入设备实现MT协议都有一个[[device]]节点。

[[device]]
device = "/dev/input/by-path/pci-0000:00:15.0-platform-i2c_designware.0-event-mouse"
gestures = [
	# Navigate next
	{ type = "swipe", direction = "right", fingers = 3, execute = "xdotool key alt+Right" },
	# Navigate previous
	{ type = "swipe", direction = "left", fingers = 3, execute = "xdotool key alt+Left" },
	# Next desktop/workspace
	{ type = "swipe", direction = "right", fingers = 4, execute = "xdotool key Super_L+Right" },
	# Previous desktop/workspace
	{ type = "swipe", direction = "left", fingers = 4, execute = "xdotool key Super_L+Left" },
]

device的值应该是您触摸板的稳定路径,通常可以通过查看dmesg的输出找到。Wayland用户可以用支持他们的显示服务器/合成器/窗口管理器的替代品替换xdotool的使用。

每个手势的type值可以是swipetap;两种情况下都需要一个从15fingers参数,但在swipe的情况下还需要一个额外的direction(可以是rightleftupdown)。

故障排除

如果您在使用syngestures时遇到如下错误(设备路径取决于您在syngestures.toml中设置的路径):

/dev/input/by-path/pci-0000:00:15.0-platform-i2c_designware.0-event-mouse: Permission denied (os error 13)

则说明您的账户没有足够的权限打开输入设备并监听事件。以root身份运行syngesturessudo syngestures)可以避免此错误,但这不是一个推荐的做法,因为syngestures可以对手势执行任意命令,并且您肯定不希望这些命令以root权限运行。

通常,正确处理这个问题就像将您的账户添加到input组并重启一样简单,但我们可以通过找出哪个组拥有输入设备(触摸板)来确认。

首先使用realpath针对您的syngestures.toml中的设备路径或从错误消息中,例如从上面的错误消息中。

$ realpath /dev/input/by-path/pci-0000:00:15.0-platform-i2c_designware.0-event-mouse
/dev/input/event4

从输出中可以看出,在这种情况下,我们的/dev/input/by-path/...设备实际上是一个指向另一个设备的符号链接,所以/dev/input/event4是我们需要检查所有权的实际路径。我们将使用ls -al来找出真正拥有它的人。

$ ls -al /dev/input/event4
crw-rw---- 1 root input 13, 68 Feb 11 16:16 /dev/input/event4

(如果您喜欢,也可以一次性使用ls -al $(realpath <original path>)来完成这项操作。)

在这里,第三列是所有者用户(root)和第四列是所有者组(input)——这正是我们所寻找的。我们需要将我们的账户添加到这个组,以便我们有权打开输入设备并监听手势。如果与ls -al输出中的所有者组不同,请在下面的代码中将input替换为所有者组。

$ sudo usermod -aG input $(whoami)

您必须在更改生效之前重启。然后您可以再次尝试运行syngestures并查看发生了什么。

许可证

syngestures由Mahmoud Al-Qudsi开发和维护,作为开源软件发布,遵循MIT许可证,版权所有 Mahmoud Al-Qudsi (c) 2020-2023。

依赖关系

~1.1–2.6MB
~57K SLoC