packerlschupfer/pulsar-mouse-linux

GitHub: packerlschupfer/pulsar-mouse-linux

基于逆向工程的 Pulsar 游戏鼠标 Linux 原生配置工具,提供 GUI 和 CLI 双模式来调整 DPI、回报率、灯效和按键映射。

Stars: 3 | Forks: 0

Pulsar Mouse Linux

# pulsar-mouse-linux **Pulsar 游戏鼠标**的 Linux 配置工具。 插件架构 —— 每款鼠标型号都有其独立的协议驱动。 目前支持 **Pulsar X2A Medium 有线版**、**Pulsar X2H Wired Medium** 和 **Pulsar X2A 无线版**。 通过在 Windows 11 上对 Pulsar Fusion 的 USB HID 捕获进行逆向工程获得。 无线(Nordic)协议基于 andrewrabert 开发的 [python-pulsar-mouse-tool](https://github.com/andrewrabert/python-pulsar-mouse-tool)。 ## 截图 | 全局与配置文件设置 | DPI 阶段与按键绑定 | |:---:|:---:| | ![全局设置](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/52e7cd0573080014.png) | ![DPI 与按键](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/20382cfbea080019.png) | | 桌面设置与测试 | 输入测试对话框 | 系统托盘 | |:---:|:---:|:---:| | ![桌面设置](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d2cb960183080025.png) | ![输入测试](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e2c543a703080031.png) | ![托盘](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c46523fe15080037.png) | ## 支持的鼠标 | 型号 | 驱动 | VID:PID | 状态 | |---|---|---|---| | Pulsar X2A Medium Wired | `x2a` | `3710:1404` | 完全支持 | | Pulsar X2H Wired Medium | `x2h` | `3710:1403` | 完全支持 | | Pulsar Xlite v4 | `xlite_v4` | `3710:3401` | 未经测试(与 X2A 使用相同的 Sonix 协议) | | Pulsar X2A Wireless / X2 V2 Mini | `nordic` | `3554:f507` `3554:f508` | 已支持(Nordic 芯片组,支持电池状态) | 想要为你的鼠标添加支持?请查看下方的[添加新驱动](#adding-a-new-driver)。 ## 依赖要求 **Debian / Ubuntu:** ``` sudo apt install python3-usb python3-gi gir1.2-gtk-4.0 gir1.2-adw-1 gir1.2-dbusmenu-glib-0.4 ``` **Fedora:** ``` sudo dnf install python3-pyusb python3-gobject gtk4 libadwaita libdbusmenu ``` **Arch Linux:** ``` sudo pacman -S python-pyusb python-gobject gtk4 libadwaita libdbusmenu-glib ``` 在 GNOME 上,你还需要安装 AppIndicator Shell 扩展才能显示托盘图标: ``` sudo apt install gnome-shell-extension-appindicator # Debian/Ubuntu # 然后启用它 (Ubuntu): gnome-extensions enable ubuntu-appindicators@ubuntu.com # 或在其他发行版上: gnome-extensions enable appindicatorsupport@rgcjonas.gmail.com ``` 然后重启 GNOME Shell(注销/登录,或者在 X11 下按 Alt+F2 → r → 回车)。 KDE Plasma 原生支持系统托盘 —— 无需额外扩展。 ## 安装说明 ### 方式 1:软件包(.deb / .rpm) 从[最新发布版本](https://github.com/packerlschupfer/pulsar-mouse-linux/releases)下载: ``` # Debian / Ubuntu sudo dpkg -i pulsar-mouse-linux_*.deb # Fedora sudo dnf install ./pulsar-mouse-linux-*.noarch.rpm ``` ### 方式 2:AppImage(适用于任何发行版,无需安装) ``` chmod +x pulsar-mouse-linux-*-x86_64.AppImage ./pulsar-mouse-linux-*-x86_64.AppImage # GUI ./pulsar-mouse-linux-*-x86_64.AppImage --cli # CLI ``` 自带 Python + pyusb。GUI 仍然需要系统已安装 GTK4/libadwaita。 udev 规则必须单独安装(见下文)。 ### 方式 3:压缩包(适用于任何发行版) ``` tar xzf pulsar-mouse-linux-*.tar.gz cd pulsar-mouse-linux-* sudo ./install.sh ``` ### 方式 4:从 git 安装 ``` git clone https://github.com/packerlschupfer/pulsar-mouse-linux cd pulsar-mouse-linux pip install --user -e . ``` ### udev 规则(免 sudo 运行) 软件包会自动安装 udev 规则。对于 git 安装方式: ``` sudo cp udev/50-pulsar-mouse.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules && sudo udevadm trigger sudo groupadd -f plugdev && sudo usermod -aG plugdev $USER # re-login after this ``` ## GUI + 系统托盘 ``` pulsar-mouse-gui # if installed via .deb # 或者:PYTHONPATH=src python3 -m pulsar_mouse.gui ``` GTK4 + libadwaita 设置窗口,集成系统托盘: - 自动检测已连接的 Pulsar 鼠标,并根据其功能调整 UI - 启动时读取鼠标的所有设置,在点击**应用**时写入 - 通过 D-Bus StatusNotifierItem 实现系统托盘(与 GTK3 无冲突) - 托盘在设置更改时显示 DPI/回报率,并提供快速 DPI 预设和回报率单选按钮 - 点击 **X** 隐藏窗口(托盘保持运行),通过托盘菜单的**退出**可关闭程序 - 托盘菜单中提供“开机自启”开关,用于实现自动启动 - 带有鼠标示意图和事件日志的输入测试对话框 - 桌面鼠标设置(GNOME 加速配置、指针速度) ## CLI 用法 ``` # 显示所有设置(自动检测鼠标) sudo pulsar-mouse # 显示一个 profile sudo pulsar-mouse --profile 1 # 轮询率(全局) sudo pulsar-mouse --poll 1000 # 125 / 250 / 500 / 1000 # Debounce(全局,毫秒) sudo pulsar-mouse --debounce 3 # Switches(全局:开/关) sudo pulsar-mouse --angle-snap off sudo pulsar-mouse --ripple off sudo pulsar-mouse --motion-sync off # profile 1 的 DPI 阶段(最多 6 个阶段) sudo pulsar-mouse --profile 1 --dpi 400,800,1600,3200 sudo pulsar-mouse --profile 1 --dpi 400,800,1600,3200 --active-stage 2 # Lift-off 距离(按 profile) sudo pulsar-mouse --profile 1 --lod 1 # 1 mm or 2 mm # LED 亮度和效果(按 profile) sudo pulsar-mouse --profile 1 --brightness 200 sudo pulsar-mouse --profile 1 --led steady sudo pulsar-mouse --profile 1 --led breath --breath-speed 50 # 按阶段的 LED 颜色(按 profile,RGB 0-255) sudo pulsar-mouse --profile 1 --stage-color 1 255 0 0 # stage 1 = red # Button 重映射(按 profile) sudo pulsar-mouse --profile 1 --button thumb1 dpi+ sudo pulsar-mouse --profile 1 --button thumb1 ctrl+c ``` ## 添加新驱动 每款 Pulsar 鼠标型号都使用不同的 USB 协议。要为新型号添加支持: 1. 创建 `src/pulsar_mouse/drivers/yourmodel.py` 2. 继承 `pulsar_mouse.base` 中的 `PulsarDevice` 3. 将 `capabilities` 定义为类变量(一个 `DeviceCapabilities` dataclass) 4. 实现协议方法(`open`、`close`、`get/set_polling_rate`、`get/set_dpi_stages` 等) 5. 在 `pyproject.toml` 中添加 entry point: [project.entry-points."pulsar_mouse.drivers"] yourmodel = "pulsar_mouse.drivers.yourmodel:YourClass" 6. 在 `udev/50-pulsar-mouse.rules` 中为新 VID/PID 添加 udev 规则 CLI 和 GUI 将自动检测新驱动并自适应其 UI。 外部驱动包也可以通过 entry points 进行注册,而无需修改本仓库。 ## 针对游戏的系统优化 GUI 中有一个针对 GNOME 的“桌面鼠标设置”部分,但你也可以从命令行应用这些设置,或将其配置在操作系统级别。 ### 禁用鼠标加速(推荐用于 FPS 游戏) ``` # GNOME / Wayland / X11 gsettings set org.gnome.desktop.peripherals.mouse accel-profile 'flat' # 将指针速度重置为中性(0 = 不修改) gsettings set org.gnome.desktop.peripherals.mouse speed 0 ``` ### 内核启动选项(高级) 为了获得尽可能低的输入延迟,请将其添加到 `/etc/default/grub` 的 `GRUB_CMDLINE_LINUX_DEFAULT` 中: ``` usbhid.mousepoll=1 # 1ms USB polling (default is 10ms for non-gaming mice) ``` 然后运行 `sudo update-grub && reboot`。 ## 协议说明 (X2A) | 设置 | 作用域 | cat | reg (写入/读取) | sub | |---|---|---|---|---| | 回报率 | 全局 | 0x01 | 0x09 / 0x89 | 0x02 | | 消抖 | 全局 | 0x04 | 0x03 / 0x83 | 0x03 | | 角度吸附 | 全局 | 0x07 | 0x04 / 0x84 | 0x02 | | Ripple 控制 | 全局 | 0x07 | 0x03 / 0x83 | 0x02 | | 运动同步 | 全局 | 0x07 | 0x05 / 0x85 | 0x02 | | LOD | 每个配置文件 | 0x07 | 0x02 / 0x82 | 0x03 | | DPI 阶段(批量) | 每个配置文件 | 0x05 | 0x04 / 0x84 | 0x21 / 0x15 | | DPI 激活阶段 | 每个配置文件 | 0x05 | 0x01 / 0x81 | 0x02 | | 阶段 LED 颜色 | 每个配置文件 | 0x05 | 0x05 / 0x85 | 0x05 | | 亮度 | 每个配置文件 | 0x03 | 0x03 / 0x83 | 0x03 | | LED 效果 | 每个配置文件 | 0x03 | 0x04 / 0x84 | 0x0F | 数据包:64 字节,接口 3,HID Feature report (wValue=0x0300)。 校验和:bytes[62:64] = LE uint16(sum(bytes[0:62]))。 ## 鸣谢 - [@Scout339](https://github.com/Scout339) —— Logo 设计、无线鼠标测试 - [andrewrabert](https://github.com/andrewrabert) —— [python-pulsar-mouse-tool](https://github.com/andrewrabert/python-pulsar-mouse-tool),Nordic 无线协议的参考实现 ## 相关项目 - [python-pulsar-mouse-tool](https://github.com/andrewrabert/python-pulsar-mouse-tool) —— Pulsar X2 V2 Mini 的 Linux 工具(支持无线、电池状态)
标签:GTK4, Python, USB HID, 云资产清单, 外设配置, 无后门, 游戏鼠标, 逆向工具, 逆向工程