Beautiful radial menu for Logitech MX Master mice on Linux
A Logi Options+ inspired experience β works on GNOME, KDE Plasma, Hyprland, COSMIC & more
Tip
New in v0.2.9: GNOME Wayland & COSMIC desktop support, multi-monitor HiDPI fixes, 7-level cursor fallback chain. If you change language I suggest a quick restart of JuhRadial. Update now.
| Beautiful overlay triggered by gesture button β hold to drag-select or tap to keep open. Fully configurable 8-segment wheel with smooth animations. | Submenu with Claude, ChatGPT, Gemini, and Perplexity. Launch your favorite AI assistant with a single gesture. |
| Modern GTK4/Adwaita settings app with Actions Ring configuration, theme picker, DPI control, and Easy-Switch device management. | Easy-Switch host switching with real-time paired device names via HID++. Auto-restarts on device reconnect. |
|
Multiple Themes β JuhRadial MX, Catppuccin, Nord, Dracula, Solarized, and more Flow β Multi-computer control with clipboard sync Battery Monitoring β Real-time status with instant charging detection via HID++ |
DPI Control β Visual DPI adjustment (400-8000 DPI) Native Wayland β GNOME, KDE Plasma 6, Hyprland, COSMIC, Sway & more Multi-Monitor β Correct cursor positioning across 1-4+ monitors with HiDPI |
| Desktop Environment | Cursor Detection | Status |
|---|---|---|
| GNOME (Ubuntu, Fedora, Pop!_OS) | Shell extension D-Bus | Fully supported |
| KDE Plasma 6 | KWin scripting / D-Bus | Fully supported |
| Hyprland | IPC socket | Fully supported |
| COSMIC (Fedora, Pop!_OS) | XWayland sync | Fully supported |
| Sway / wlroots | XWayland fallback | Supported |
| X11 (any DE) | xdotool | Supported |
Distros: Fedora, Ubuntu/Debian, Arch/Manjaro, openSUSE, and derivatives. The installer auto-detects your distro and package manager.
|
|
Logitech MX Master 4 β Fully supported Logitech MX Master 3S β Fully supported Logitech MX Master 3 β Fully supported |
Important
One-Line Install (Recommended) β Detects your distro, installs dependencies, builds from source, and configures everything.
curl -fsSL https://raw.githubusercontent.com/JuhLabs/juhradial-mx/master/install.sh | bashManual Install β Fedora
# 1. Install dependencies
sudo dnf install rust cargo logiops python3-pyqt6 qt6-qtsvg \
python3-gobject gtk4 libadwaita dbus-devel hidapi-devel
# 2. Clone and build
git clone https://github.com/JuhLabs/juhradial-mx.git
cd juhradial-mx
cd daemon && cargo build --release && cd ..
# 3. Configure logiops (maps haptic button to F19)
sudo cp packaging/logid.cfg /etc/logid.cfg
sudo systemctl enable --now logid
# 4. Run
./juhradial-mx.shManual Install β Arch Linux
# 1. Install dependencies
sudo pacman -S rust python-pyqt6 qt6-svg python-gobject gtk4 libadwaita
yay -S logiops # or paru -S logiops
# 2. Clone and build
git clone https://github.com/JuhLabs/juhradial-mx.git
cd juhradial-mx
cd daemon && cargo build --release && cd ..
# 3. Configure logiops
sudo cp packaging/logid.cfg /etc/logid.cfg
sudo systemctl enable --now logid
# 4. Run
./juhradial-mx.shRequirements
- Wayland compositor (GNOME, KDE Plasma 6, Hyprland, COSMIC, Sway) or X11
- logiops (logid) for button mapping
- Rust (for building the daemon)
- Python 3 with PyQt6 and GTK4/Adwaita
- XWayland (for overlay window positioning on Wayland)
Hold mode: Press and hold gesture button β drag to select β release to execute
Tap mode: Quick tap gesture button β menu stays open β click to select
| Position | Action |
|---|---|
| Top | Play/Pause |
| Top-Right | New Note |
| Right | Lock Screen |
| Bottom-Right | Settings |
| Bottom | Screenshot |
| Bottom-Left | Emoji Picker |
| Left | Files |
| Top-Left | AI (submenu) |
Configuration is stored in ~/.config/juhradial/config.json.
Open Settings and select a theme:
| Theme | Description |
|---|---|
| JuhRadial MX (default) | Premium dark theme with vibrant cyan accents |
| Catppuccin Mocha | Soothing pastel theme with lavender accents |
| Catppuccin Latte | Light pastel theme |
| Nord | Arctic, north-bluish palette |
| Dracula | Dark theme with vibrant colors |
| Solarized Light | Precision colors for machines and people |
| GitHub Light | Clean light theme |
# Add to KDE autostart
cp juhradial-mx.desktop ~/.config/autostart/
sed -i "s|Exec=.*|Exec=$(pwd)/juhradial-mx.sh|" ~/.config/autostart/juhradial-mx.desktopAutomatic: The installer detects Hyprland and configures window rules automatically.
Manual Setup
Add these rules to your hyprland.conf or custom/rules.conf:
# JuhRadial MX overlay window rules
windowrulev2 = float, title:^(JuhRadial MX)$
windowrulev2 = noblur, title:^(JuhRadial MX)$
windowrulev2 = noborder, title:^(JuhRadial MX)$
windowrulev2 = noshadow, title:^(JuhRadial MX)$
windowrulev2 = pin, title:^(JuhRadial MX)$
windowrulev2 = noanim, title:^(JuhRadial MX)$
These rules ensure the radial menu overlay appears correctly on all workspaces without animations or decorations.
| Problem | Solution |
|---|---|
| Menu doesn't appear | Check logid: sudo systemctl status logid |
| Menu at top-left corner | Log out/in to load GNOME extension, or run gnome-extensions enable [email protected] |
| Mouse not detected | Should auto-recover (udev restarts logid). Manual fix: sudo systemctl restart logid |
| Build fails | Install dev packages: hidapi-devel, dbus-devel |
| Hyprland: Menu hidden | Add window rules from Hyprland Setup section above |
| GNOME: Extension not loading | Requires session restart (log out/in) on Wayland |
Debug Mode
# Run daemon with verbose output
./daemon/target/release/juhradiald --verboseββββββββββββββββ D-Bus ββββββββββββββββββββ PyQt6 ββββββββββββββββ
β Logitech MX β ββββ logid βββ β juhradiald β βββββββββββ β Radial Menu β
β Master β (F19 key) β (Rust daemon) β overlay β (8 segments)β
ββββββββββββββββ β β ββββββββββββββββ
β Cursor Detection: β
β Hyprland IPC β ββββββββββββββββ
β KWin D-Bus β βββββββββββ β Settings β
β GNOME Extension β GTK4 β (Adwaita) β
β XWayland β ββββββββββββββββ
β xdotool β
ββββββββββββββββββββ
juhradial-mx/
βββ daemon/ # Rust daemon (HID++ listener, D-Bus, cursor detection)
β βββ src/cursor.rs # 7-level cursor fallback chain
βββ overlay/ # Python UI
β βββ juhradial-overlay.py # Main overlay entry point
β βββ overlay_cursor.py # Multi-compositor cursor detection
β βββ overlay_actions.py # Radial menu actions & themes
β βββ overlay_painting.py # Qt rendering & animations
β βββ settings_*.py # GTK4/Adwaita settings app
βββ gnome-extension/ # GNOME Shell cursor helper extension
βββ assets/ # Icons, themes, and screenshots
βββ packaging/ # logid.cfg, systemd, udev rules
Contributions are welcome! See CONTRIBUTING.md for guidelines.
GNU General Public License v3.0 β see LICENSE
- logiops β Logitech device configuration
- logitech-flow-kvm by Adam Coddington β Flow multi-computer control inspiration
- Catppuccin β Beautiful color scheme
If you find JuhRadial MX useful, consider giving it a star β it helps others discover the project!
This project is not affiliated with, endorsed by, or associated with Logitech in any way. "Logitech", "MX Master", "Logi Options+", and related names are trademarks of Logitech International S.A. This is an independent, open-source project created by the community for the community.