CI Crates.io Crates.io Downloads AUR version Snap GitHub stars License: GPL-2.0
A Rust rewrite of logiops, a daemon for configuring Logitech mice and keyboards on Linux via the HID++ protocol.
- DPI Configuration - Set mouse sensitivity with slider or exact values
- SmartShift - Configure scroll wheel auto-shift between ratchet and free-spin modes
- Hi-Res Scrolling - Enable high-resolution scroll wheel mode
- Thumb Wheel - Configure thumb wheel behavior (MX Master series)
- Button Remapping - Remap mouse buttons to keyboard keys or actions
- Battery Monitoring - View battery level and charging status
- D-Bus Interface - Control devices programmatically via
org.logiops.Manager1 - GUI Application - Native egui desktop app for easy configuration
- KDE Plasma Integration - Automatic scroll factor setting for Wayland
Any Logitech device supporting HID++ 2.0 protocol should work, including:
- MX Master 3 / 3S
- MX Anywhere 3
- MX Ergo
- G502 / G502 HERO
- G Pro series
- And many more...
Note: Bluetooth connections have limited support due to Linux kernel driver conflicts. Use USB (direct or via Unifying/Bolt receiver) for full functionality.
cargo install logiops-daemon
# Build cargo build --release # Install daemon and system files sudo cp target/release/logiops /usr/bin/ sudo cp data/dbus/org.logiops.conf /usr/share/dbus-1/system.d/ sudo cp data/systemd/logiops.service /etc/systemd/system/ sudo cp data/udev/99-logiops.rules /etc/udev/rules.d/ # Reload and start sudo systemctl daemon-reload sudo udevadm control --reload-rules sudo systemctl enable --now logiops # Optional: Install GUI sudo cp target/release/logiops-gui /usr/bin/
# Stable release yay -S logiops-rs # Development version (git) yay -S logiops-rs-git
sudo snap install logiops-rs
Configuration uses TOML format at /etc/logiops/config.toml or ~/.config/logiops/config.toml:
[[devices]] name = "MX Master 3S" dpi = 1600 [devices.smartshift] on = true threshold = 30 torque = 50 [devices.hiresscroll] hires = true invert = false [devices.thumbwheel] divert = false invert = false # Button remapping [[devices.buttons]] cid = 0x00c3 # Gesture button action = { type = "keypress", keys = ["KEY_LEFTMETA"] } [[devices.buttons]] cid = 0x00c4 # Thumb button action = { type = "cycledpi", dpis = [800, 1600, 3200] }
KDE Plasma on Wayland has a bug where scroll settings don't apply to hotplugged devices. logiops-rs can set the scroll factor automatically:
[[devices]] name = "MX Master 3S" kwin_scroll_factor = 1.8 # Applied via KWin D-Bus on device connect
# Start via systemd (recommended) sudo systemctl start logiops # Or run directly sudo logiops # With debug logging RUST_LOG=debug sudo logiops
The GUI connects to the daemon via D-Bus and doesn't need root privileges:
logiops-gui
# List devices busctl call org.logiops /org/logiops/Manager org.logiops.Manager1 ListDevices # Get device info busctl call org.logiops /org/logiops/Manager org.logiops.Manager1 GetDeviceInfo s "MX Master 3S" # Set DPI busctl call org.logiops /org/logiops/Manager org.logiops.Manager1 SetDpi sq "MX Master 3S" 1600 # Reload configuration busctl call org.logiops /org/logiops/Manager org.logiops.Manager1 ReloadConfig
See the Migration Guide for converting your existing libconfig++ configuration to TOML format.
- Architecture - Technical design and component overview
- Migration Guide - Converting from C++ logiops
- Bluetooth Limitations - Why Bluetooth has limited support
- Rust 1.82+
- Linux with hidraw support
cargo build --release # Build all cargo build -p logiops-daemon # Build daemon only cargo build -p logiops-gui # Build GUI only cargo test --lib # Run tests cargo clippy -- -D warnings # Lint
GPL-2.0 (matching original logiops)