juhradial-mx README

The project's README from github.com/JuhLabs/juhradial-mx. As one markdown file: README.md.

JuhRadial MX logo
JuhRadial MX

Open-source Linux control for Logitech MX Master mice, the MX Keypad and the MX Keys S.

Radial actions, button remapping, per-app profiles, MX Master 4 haptics, display keys, Easy-Switch and cross-computer control, on Wayland and X11.

Version 0.4.5-beta.3 Documentation Build Status Total downloads OpenSSF Best Practices License: GPL-3.0 GitHub Stars

Install

Paste one line into a terminal as your normal user (not with sudo). The installer finds your distro, shows what it will change, and asks for sudo only for packages and system paths. It runs on these distributions and their derivatives:

Fedora Ubuntu Debian Linux Mint Pop!_OS Zorin
Arch Manjaro EndeavourOS CachyOS openSUSE

curl -fsSL https://raw.githubusercontent.com/JuhLabs/juhradial-mx/master/install.sh | bash

Bazzite Fedora Silverblue Kinoite

Image-based systems install under ~/.local; sudo is used only for the udev rules, uinput and the input group (add --yes to skip the questions):

curl -fsSL https://raw.githubusercontent.com/JuhLabs/juhradial-mx/master/install.sh | bash -s -- --user

NixOS

Try it without installing (the NixOS module is under Other ways to install):

nix run github:JuhLabs/juhradial-mx

If the installer adds you to the input group, log out and back in once. Minimal systems may need curl first (sudo apt install curl on Debian and Ubuntu). Coming from 0.4.4? Run the same line again; Upgrading from 0.4.4 has the details.

Other ways to install

Path How
Debian / Ubuntu package Download the .deb from the release, then sudo apt install ./juhradial-mx_*.deb
Fedora package Download the .rpm from the release, then sudo dnf install ./juhradial-mx-*.rpm
Arch Linux Build packaging/arch/PKGBUILD with makepkg -si (not on the AUR yet)
NixOS module Add the flake input, import juhradial-mx.nixosModules.default and set services.juhradial-mx.enable = true;
From source Clone the repository, build daemon/ with Cargo, then run scripts/juhradial-mx.sh
Flatpak An experimental manifest; not published

The .deb and .rpm install the program, udev rules and user service, but not the per-user setup the installer does. After installing one, add yourself to the input group (sudo usermod -aG input $USER), log out and back in, run systemctl --user enable --now juhradialmx-daemon, then start juhradial-mx. GNOME needs the cursor helper extension, which only the one-line installer sets up, so GNOME users should prefer the installer. The installation guide covers requirements, manual setup per distro and NixOS.

[!NOTE] This is JuhRadial MX 0.4.5 Beta 3 (0.4.5-beta.3). The release is feature complete: a redesigned Settings app, MX Keypad and MX Keys S support, and a long list of fixes. It is marked beta because so much is new, and we want it tested on more hardware and desktops before the stable 0.4.5. If something breaks or feels wrong, please open an issue with your distro, desktop, device and connection (Bolt, Unifying or Bluetooth). Devices → Copy diagnostics in Settings copies the details and the last service log lines for you. Ideas and questions are welcome in Discussions.

What's new since 0.4.4

Added

Improved

Fixed

The full list, with credits and issue links, is in the changelog.

What it is

JuhRadial MX is a native Linux companion for Logitech MX devices. A small Rust daemon talks HID++ to the hardware, a PyQt6 overlay draws the radial menu at your cursor, and the new Qt/QML Settings app configures everything: buttons, gestures, haptics, scrolling, per-app profiles, Easy-Switch, the MX Keypad's display keys and the MX Keys S backlight. The MX Master 4 gets the full feature set, including its haptic motor; the MX Master 3S and 3 use every control they expose, and most other mice can use generic mode for extra-button remapping.

JuhRadial MX Settings, Buttons page: the MX Master 4 with clickable button callouts and the Actions Ring editor
The new Settings app: click a button on the mouse to reassign it, click a slice of the Actions Ring to edit it

Highlights

Mouse (MX Master 4, 3S and 3)

JuhRadial MX Settings, Haptics page with strength, style and per-event patterns
Haptics: one switch and one pattern per event, previewed on hover

MX Keypad

JuhRadial MX Settings, MX Keypad page with the Media template on the key plates
MX Keypad: the key plates as they look on the device, with the key editor beside them

MX Keys S (opt-in)

Settings app and look

JuhRadial MX Settings, Themes page with twelve colour themes and wheel skins
Themes: twelve accents with matched wallpapers, and wheel skins picked separately

Profiles, automation and more

The full list, with credits and issue links, is in the changelog.

Supported devices and desktops

Devices

Device Support
Logitech MX Master 4 Primary target: HID++ controls, Actions Ring, remapping, directional gestures, Easy-Switch, live state and haptics.
Logitech MX Master 3S / 3 Everything above except haptics (these mice have no haptic motor), with their own product photo and button layout.
Logitech MX Keypad (USB) Display keys, pages, app profiles, folders and packs.
Logitech MX Keys S Battery, backlight, Easy-Switch follow and key remapping, opt-in and in beta.
Other Logitech HID++ mice The controls the mouse reports can be assigned (for example the side buttons of an MX Anywhere). Not every model has been tested.
Most other mice Generic evdev mode for extra-button radial input and remapping.

Bolt, Unifying and Bluetooth connections are supported, including two receivers on one machine.

Desktops

Desktop Menu placement Per-app profiles and app-switch haptics
KDE Plasma 6 KWin script All apps
GNOME 45 to 51 Cursor helper extension (installed by the one-line installer) XWayland apps only
Hyprland IPC socket All apps
COSMIC XWayland XWayland apps only
sway / wlroots XWayland XWayland apps only
niri Native layer-shell surface with gtk4-layer-shell, otherwise XWayland through xwayland-satellite XWayland apps only
X11 (any desktop) XQueryPointer All apps

Known limits, workarounds and what is being worked on

See compositor support for the details per desktop.

Upgrading from 0.4.4

  1. Optional: back up your setup with cp -r ~/.config/juhradial ~/juhradial-backup.
  2. Re-run the same one-line command (with --user if you installed that way). Your configuration is kept; new settings start at their defaults.
  3. On GNOME, log out and back in once so the updated cursor helper loads (it now declares GNOME 45 to 51).
  4. Open Settings. It is now the new Qt app. If your Qt is older than 6.9, the GTK app opens as before; JUHRADIAL_SETTINGS=gtk juhradial-settings forces it.
  5. If you use Flow, approve your other computer once in Settings → Flow. Computers you have not approved no longer receive the clipboard or control the cursor.
  6. If the MX Keypad is not found right after the upgrade, unplug it and plug it back in so the new device rules apply.

Configuration and docs

Settings writes everything to:

~/.config/juhradial/config.json

The daemon reloads it when Settings saves, so there is nothing to restart. The same backup that Settings makes is available from the command line:

juhradiald --export ~/juhradial-backup.zip
juhradiald --import ~/juhradial-backup.zip
Guide What it covers
Documentation home Overview and page index
Installation Installer steps, user mode, manual setup, NixOS, updating
Features What each feature does
Configuration config.json keys and defaults
Plugins Writing a plugin, with examples in examples/plugins
Compositor support Per-desktop behaviour and Hyprland rules
Troubleshooting Service, permissions, compositor and device diagnostics
FAQ Common questions

Languages

Settings is available in English and 18 more languages: Arabic, Chinese (Simplified), Dutch, French, German, Hindi, Italian, Japanese, Korean, Norwegian Bokmål, Polish, Portuguese (Brazil), Russian, Spanish, Swedish, Thai, Turkish and Ukrainian. It follows your desktop's language by default; Settings → Language picks another one. Corrections from native speakers are welcome as issues or pull requests.

JuhFlow

JuhFlow moves the cursor and clipboard between Linux and macOS over the local network, with no cloud account or relay.

Download JuhFlow for macOS

macOS companion disk image
Area Status
Linux Built in; turn on Flow in Settings and approve the other computer there.
macOS Download JuhFlow.dmg, then follow the runtime setup in juhflow/README.md.
Network and security Local UDP discovery with X25519 key agreement and AES-256-GCM encrypted control and clipboard payloads. Only computers you approve (their key fingerprint is pinned) get the clipboard or the cursor.
Windows Companion support is planned.

[!WARNING] The checked-in macOS disk image is not a standalone installer. Its GUI launches ~/Downloads/juhflow/.venv/bin/python3 and ~/Downloads/juhflow/juhflow_app.py at fixed paths. Place the engine and virtual environment there, or run the Python CLI directly. Runtime dependencies are described in juhflow/README.md, including cryptography, PyObjC, and blueutil. Easy-Switch automation also expects the Logi Options+ agent.

[!IMPORTANT] If JuhRadial MX is closed while JuhFlow is connected, restart JuhFlow on macOS and reconnect.

Troubleshooting

Problem Resolution
Menu does not appear Check the daemon with systemctl --user status juhradialmx-daemon, or restart it from the desktop launcher.
Menu opens at the top-left on GNOME Log out and back in to load the cursor helper, or run gnome-extensions enable [email protected].
Mouse, keypad or keyboard is not detected Check that your user is in the input group and that the udev rules are installed, then log out and back in.
Settings opens the old GTK window Your Qt is older than 6.9. Install PyQt6 6.9 or newer, or keep using the GTK app.
Menu is hidden on Hyprland Add the rules from the compositor support guide.
Build fails Install the development packages for your distro, including hidapi-devel and dbus-devel on Fedora-family systems.

Settings → Settings has a troubleshooting card with the service and overlay status, a restart button, the log and Report a bug. For verbose daemon output:

journalctl --user -u juhradialmx-daemon -f

See the troubleshooting guide for more.

Uninstall

Remove a system install (the default one-line install)

Stop user services before deleting installed files. The daemon and overlay run as the current user, so the user-service, autostart, and configuration steps do not require root. Files under /usr/local, /usr/share, and /etc do.

[!CAUTION] Removing ~/.config/juhradial deletes themes, button maps, macros, profiles, keypad pages, and Flow pairing state.

# 1. Stop and disable the JuhRadial user service
systemctl --user disable --now juhradialmx-daemon.service
rm -f ~/.config/systemd/user/juhradialmx-daemon.service

# Only run these two lines if JuhRadial created this user unit
systemctl --user disable --now ydotoold.service
rm -f ~/.config/systemd/user/ydotoold.service

systemctl --user daemon-reload

# 2. Remove the autostart entry
rm -f ~/.config/autostart/juhradial-mx.desktop

# 3. Remove binaries, assets, desktop entries, and the icon
sudo rm -f  /usr/local/bin/juhradiald \
            /usr/local/bin/juhradial-mx \
            /usr/local/bin/juhradial-settings
sudo rm -rf /usr/share/juhradial /opt/juhradial-mx
sudo rm -f  /usr/share/applications/juhradial-mx.desktop \
            /usr/share/applications/org.kde.juhradialmx.settings.desktop \
            /usr/share/icons/hicolor/scalable/apps/juhradial-mx.svg

# 4. Remove udev rules and uinput module configuration, then reload
sudo rm -f  /etc/udev/rules.d/99-juhradialmx.rules \
            /etc/udev/rules.d/60-ydotool-uinput.rules \
            /etc/modules-load.d/juhradial-uinput.conf
sudo udevadm control --reload-rules && sudo udevadm trigger

# 5. Remove user configuration
rm -rf ~/.config/juhradial

GNOME users should also disable and remove the cursor helper:

gnome-extensions disable [email protected]
rm -rf ~/.local/share/gnome-shell/extensions/[email protected]

Hyprland users should remove the JuhRadial MX rules block added under ~/.config/hypr/, typically ~/.config/hypr/juhradial-rules.conf or a section in hyprland.conf.

A user-mode install (--user) is removed with the steps in the installation guide. Packages are removed with your package manager.

Architecture

Component Role
daemon/ Rust HID++, evdev, D-Bus, device-state, keypad and cursor-detection service (juhradiald)
crates/mx-keypad/ MX Keypad protocol crate (MIT or Apache-2.0)
overlay/ PyQt6 radial menu, Linux Flow engine, and the GTK settings app kept as a fallback
settings-qt/ Qt/QML Settings app
gnome-extension/ GNOME Wayland cursor-position helper
juhflow/ Swift and Python macOS companion
packaging/ Desktop integration, systemd, udev, Debian, RPM, Arch, Nix and Flatpak manifests

See docs/architecture.md for the component boundaries and data flow.

Contributing, conduct and security

Contributions are welcome: code, translations, hardware reports and testing on desktops we do not run every day. Read CONTRIBUTING.md for the development setup and pull request guidelines.

Everyone taking part is expected to follow the Code of Conduct.

Please report security issues privately as described in the security policy, not in public issues.

Credits

JuhRadial MX is maintained by JuhLabs with co-maintainer @gcarmin, who designed and built the application picker (#117, #118), the app-switch, monitor-switch and submenu haptics (#119, #120, #122), the adjustable ring size (#137) and the MX Master 3/3S layout with real device names (#136), and diagnosed the Bluetooth reconnect loop (#124).

Thanks to everyone who contributed to this release:

Every contribution is credited where it landed in the changelog.

License

JuhRadial MX is licensed under the GNU General Public License v3.0. The crates/mx-keypad protocol crate is available under MIT or Apache-2.0.

Star history

Star History Chart

If JuhRadial MX is useful to you, a star helps other Linux users find the project.

Trademark notice

JuhRadial MX is not affiliated with, endorsed by, or associated with Logitech. Logitech, MX Master, MX Keys, MX Keypad, Logi Options+, and related names are trademarks of Logitech International S.A. Distribution names and logos belong to their respective projects and appear only to say where JuhRadial MX runs. This is an independent, community-built open-source project.

Maintained by JuhLabs

Report a bug  ·  Request a feature  ·  Discussions

juhradial-mx (JuhLabs/juhradial-mx)

Searching Database…

Что это?JuhRadial MX — приложение для Linux с открытым исходным кодом, закрывающее пробел, оставшийся после ПО Logitech Options+: оно даёт мышам MX Master (а теперь и MX Keypad и MX Keys S) радиальное меню действий, переназначение кнопок и профили по приложениям на KDE Plasma, GNOME и Hyprland.
Это одно приложение или несколько частей, работающих вместе?Это три части, работающие вместе: небольшой демон на Rust, общающийся с железом по HID++; оверлей на PyQt6, рисующий радиальное меню у курсора; и приложение настроек на Qt/QML, конфигурирующее всё.
Какие мыши и окружения реально поддерживаются?MX Master 4 — основная цель с полной поддержкой хаптики; MX Master 3S и 3 получают всё, кроме хаптики, так как у них нет вибромотора; также поддерживаются MX Keypad и бета-версия MX Keys S, включаемая вручную. Работает на KDE Plasma 6, GNOME 45-51 и Hyprland, через Bolt, Unifying или Bluetooth.
Все ли окружения получают одинаковые функции?Нет. На GNOME профили по приложениям и хаптика при переключении приложений работают только для XWayland-приложений, и GNOME требует вспомогательного расширения для курсора, которое ставит только однострочный установщик, тогда как KDE Plasma поддерживает профили по приложениям для всех приложений. К тому же весь релиз всё ещё помечен как бета, пока идёт тестирование на большем количестве железа.
Для каких дистрибутивов Linux есть отдельный путь установки?У Debian/Ubuntu, Fedora, Arch Linux и NixOS есть свои пакеты или модули, плюс универсальный однострочный установщик и установка в ~/.local для образных систем вроде Bazzite.
Что такое Actions Ring?Это основное радиальное меню: удерживайте или нажимайте назначенную кнопку и выбирайте одно из восьми действий под курсором — например, шорткат, приложение, команду, макрос или плагин, — причём на каждом секторе показана настоящая иконка приложения.
Что умеют клавиши с дисплеем у MX Keypad?Его девять клавиш с дисплеем могут показывать страницы по приложениям, папки, двухпозиционные переключатели, свои иконки или анимированные GIF, а по нажатию либо вставлять текстовый фрагмент, либо удерживать шорткат, пока клавиша нажата.
Что такое JuhFlow?Он переносит ваш курсор и буфер обмена на другой одобренный компьютер в локальной сети, так что одна мышь MX Master может управлять несколькими машинами.
Creator
JuhLabs
Size
109.1 MB
Stars
140
Age
10mo
Commits · 90 Days