Keyboards
Remap a Logitech keyboard's F-row over HID++, remap any keyboard's function keys through the OS hook, and control Fn-lock and host switching.
OpenLogi treats keyboards as first-class devices: it remaps the F-row, controls Fn-lock and backlighting over HID++, and can drag paired mice along when the keyboard switches hosts.
There are two ways to remap keys, and they are independent:
| HID++ F-row keys | Function-key remapper | |
|---|---|---|
| Scope | One Logitech keyboard | Any keyboard attached to the machine |
| Path | HID++ 0x1b04 control diversion | OS keyboard hook |
| Config | [devices.<key>.bindings] | [keyboard.bindings] |
| Edited in | config.toml | the GUI's Keys tab |
| Platforms | macOS, Linux, Windows | macOS, Windows |
HID++ F-row keys
A Logitech keyboard's media / shortcut row can be diverted key by key over HID++, so a press dispatches an OpenLogi action instead of its printed function. OpenLogi models nine Signature-series controls:
| Button name | Signature F-row position | 0x1b04 control ID |
|---|---|---|
KeySearch | F4 | 0x00d4 |
KeyDictation | F5 | 0x0103 |
KeyEmoji | F6 | 0x0108 |
KeyScreenCapture | F7 | 0x010a |
KeyMicMute | F8 | 0x011c |
KeyPlayPause | F9 | 0x00e5 |
KeyMute | F10 | 0x00e7 |
KeyVolumeDown | F11 | 0x00e8 |
KeyVolumeUp | F12 | 0x00e9 |
Only keys that carry a binding are diverted; an unbound key keeps its native firmware function and OpenLogi never touches it. A key the device doesn't expose is skipped with a log line, so a partially-supported keyboard degrades key by key instead of failing as a whole.
[devices."receiver:aabbccdd:slot:2".bindings]
KeySearch = "MissionControl"
KeyScreenCapture = "CaptureRegion"
KeyMicMute = { CustomShortcut = "Cmd+Shift+M" }Diversion works on the key's control — the printed media function — so it
fires while Fn-lock is off, or via Fn+key while it is on. The plain
F1–F12 codes of an Fn-locked row travel the ordinary HID keyboard interface
and never reach 0x1b04; remap those with the function-key remapper below.
Function-key remapper
The Keys tab remaps function keys on any keyboard through the OS hook: the keyboard photo sits beside a row of callout bubbles, and clicking a key selects it and slides in the action panel (the same catalog as the mouse picker, plus the Power User section).
Bindings are global rather than per device, and live under [keyboard.bindings]
in config.toml. Triggers are written
[modifier+]…key, with modifiers shift, control (ctrl), option
(alt), command (cmd) and keys esc, f1–f19:
[keyboard.bindings]
f1 = "MissionControl"
"shift+f2" = "ShowDesktop"
"cmd+f5" = { CustomShortcut = "Cmd+Shift+P" }Fn-lock
fn_lock flips the F-row between its printed media functions and plain
F1–F12, over HID++ fn-inversion (0x40a2, or 0x40a3 on multi-host keyboards):
[devices."receiver:aabbccdd:slot:2"]
fn_lock = true # F-row sends F1–F12 without holding Fntrue locks the row to F1–F12, false restores the printed functions, and
leaving the key out means "don't touch what the keyboard is already doing". The
state lives in device RAM per host, so the agent re-applies your choice each
time the keyboard reconnects. There is no GUI control for it yet.
Host switching
A multi-host (Easy-Switch) keyboard can pull mice along when it changes host. List the target devices' physical keys on the keyboard's entry:
[devices."receiver:aabbccdd:slot:2"]
host_switch_targets = ["receiver:aabbccdd:slot:1"]Pressing one of the keyboard's host keys switches every listed target first,
then lets the keyboard leave. Both devices must already be paired on
corresponding channels, and every target has to expose the HID++ host-switch
features (0x1814 changeHost / 0x1815 hostsInfo). Because the relationship is
keyboard-initiated, configure it on each computer the switch may start from.
Lighting
Keyboard backlight and RGB are covered in Keyboard lighting:
static per-key colour over 0x8070 / 0x8081, and monochrome backlight levels
over 0x1982.
Status: F-row diversion, Fn-lock, and host switching ride HID++ and work on macOS, Linux, and Windows. The function-key remapper needs OS keyboard events, which the hook delivers on macOS and Windows; Linux key capture is not wired up yet.