配置
TOML 配置文件参考:位置、结构、全部键值、动作与手势绑定。
OpenLogi 把所有设置存放在一个 TOML 文件里。GUI 会替你写入:主窗口负责按键绑定、Actions Ring、DPI 预设、SmartShift、滚轮、灯光与摄像头控制,设置窗口(⌘,)负责应用级偏好,但这个文件是纯文本,可以放心手工编辑。Buttons 工作区也有 Profile 选择器,可以编辑按应用叠加。
GUI 会原子保存,并保留已有注释与格式。如果编辑器在 OpenLogi 加载后修改了文件,下一次 GUI 保存会被拒绝,而不是覆盖外部修改。重新启动 OpenLogi 即可载入该版本;打开 GUI 时也会通知常驻代理重新加载。
文件位置
| 平台 | 路径 |
|---|---|
| macOS / Linux | $XDG_CONFIG_HOME/openlogi/config.toml(默认 ~/.config/openlogi/config.toml) |
| Windows | %USERPROFILE%\.config\openlogi\config.toml |
配置结构采用严格解析。未知、过时、格式错误或超出范围的值会阻止文件加载,而不会悄悄恢复默认。GUI
会打开只读错误页,显示 TOML 错误,并提供打开配置目录和修复后重启的按钮。每个进程首次保存前,OpenLogi
会把旧文件复制为 config.toml.backup.1,并轮转到 config.toml.backup.5;迁移旧结构时还会创建
config.toml.v4.bak 这样的版本备份。文件以原子方式写入,在 Unix 上权限为 0600。
顶层结构
schema_version = 7 # 必填;0 或高于当前构建的版本会被拒绝
selected_device = "unit:6be9d300" # 当前选中设备的物理键
[app_settings] # 应用级偏好(全为默认值时整块省略)
# …
[devices."unit:6be9d300"] # 每个物理设备一个块
# …
[keyboard.bindings] # 系统级功能键重映射
# …schema_version—— 结构版本(当前为7)。受支持的旧文件会在加载时迁移;更高版本会在解析字段前被拒绝。v5 让设备自身身份不再依赖连接方式,v6 加入短按 / 长按组合,v7 归一化拇指滚轮方向。更早的迁移仍涵盖 v4 取消手势所有权锁、v3 改用物理设备键,以及 v2 合并为单一bindings。selected_device—— 记住上次选中的设备;未设置时省略。[app_settings]—— 见下文;所有字段都是默认值时整块省略。[devices.<key>]—— 按物理设备身份索引的每设备设置(见下文)。[keyboard]—— 与设备无关的功能键重映射,走系统钩子而非 HID++。
设备键
设备块按物理身份而非型号索引,两只同型号鼠标不会共享设置。自结构 v5 起,只要 HID++ 设备身份已知,设置就不再依赖连接方式:
| 形式 | 含义 |
|---|---|
unit:6be9d300 | 非零的四字节 HID++ unit id(八位小写十六进制) |
serial:abc123 | 非空、已转为小写的设备序列号 |
receiver:aabbccdd:slot:1 | GUI 尚未把接收器槽位关联到设备自身身份时使用的连接键 |
raw:046d:c900:ff43:0202:serial:your-serial | Litra 等独立原始 HID 设备;驱动提供时也可使用 stable:<id> |
GUI 若先后通过 Bolt 接收器和线缆观察到同一个 unit:6be9d300,会把两条连接合并到同一设备项,连接则保留为 link 键:
[devices."unit:6be9d300".links."receiver:aabbccdd:slot:1"]
[devices."unit:6be9d300".links."direct:046d:c08d".capabilities]
buttons = true
pointer = true因此能力与有意设置的连接差异可以按 link 保存,而普通设置会随同一物理设备跨连接方式生效。不要手工拼接设备键:先在应用里配置或重命名一次设备,再从
config.toml 复制生成的键。既无序列号、unit id 又全为零的直连 HID++ 设备无法获得稳定持久身份。没有 USB
序列号的摄像头改用操作系统捕获 id,换 USB 端口后可能需要重新命名。
[app_settings]
mouse_profile_target 决定鼠标按键配置使用哪个应用。默认值 pointer 在 macOS、Windows 与 X11 上跟随指针所在窗口;Wayland 等不支持的会话使用焦点应用。设为 focused 可在所有平台上跟随键盘焦点。键盘配置与 Actions Ring 布局始终跟随焦点应用。
在支持指针目标的平台上,pointer 模式会在指针位于桌面背景时使用全局鼠标绑定。OpenLogi 不会为了发送快捷键而激活后台窗口:目标窗口没有焦点时,会跳过发送按键或运行工作流的鼠标绑定。示例见按应用配置。
| 键 | 默认值 | 含义 |
|---|---|---|
launch_at_login | true | 登录后保持后台代理可用;各平台的注册方式不同。 |
check_for_updates | false | 需手动开启。每次启动向 GitHub 最新发行版发一次 HEAD 请求,记录是否有新版本,自身从不下载。 |
auto_install_updates | false | 需手动开启,且仅在 check_for_updates 打开时生效:后台下载并暂存新版本,下次重启时应用。 |
update_prompt_seen | false | 首次运行的「是否检查更新?」提示被回答过后置为真,此后不再弹出。 |
show_in_menu_bar | true | macOS 菜单栏状态项与 Windows 托盘图标;Linux 上忽略。 |
capture_mouse_events | true | 代理是否安装系统鼠标钩子。设为 false 后按键重映射停止、不再独占任何输入设备;DPI、SmartShift 等 HID++ 侧功能照常。重启代理后生效。 |
mouse_profile_target | pointer | 鼠标按键配置使用的应用:pointer 或 focused。省略此项时也使用 pointer。 |
smooth_scroll | false | 为符合条件的物理鼠标滚轮输入添加有限平滑动画;原生触控板 / 像素输入保持不变。 |
vertical_scroll_sensitivity | 14 | 传统垂直滚轮距离,范围 1–100,14 为 1 倍;不缩放原生触控板输入。 |
auto_download_assets | true | 设备出现时自动获取设备渲染图。false 表示完全不发起资源网络请求;设置里的刷新资源仍可按需拉取。 |
asset_source | automatic | 资源镜像:automatic(并发竞速所有内置镜像)、openlogi、cloudflare 或 fastly。 |
language | (跟随系统) | 内置界面语言,例如 en、de、pt-BR 或 zh-CN;未设置时跟随系统语言。 |
thumbwheel_sensitivity | 14 | 拇指滚轮灵敏度,范围 1–100;默认值等于 1 倍原生滚动(只有离开默认值后滚轮才会被从原生滚动中接管)。 |
appearance | system | system、light 或 dark。 |
ui_scale | normal | small(90%)、normal(100%)、large(110%)或 extra_large(125%)。 |
device_view_mode | grid | 首页设备布局:grid、list 或 carousel。 |
app_icon | openlogi | macOS 应用图标:openlogi 或 prism;Linux 与 Windows 上不生效。 |
theme_light | (品牌主题) | 浅色模式使用的主题名,例如 "OpenLogi Light"。 |
theme_dark | (品牌主题) | 深色模式使用的主题名。 |
ui_radius | (主题默认) | 圆角覆盖值(像素);外观页提供 0 / 6 / 12。 |
每设备块
每个 [devices.<key>] 块保存一台物理设备的设置。
| 键 | 类型 | 含义 |
|---|---|---|
enabled | 布尔 | false 表示完全放任该设备:不建立 HID++ 捕获会话,重连时也不重新下发设置。默认 true。 |
custom_name | 字符串 | 从设备卡片的重命名操作设置的别名;在 GUI 中留空会恢复型号名称。 |
links | 表 | 由应用管理的连接、按连接实测能力,以及可选的有意按连接覆盖。 |
bindings | 表 | 把逻辑按键映射到单动作、{ short, long } 组合,或按方向的手势子表。 |
per_app_bindings | 表的表 | 按应用选择器索引的稀疏叠加。鼠标遵循 mouse_profile_target,键盘遵循焦点;未列出的按键回落到 bindings。 |
action_ring | 表 | Actions Ring 的开关、触感、默认布局与按应用布局。 |
dpi_presets | 整数数组 | 有序 DPI 列表,供 CycleDpiPresets 循环、SetDpiPreset 按索引取用。 |
dpi | 整数 | 已确认的传感器 DPI。该值存于设备内存,代理会在重连时重新下发。 |
smartshift | 表 | mode(ratchet / free)、auto_disengage、tunable_torque,重连时重新下发。 |
invert_scroll | 布尔 | 反转本设备的原生滚轮方向,不影响系统触控板方向。 |
scroll_resolution | 字符串 | low 或 high。持久化的 HID++ 0x2121 滚轮分辨率。缺省表示不干预设备自身设置。 |
thumbwheel_sensitivity | 整数 | 覆盖应用级的拇指滚轮灵敏度。 |
lighting | 表 | HID++ 键盘的静态 RGB,见下文。 |
light | 表 | 独立补光灯(Litra)的开关、亮度、色温,见 Litra 补光灯。 |
camera_controls | 表 | 摄像头 UVC 控制项,按控制名索引。 |
camera_profiles | 表的表 | 用户保存的摄像头预设(名称 → 控制快照)。 |
camera_profile | 字符串 | GUI 上次应用的摄像头预设。 |
host_switch_targets | 设备键数组 | 跟随该键盘 Easy-Switch 通道切换的鼠标设备键。 |
fn_lock | 布尔 | 仅键盘。true 表示无需按住 Fn,F 区直接发送 F1–F12;缺省表示不改动键盘自身状态。重连时重新下发。 |
identity | 表 | 由应用写入:最近一次的名称、类型与能力,让休眠设备也能渲染出对应面板。不建议手写。 |
disabled_gestures | 表 | 由应用写入:手势模式当前关闭的按键的方向映射,重新开启时可原样恢复。 |
lighting
| 键 | 默认值 | 含义 |
|---|---|---|
enabled | true | 是否应用静态颜色。 |
color | "ffffff" | 六位十六进制 RRGGBB 静态颜色(不带 #)。 |
brightness | 100 | 0–100,超出范围会导致加载失败。 |
light
| 键 | 默认值 | 含义 |
|---|---|---|
enabled | true | 灯是否点亮。 |
auto_camera | false | 任一摄像头启用时点亮,摄像头停用时熄灭(macOS)。 |
brightness_percent | 100 | 0–100,映射到设备原生范围(例如 Litra 的 20–250 流明)。 |
temperature_kelvin | (未设) | 色温,设备支持时可用(Litra:2700–6500 K,步进 100 K)。 |
按键
bindings 与 per_app_bindings 以逻辑按键为键。
鼠标控件:LeftClick、RightClick、MiddleClick、Back、Forward、DpiToggle(滚轮下方的模式切换键)、Thumbwheel(其电容触碰)、ThumbwheelScrollUp、ThumbwheelScrollDown、GestureButton、HapticPanel(MX
Master 4 的 Haptic Sense 触感面板)、WheelTiltLeft 与 WheelTiltRight。Thumbwheel
实际表示噪声较多的电容触碰,而不是机械点击;默认不执行动作,GUI 也不提供该控件。
键盘 F 区控件,只有绑定后才会通过 HID++ 接管:KeySearch、KeyDictation、KeyEmoji、KeyScreenCapture、KeyMicMute、KeyPlayPause、KeyMute、KeyVolumeDown、KeyVolumeUp。参见键盘。
动作
绑定值就是动作名,原样书写:
- 屏蔽 ——
None(捕获输入但什么都不做) - 鼠标 ——
LeftClick、RightClick、MiddleClick、MouseBack、MouseForward(真实的扩展键事件,多数应用会当作原生的后退 / 前进) - 编辑 ——
Copy、Paste、Cut、Undo、Redo、SelectAll、Find、Save - 浏览器与标签页 ——
BrowserBack、BrowserForward、NewTab、CloseTab、ReopenTab、NextTab、PrevTab、ReloadPage - 窗口与桌面(macOS) ——
MissionControl、AppExpose、PreviousDesktop、NextDesktop、ShowDesktop、LaunchpadShow - 系统 ——
LockScreen、Screenshot、CaptureRegion、Sleep、ShowActionsRing、OpenApplication - 媒体 ——
PlayPause、NextTrack、PrevTrack、VolumeUp、VolumeDown、MuteVolume - DPI 与滚轮 ——
CycleDpiPresets、SetDpiPreset、ToggleSmartShift - 滚动 ——
ScrollUp、ScrollDown、HorizontalScrollLeft、HorizontalScrollRight - 进阶 ——
CustomShortcut、HoldShortcut、TypeText、RunAppleScript、RunShellCommand、Workflow
ShowActionsRing 可直接在动作选择器中选取。带参数的动作写成单键表:
HapticPanel = "ShowActionsRing" # 普通动作
DpiToggle = { SetDpiPreset = 2 } # 预设索引
Back = { CustomShortcut = "Cmd+Shift+P" } # 组合键
Forward = { OpenApplication = { path = "~/Downloads", display_name = "Downloads" } }
MiddleClick = { HoldShortcut = "Ctrl+Space" } # 持续到物理按键松开OpenApplication 接受应用、文件夹、文件系统路径或 URL;执行时会展开开头的 ~。CustomShortcut
保存与平台无关的组合键文本,例如 Cmd+Shift+P、Ctrl+Alt+Left 或 F5。不同编辑器对带参数动作的 GUI
支持并不相同;鼠标检查器的动作选择器只显示普通目录,手写绑定仍可使用这些表形态。HoldShortcut
还有下文所述的额外限制。
短按 / 长按与持续快捷键
设备级按键可使用小写 short / long 组合:
DpiToggle = { short = "ShowDesktop", long = "MissionControl" }
Back = { short = "MouseBack", long = { HoldShortcut = "Ctrl+Space" } }在 500 毫秒前松开会执行 short;达到 500 毫秒会执行一次 long,之后松开不会再执行
short。若在得出结果前捕获中断、绑定变化或代理退出,两者都不会执行。只能报告瞬时脉冲的来源会回退到 short。
CustomShortcut 会立即按下并松开组合键;HoldShortcut 会保持按下,直到发起它的物理按键松开,也会在捕获取消、绑定失效或代理退出时释放。它适合按住说话;作为
long 动作时,会从 500 毫秒阈值开始保持到物理松开。
GUI 目前只显示组合中的 short 动作;在选择器中修改会把整个组合替换成单动作。短按 / 长按组合与
HoldShortcut 暂时请在 TOML 中编写。per_app_bindings 与 keyboard.bindings 仍是单动作映射。
手势绑定
任何受支持的按键都可以处于手势模式:它在 bindings 里的条目从单个动作变成以 Up、Down、Left、Right、Click(不含滑动的单纯按下)为键的子表。自
v4 起这是每个按键各自的状态,可以同时有多个按键处于手势模式,设备级的 gesture_owner 键已经取消(加载
v3 文件时,旧的所有权会被迁移成等价的绑定形态)。
[devices."unit:6be9d300".bindings.GestureButton]
Up = "MissionControl"
Down = "ShowDesktop"
Left = "PrevTab"
Right = "NextTab"
Click = "AppExpose"GUI 可为后退、前进、DPI/ModeShift、专用手势键与 MX Master 4 的 Haptic Sense 面板新建手势。后退 / 前进走系统钩子;三个专用 HID++ 控件走原始 XY 接管,其中 DPI/ModeShift 只有在设备实测支持原始 XY 后才可开启。v0.8.0 写入的中键手势图会被保留,在关闭前仍可编辑,但 GUI 无法再次开启。手势方向图始终是设备级的;按应用的单动作覆盖会在该应用里暂时取代整个手势键。
[keyboard]
面向任意键盘的功能键重映射,与设备无关,由系统钩子驱动。键为 [修饰键+]…按键
形式,修饰键有 shift、control(ctrl)、option(alt)、command(cmd),按键为 esc 与
f1–f19:
[keyboard.bindings]
f1 = "MissionControl"
"shift+f2" = "ShowDesktop"
"cmd+f5" = { CustomShortcut = "Cmd+Shift+P" }它与罗技键盘在 [devices.<key>.bindings] 下的 HID++ F 区绑定是两件事,如何取舍见键盘。
示例
schema_version = 7
selected_device = "unit:6be9d300"
[app_settings]
launch_at_login = true
language = "zh-CN"
thumbwheel_sensitivity = 14
smooth_scroll = false
vertical_scroll_sensitivity = 14
appearance = "system"
ui_scale = "normal"
device_view_mode = "grid"
# 同一只鼠标,无论通过接收器还是线缆连接。
[devices."unit:6be9d300"]
custom_name = "办公鼠标"
dpi_presets = [800, 1600, 3200]
dpi = 1600
invert_scroll = true
scroll_resolution = "high"
[devices."unit:6be9d300".bindings]
Back = "MouseBack"
Forward = { short = "MouseForward", long = "MissionControl" }
MiddleClick = { HoldShortcut = "Ctrl+Space" }
HapticPanel = "ShowActionsRing"
ThumbwheelScrollUp = "HorizontalScrollLeft"
ThumbwheelScrollDown = "HorizontalScrollRight"
# 手势键按方向绑定;Click 是单纯按下。
[devices."unit:6be9d300".bindings.GestureButton]
Left = "PrevTab"
Right = "NextTab"
Click = "PlayPause"
# VS Code 必须是鼠标目标且具有焦点,才能执行撤销。
[devices."unit:6be9d300".per_app_bindings."com.microsoft.VSCode"]
Back = "Undo"
[devices."unit:6be9d300".smartshift]
mode = "ratchet"
auto_disengage = 16
tunable_torque = 0
[devices."unit:6be9d300".action_ring]
enabled = true
haptics = true
[devices."unit:6be9d300".action_ring.default.slots]
Top = { action = "Cut" }
TopRight = { action = "Copy" }
Right = { action = "Paste", label = "Paste It" }
BottomRight = { action = "BrowserForward" }
Bottom = { action = "PlayPause" }
BottomLeft = { action = "BrowserBack" }
Left = { action = "Undo" }
TopLeft = { action = "Redo" }
# 由应用管理的同一物理鼠标连接。
[devices."unit:6be9d300".links."receiver:aabbccdd:slot:1"]
[devices."unit:6be9d300".links."direct:046d:c08d"]
# Signature 系列键盘:F 区通过 HID++ 接管,Fn-lock 关闭。
[devices."receiver:aabbccdd:slot:2"]
fn_lock = false
host_switch_targets = ["unit:6be9d300"]
[devices."receiver:aabbccdd:slot:2".bindings]
KeySearch = "MissionControl"
KeyScreenCapture = "CaptureRegion"
[devices."receiver:aabbccdd:slot:2".lighting]
enabled = true
color = "ff0000"
brightness = 80
# 一只 Litra Glow,按其原始 HID 身份索引。
[devices."raw:046d:c900:ff43:0202:serial:YOUR-SERIAL".light]
enabled = true
auto_camera = true
brightness_percent = 65
temperature_kelvin = 4600来源: CONFIGURATION.md