OpenLogi:用 Rust 重写罗技鼠标管理工具,隐私优先、无需账号
罗技的 Options+ 越来越重——300MB 的 Electron 应用、强制注册账号、后台遥测不断。如果你只是想改个鼠标按键、调个 DPI,凭什么要装这么个庞然大物?OpenLogi 用 Rust 给出了一个干净的答案:5MB 原生二进制、纯本地 TOML 配置、零网络依赖,十天内从 v0.1 冲到 v0.6,GitHub 星标破 4400。
<img src=“openlogi-icon.png” alt=“OpenLogi 官方图标” width=“200” />
一、为什么需要 OpenLogi
用过罗技鼠标的人大概都经历过这个流程:买鼠标 → 装 Options+ → 注册账号 → 等它更新 → 终于能改按键了。整个过程充满了不必要的摩擦:
- 体积膨胀:Options+ 是 Electron 应用,安装包 300MB+,吃内存、占磁盘
- 强制账号:不登录就不让你改按键,你的鼠标配置被绑在罗技的云端
- 遥测收集:后台持续收集使用数据,关闭选项藏得很深
- 更新干扰:频繁弹更新提示,有时候更新完反而出 bug
对于开发者和注重隐私的用户来说,这些都是减分项。而 Solaar 虽然开源,但只支持 Linux,且 GUI 用的是 GTK,功能也比较基础。
OpenLogi 的定位很明确:一个纯本地、轻量、开源的罗技设备管理工具。它通过 HID++ 协议直接与鼠标通信,不经过任何云端服务。
二、HID++ 协议:OpenLogi 的技术根基
要理解 OpenLogi 为什么能做到“纯本地”,得先了解 HID++ 协议。
HID++(Human Interface Device++)是罗技在标准 HID 协议基础上的私有扩展。它允许主机与罗技设备之间交换更丰富的控制信息——比如调整 DPI、切换滚轮模式、重映射按键等。这些功能在标准 HID 协议中是做不到的。
消息格式
HID++ 有两种消息格式:
| 类型 | 总长度 | 结构 |
|---|---|---|
| Short | 7 字节 | Report ID 0x10 + 6 字节 payload |
| Long | 20 字节 | Report ID 0x11 + 19 字节 payload |
每条消息包含设备索引、功能 ID、函数 ID、参数等字段。设备通过功能表(Feature Table)暴露它支持哪些能力,主机按需查询。
功能系统
HID++ 2.0 采用功能索引机制:每个功能有一个全局 ID(如 0x2201 是可调 DPI,0x2111 是 SmartShift),设备通过 IRoot(0x0000)功能查询功能表,再用索引号访问具体功能。
OpenLogi 实现了以下关键功能:
| 功能 | HID++ ID | 作用 |
|---|---|---|
| Adjustable DPI | 0x2201 |
读写 DPI 预设值 |
| SmartShift | 0x2111 |
切换棘轮/自由滚轮模式、灵敏度 |
| ReprogControls V4 | 0x1b04 |
按键重映射 |
| HiRes Wheel | 0x2120 |
高分辨率滚轮控制 |
| Unified Battery | 0x1000 |
电池状态读取 |
| Device Information | 0x0003 |
设备型号、序列号、传输方式 |
三、Rust 九个 Crate 的工程设计
OpenLogi 的代码组织非常清晰,整个项目拆成 9 个 crate,每个有单一职责:
核心层
- openlogi-core:类型定义、TOML 配置读写、39+ 动作枚举、按钮 ID 映射。不涉及 HID 和异步,纯数据层
- openlogi-hidpp:HID++ 协议实现(fork 自
lus/hidpp)。包含消息通道管理、功能注册表、设备抽象 - openlogi-hid:HID 传输层,封装
async-hid库,负责底层的 HID report 读写
功能层
- openlogi-gui:桌面 GUI,基于 Zed 编辑器的 GPUI 框架(GPU 加速渲染)。提供鼠标示意图、可点击热点、设备轮播、设置窗口
- openlogi-cli:命令行工具,支持
list(列出设备)、资产同步、设备诊断 - openlogi-agent:后台守护进程,通过 tarpc IPC 与 GUI 通信
- openlogi-hook:事件钩子。macOS 上用
CGEventTap拦截鼠标事件,检测前台应用实现按应用配置切换 - openlogi-assets:设备渲染图管理,从
assets.openlogi.org拉取并缓存 - brand:品牌资产映射
安全设计
项目在 workspace 级别设置了 unsafe_code = "deny",只有在 FFI 调用(macOS Dock 通知、CGS 热键等)的受控模块中才允许 unsafe。这保证了大部分代码的安全性。
配置文件是纯 TOML 格式,存储在 ~/.config/openlogi/config.toml,按设备 HID++ ID 分节。你可以手动编辑,也可以用 GUI 修改。
四、实际功能一览
按键重映射
支持 10 个可映射按键(左/右/中/后退/前进/DPI 切换/拇指滚轮/拇指上下/手势按钮),内置 39+ 动作:
- 编辑类:复制、粘贴、剪切、撤销、重做、全选、查找、保存
- 浏览器类:后退、前进、新标签、关闭标签、恢复标签、切换标签、刷新
- 窗口管理:Mission Control、应用 Exposé、桌面切换、显示桌面、启动台
- 媒体控制:播放/暂停、上/下一曲、音量增减、静音
- 系统操作:锁屏、截图、自定义快捷键录制
DPI 控制
通过 HID++ 0x2201 功能直接读写 DPI 预设值。支持循环切换预设、设置特定预设。
SmartShift 滚轮
针对 MX Master 系列的无级滚轮:可以切换棘轮模式(逐格滚动)和自由旋转模式,调节灵敏度阈值。
手势按钮
侧键支持按方向绑定不同动作——上滑、下滑、左滑、右滑、点击各对应一个独立动作。
按应用配置
macOS 上通过 CGEventTap 检测前台应用,自动切换鼠标配置。比如在 VS Code 里后退键映射为“撤销”,在 Chrome 里映射为“页面后退”。
设备发现
支持三种连接方式:Logi Bolt 接收器、蓝牙直连、USB 有线。目前不支持 Unifying 接收器,这是社区呼声最高的功能请求之一。
五、安装与使用
macOS(主力平台)
1 | # Homebrew 安装(推荐) |
也可以直接从 GitHub Releases 下载签名的 DMG。
Linux(CLI 预览)
1 | git clone https://github.com/AprilNEA/OpenLogi |
Linux 上目前只有 CLI,GUI 支持还在开发中。CLI 可以列出设备信息、检查电池状态。
从源码构建
1 | git clone https://github.com/AprilNEA/OpenLogi |
需要 Rust 1.85+,macOS 需要 Xcode 16+。
注意:运行前必须退出 Logitech Options+,两者会冲突(都试图访问 HID++ 设备)。
六、开发速度:十天 v0.1 到 v0.6
OpenLogi 的迭代速度令人印象深刻:
| 版本 | 日期 | 主要更新 |
|---|---|---|
| v0.1.0 | 5 月 30 日 | 首发,菜单栏应用、更新检查 |
| v0.2.0 | 6 月 1 日 | 蓝牙直连支持、俄语 i18n |
| v0.4.0 | 6 月 2 日 | 繁体中文、Linux uinput/D-Bus |
| v0.5.0 | 6 月 4 日 | G 系列键盘 RGB 控制 |
| v0.6.0 | 6 月 7 日 | tarpc IPC 架构、Crowdin 国际化 |
十天时间从零到支持蓝牙、多语言、键盘 RGB、后台守护进程——这个节奏在开源项目里相当少见。
七、局限性
OpenLogi 目前还处于快速迭代阶段,有几个明确的限制:
- 仅支持 Logi Bolt 接收器:Unifying 接收器不支持,这影响了大量老设备用户
- Windows 未支持:目前只有 macOS(完整)和 Linux(CLI 预览),Windows 的事件钩子还是 stub
- 不支持固件更新:如果需要更新鼠标固件,还得装回 Options+
- 设备类型有限:目前主要支持鼠标,G 系列键盘只支持 RGB 灯光控制
- 品牌资产受限:
design/目录下的 logo 和图标是 “all rights reserved”,使用需授权
其中 Unifying 接收器支持是 Issue #185 中讨论最多的话题。考虑到 Unifying 协议与 Bolt 协议的差异,这不是一个简单的适配工作。
八、为什么是 Rust
OpenLogi 选择 Rust 不只是“因为流行”。在这个场景下,Rust 有几个实际优势:
- 内存安全:直接操作 HID 设备需要处理底层 buffer,Rust 的所有权系统能在编译期捕获常见的内存错误
- 零运行时:不依赖 GC 或虚拟机,最终产物是一个 5MB 左右的原生二进制
- 异步生态:Tokio 提供了高效的异步 I/O,适合处理 HID 设备的请求-响应模式
- 跨平台抽象:通过 trait 系统隔离平台相关代码(
CGEventTap/uinput),核心逻辑跨平台复用
GUI 框架选用 Zed 的 GPUI 也是一个有意思的选择——GPUI 是 GPU 加速的原生 UI 框架,比 Electron 轻量得多,但生态还不够成熟。OpenLogi 同时依赖了 gpui-component(来自 Longbridge 龙证券的开源组件库),说明 GPUI 生态正在逐步形成。
九、与生态的关系
OpenLogi 的出现不是孤立事件。它反映了开发者工具领域的一个趋势:用现代语言重写老旧的系统工具,追求本地优先、隐私优先。
类似的项目有 jj(用 Rust 重写版本控制理念)、ruff(用 Rust 重写 Python linter)、uv(用 Rust 重写 Python 包管理器)。这些项目的共同点是:不是简单地重写,而是用新的语言特性和工程实践重新思考工具应该怎么设计。
对于罗技用户来说,OpenLogi 提供了一个实际可用的替代方案。虽然它还不能完全替代 Options+(缺少固件更新和 Unifying 支持),但对于只需要改按键和 DPI 的用户,它已经够用了。
相关链接
- 标题: OpenLogi:用 Rust 重写罗技鼠标管理工具,隐私优先、无需账号
- 作者: Seven
- 创建于 : 2026-06-09 10:00:00
- 更新于 : 2026-07-14 00:18:15
- 链接: https://blog.oneiseven.top/2026/06/09/OpenLogi-用Rust重写罗技鼠标管理工具/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。