【无标题】

告别Hyprland/Niri键鼠共享难题:Pynergy ------ 为 Wayland 设计的 Synergy 兼容客户端

在 Linux 桌面全面转向 Wayland 的今天,很多老牌工具都遇到了"水土不服"。如果你是一个多设备用户,习惯使用 SynergyDeskflow (Barrier) 来共享一套键鼠,你可能发现许多 Wayland 合成器(如 hyprland/niri)因为没有实现 RemoteDesktop portal,导致官方客户端无法正常工作。

今天介绍的开源项目 Pynergy,正是为了打破这一僵局而生的。


🚀 为什么选择 Pynergy?

  • 绕过 Wayland 限制 :通过直接调用 Linux 内核的 uinput 模块来模拟输入设备。这意味着它不依赖具体的桌面环境(如 GNOME/KDE)或 Portal 接口,理论上兼容所有支持 uinput 的 Linux 发行版。
  • 兼容 Synergy 协议:它可以且仅可以作为客户端,与 Deskflow、Synergy 等服务端无缝对接。
  • 安全性:支持 TLS/mTLS 加密通信。
  • 可维护:基于 Python 3.13+ 开发,采用模块化设计,轻松添加backend。

🛠️ 功能概览

功能 状态 说明
远程控制 ✅ 已实现 完美支持鼠标和键盘的远程操控
TLS/mTLS ✅ 已实现 提供加密隧道,保障输入安全
坐标模式 ✅ 已实现 支持绝对和相对鼠标移动,适配不同显示器布局
剪贴板共享 🔄 待实现 目前可搭配 sync-clipboard 使用
NixOS 支持 ✅ 已实现 提供 Flake 支持,声明式配置更优雅

📦 快速安装与配置

1. 权限准备(重要!)

由于 Pynergy 需要直接操作 /dev/uinput,你需要给当前用户授权。

通用 Linux 做法:

创建 /etc/udev/rules.d/99-pynergy.rules

udev 复制代码
KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"

然后将自己加入 input 组并加载模块:

bash 复制代码
sudo usermod -aG input $USER
sudo modprobe uinput

2. 启动客户端

你可以直接通过命令行连接到你的服务端:

bash 复制代码
pynergy-client --server 192.168.1.1 --client-name my-linux-box

3. NixOS 用户

Pynergy 对 NixOS 非常友好,你只需要在 flake.nix 中添加 input,并在配置中简单声明:

nix 复制代码
# 在 configuration.nix 中
services.udev.extraRules = ''
  KERNEL=="uinput", MODE="0660", GROUP="input", OPTIONS+="static_node=uinput"
'';
users.users.<name>.extraGroups = [ "input" ];
boot.kernelModules = [ "uinput" ];

💡 使用小贴士

  • 平滑度调节 :如果你觉得鼠标移动有延迟或掉帧,可以尝试调整 --mouse-move-threshold 参数。
  • 自动启动 :建议配合 systemd --user 服务使用。项目 README 中提供了完整的 .service 模板,让你开机即享丝滑的跨屏体验。
  • 初次连接 :如果开启了 TLS 加密,第一次连接务必在终端手动运行,以便交互式确认服务器证书。

结语

Pynergy不追求极致的性能,而是追求最低开发难度和高可维护性,作为各个合成器实现RemoteDesktop portal前的解决方案。

🔗 项目地址https://github.com/GOKORURI007/pynergy

相关推荐
阿正的梦工坊7 小时前
深入理解 PyTorch 中的 unsqueeze 操作
人工智能·pytorch·python
FreakStudio8 小时前
硬件版【Cursor】?aily blockly IDE尝鲜封神,实战硬伤尽显
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
测试员周周10 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
2301_7838486510 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实战指南
jvm·数据库·python
CLX050511 小时前
如何安装Oracle 12c Cloud Control_OMS服务端组件与Agent部署
jvm·数据库·python
老纪12 小时前
SQL中如何查找特定的空值行:WHERE IS NULL深度解析
jvm·数据库·python
噜噜噜阿鲁~12 小时前
python学习笔记 | 10.0、面向对象编程
笔记·python·学习
weixin1997010801612 小时前
[特殊字符] RESTful API 接口规范详解:构建高效、可扩展的 Web 服务(附 Python 源码)
前端·python·restful
2301_7815714212 小时前
mysql数据库响应缓慢如何排查_使用EXPLAIN分析执行计划
jvm·数据库·python
彳亍10113 小时前
实现倒计时数字在到达1后自动隐藏(2为最后可见数字),同时继续运行至-1再终止
jvm·数据库·python