Remap every button
Bind any reprogrammable control to a keystroke, a media key, a shell command, a URL, or a workspace switch. OpenLogi asks the firmware to divert the button, then synthesises whatever you mapped it to.
Remap buttons, set DPI and read real battery levels — without proprietary software, without a cloud account, and without sudo.
Wayland and X11 · No telemetry · No account
MX Master 3S
Bolt · 0x4082
Stored onboard — survives a reboot
Button mappings
Delivered by
Diversion + uinput
The firmware stops sending this button’s normal report and notifies OpenLogi instead.
Speaks HID++ over every connection Logitech ships
Capabilities
Built directly on Logitech’s HID++ protocol, so the app talks to your hardware the same way the official software does — just without the account, the telemetry, or the missing Linux build.
Bind any reprogrammable control to a keystroke, a media key, a shell command, a URL, or a workspace switch. OpenLogi asks the firmware to divert the button, then synthesises whatever you mapped it to.
Sensitivity is stored in the device’s own flash, so it survives a reboot and keeps working with OpenLogi closed. Where firmware supports it, onboard always wins over host-side trickery.
Charge level, charging status and capability are read straight from the device over HID++ — not estimated from voltage curves or guessed from a lookup table.
Screens appear because your device reports the matching HID++ feature, never because its name is on a list. Plug in hardware released next year and the right controls show up.
The one privileged step is installing a udev rule. After that, access follows your login session through a uaccess ACL and is revoked when you log out.
A software id tag on every request means OpenLogi coexists with Solaar and fwupd instead of fighting them for the device. Run all three at once.
How it works
No kernel module, no patched driver, no reverse-engineered binary blob. Just the vendor protocol, spoken correctly.
Endpoints are located by the shape of their HID report descriptor rather than by matching product ids, so receivers, Bluetooth and cabled devices all resolve the same way.
usage page 0xFF00 → hidraw nodeThe device is queried for its feature table at runtime. Screens in the app appear because the hardware reports the matching feature, never because a model name was on a list.
feature 0x2201 → DPI panelFor anything the firmware cannot do itself, OpenLogi tells it to stop emitting that button’s normal report and send a notification instead.
0x1B04 setCidReportingNotifications become input through the kernel’s uinput device. Because this happens below the display server, the same path works identically on Wayland and X11.
/dev/uinput → keystrokeTrust
Anything that can remap your mouse buttons can, by definition, synthesise keystrokes. That deserves a higher bar than the usual “trust us” — so the privilege model is deliberately narrow, and every line of it is public.
A single udev rule is installed once at setup. It grants an ACL through uaccess, so device access belongs to whoever is physically logged in and disappears at logout.
There is no account, no sync, no telemetry and no update ping. The app talks to your hardware and to your desktop session — nothing else.
Around 4,500 lines of Rust and Vue under GPL-3.0. The protocol layer, the input engine and this website are all public and readable in an afternoon.
Input synthesis uses a dedicated group that grants write access to uinput only — deliberately not the input group, which would allow reading every keystroke on the system.
FAQ
The firmware has spoken HID++ the whole time. OpenLogi is just the first Linux app that asks it properly.