探索Syngestures:Linux多触控协议用户空间守护程序

探索Syngestures:Linux多触控协议用户空间守护程序

Syngestures是一个强大的工具,为采用Linux Multi-Touch Protocol的触摸板/触摸条驱动(如xf86-input-synaptics)提供多手势支持。这个项目的灵感来源于对Linux上更流畅、自然的多点触控体验的追求,它在X11和Wayland生态中的位置至关重要。深入了解开发背景和其在X11/Wayland环境中的作用

目的与设计

Syngestures是一个后台应用程序,监听来自你的触摸板或触摸条的输入事件,检测并识别出执行的多触控手势。你可以全局或按用户配置,当特定手势被识别时执行预定义的动作,并且针对每个设备都可以设置独特的配置(如果你有多个触摸板的话)。

它可以单独使用,但更常见的是配合桌面环境/显示服务器集成/驱动一起使用,特别是与xf86-input-synaptics在X11下结合,以实现最响应和“自然”的光标移动和加速。

依赖性

预编译的Syngestures二进制文件是静态编译的,没有运行时依赖。从源码构建通常会产生对libevdev的依赖,这在任何现代Linux发行版中应该已经安装好了。

安全注意事项

根据你的系统配置,你可能需要添加udev规则或者确保你的用户账户属于某个特定组,才能无root权限运行syngestures不建议以root权限或使用sudo运行Syngestures,因为它允许在响应触摸手势时执行任意命令

查看“故障排除”部分获取更多详细信息。

安装

对于带有标记的Syngestures版本,可以从中获取预构建的二进制包(见右侧栏)。它是用Rust语言编写,需要一个有效的Rust工具链和功能齐全的C编译器来从源码构建:

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

或者直接通过cargo下载、构建并安装:

cargo install syngestures

若要构建用于调试的日志记录版本,需要使用cargo install syngestures --features logging(如果克隆了git仓库,则进入目录后使用cargo install --path . --features logging代替)。

配置

Syngestures通过一个或多个TOML配置文件进行配置,示例文件已包含在这个存储库中。配置文件可以在机器级别安装到/usr/local/etc/syngestures.toml,或者在/usr/local/etc/syngestures.d/*.toml下使用多个设备配置文件,也可以在用户级别使用一个配置文件在$HOME/.config/syngestures.toml,或在$HOME/.config/syngestures.d/*.toml下使用多个设备配置文件。支持多个文件合并,相同输入设备的用户配置文件会覆盖系统配置文件。

请注意,如果你作为系统服务或root运行syngestures,你只能使用全局配置路径(而不是以$HOME开头的那些)。

配置文件的基本格式如下,每输入设备有一个[[device]]节点:

[[device]]
device = "/dev/input/by-path/pci-0000:00:15.0-platform-i2c_designware.0-event-mouse"
gestures = [
	# 导航下一个
	{ type = "swipe", direction = "right", fingers = 3, execute = "xdotool key alt+Right" },
	# 导航前一个
	{ type = "swipe", direction = "left", fingers = 3, execute = "xdotool key alt+Left" },
	# 切换至下一个工作区
	{ type = "swipe", direction = "right", fingers = 4, execute = "xdotool key Super_L+Right" },
	# 切换至上一个工作区
	{ type = "swipe", direction = "left", fingers = 4, execute = "xdotool key Super_L+Left" },
]

设备的device值应为稳定的设备路径,常常可以从dmesg输出中找到。如果你使用Wayland,可以将xdotool替换为支持你所用的显示服务器/合成器/窗口管理器的替代品。

每个手势的type可设为swipetap,都需要一个数字参数fingers(范围1到5),swipe类型还需一个额外的方向参数(右、左、上、下)。

故障排除

如果你遇到类似以下错误(设备路径取决于你在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组并重启,但我们可以通过检查输入设备的所有权来确定这一点(输入设备就是你在syngestures.toml中或错误消息中的路径)。

首先,使用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)——我们正在寻找的。我们需要把我们的账户添加到这个组,以赋予我们打开输入设备并监听手势的权限,将下面代码中的input替换为你ls -al输出中的拥有组名(如果有不同的话):

$ sudo usermod -aG input $(whoami)

必须重启后该更改才会生效。然后你可以再次尝试运行syngestures看会发生什么。

许可证

Syngestures由Mahmoud Al-Qudsi开发并维护,作为开源软件发布,受MIT许可证保护,版权Mahmoud Al-Qudsi(c)2020-2023。

通过以上简要介绍,你应该对Syngestures有了全面了解。它的强大在于能够自定义多种手势操作,让Linux用户体验到现代化的多触控交互方式。无论是日常办公还是娱乐,都能感受到这一工具带来的便利性。快来尝试使用这个强大的开源项目,提升你的Linux触控体验吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

施刚爽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值