OpenLogi

配置

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:1GUI 尚未把接收器槽位关联到设备自身身份时使用的连接键
raw:046d:c900:ff43:0202:serial:your-serialLitra 等独立原始 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_logintrue登录后保持后台代理可用;各平台的注册方式不同。
check_for_updatesfalse需手动开启。每次启动向 GitHub 最新发行版发一次 HEAD 请求,记录是否有新版本,自身从不下载。
auto_install_updatesfalse需手动开启,且仅在 check_for_updates 打开时生效:后台下载并暂存新版本,下次重启时应用。
update_prompt_seenfalse首次运行的「是否检查更新?」提示被回答过后置为真,此后不再弹出。
show_in_menu_bartruemacOS 菜单栏状态项与 Windows 托盘图标;Linux 上忽略。
capture_mouse_eventstrue代理是否安装系统鼠标钩子。设为 false 后按键重映射停止、不再独占任何输入设备;DPI、SmartShift 等 HID++ 侧功能照常。重启代理后生效。
mouse_profile_targetpointer鼠标按键配置使用的应用:pointer 或 focused。省略此项时也使用 pointer。
smooth_scrollfalse为符合条件的物理鼠标滚轮输入添加有限平滑动画;原生触控板 / 像素输入保持不变。
vertical_scroll_sensitivity14传统垂直滚轮距离,范围 1–100,14 为 1 倍;不缩放原生触控板输入。
auto_download_assetstrue设备出现时自动获取设备渲染图。false 表示完全不发起资源网络请求;设置里的刷新资源仍可按需拉取。
asset_sourceautomatic资源镜像:automatic(并发竞速所有内置镜像)、openlogi、cloudflare 或 fastly。
language(跟随系统)内置界面语言,例如 en、de、pt-BR 或 zh-CN;未设置时跟随系统语言。
thumbwheel_sensitivity14拇指滚轮灵敏度,范围 1–100;默认值等于 1 倍原生滚动(只有离开默认值后滚轮才会被从原生滚动中接管)。
appearancesystemsystem、light 或 dark。
ui_scalenormalsmall(90%)、normal(100%)、large(110%)或 extra_large(125%)。
device_view_modegrid首页设备布局:grid、list 或 carousel。
app_iconopenlogimacOS 应用图标: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

键默认值含义
enabledtrue是否应用静态颜色。
color"ffffff"六位十六进制 RRGGBB 静态颜色(不带 #)。
brightness1000–100,超出范围会导致加载失败。

light

键默认值含义
enabledtrue灯是否点亮。
auto_camerafalse任一摄像头启用时点亮,摄像头停用时熄灭(macOS)。
brightness_percent1000–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

本页目录