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
每月下载量 216
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
值可以是swipe
或tap
;两种情况下都需要一个从1
到5
的fingers
参数,但在swipe
的情况下还需要一个额外的direction
(可以是right
、left
、up
或down
)。
故障排除
如果您在使用syngestures时遇到如下错误(设备路径取决于您在syngestures.toml
中设置的路径):
/dev/input/by-path/pci-0000:00:15.0-platform-i2c_designware.0-event-mouse: Permission denied (os error 13)
则说明您的账户没有足够的权限打开输入设备并监听事件。以root身份运行syngestures
(sudo 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