A small, headless, cross-platform daemon that synchronizes host switching between Logitech keyboard and mouse. When you press the Easy-Switch button on the keyboard, CleverSwitch detects it and immediately sends the same host-switch command to the mouse — so both devices land on the same host simultaneously.
- Runs alongside Logi Options+ or Solaar without conflicts.
- Must be installed on every host you plan to switch from.
- Currently supports connections via Logitech receivers and Bluetooth.
- Tested with
MX KeysandMX Master 3on Linux, macOS, and Windows.
CleverSwitch does not override device firmware. It acts as a forwarder, which means there is a small delay after reconnection. If you switch back immediately after arriving from another host, the devices may not switch together — CleverSwitch needs a moment to set everything up after reconnection. Especially on Bluetooth. But it mostly depends on the BT version.
- Clone the repository (or download the sources archive from Releases).
- Open Terminal and navigate to the project folder.
- Run:
chmod +x scripts/mac/setup.sh
./scripts/mac/setup.shThe setup script will install Homebrew (if needed), Python, hidapi, and CleverSwitch itself. It will also ask whether you want CleverSwitch to start automatically on login.
On first run, macOS will prompt for Input Monitoring permission. If no prompt appears, grant it manually:
- Open System Settings > Privacy & Security > Input Monitoring.
- Click the + button.
- Press Cmd + Shift + G and paste the path to your binary (e.g.,
/your/path/cleverswitch).
Use which cleverswitch to find the path.
- Download
cleverswitch.zipfrom the Releases page. - Extract the archive.
- Add the location of
cleverswitch.exetoPATH(optional, but preferred). - Run
setup_startup_windows.batif you want the app to start automatically. If step 3 is skipped, the script and executable must be in the same directory.
- Clone the repository (or download the sources archive from Releases).
- Open a terminal and navigate to the project folder.
- Run:
chmod +x scripts/linux/setup_linux.sh
./scripts/linux/setup_linux.shThe setup script will check for Python 3 and hidapi, install CleverSwitch, set up udev rules for non-root HID access, and optionally create an autostart entry.
Requires Python >=3.10 on PATH.
- Clone the repository.
- Install:
pip install .- Run:
cleverswitchWindows note: The hidapi DLL must be downloaded manually and placed in a directory on your PATH.
Linux note: Install udev rules to allow non-root HID access:
sudo cp rules.d/42-cleverswitch.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
# Unplug and replug the receivermacOS note: On first run, macOS will prompt for Input Monitoring permission (see macOS section above).
Will be available once the Homebrew formulae criteria are met:
- be known (e.g. GitHub repositories should have >=30 forks, >=30 watchers or >=75 stars)
- be used by someone other than the author
Handled by setup_mac.sh during installation. To set up separately:
chmod +x scripts/mac/setup_startup.sh
./scripts/mac/setup_startup.sh- Place
setup_startup_windows.batin the same directory ascleverswitch.exe(unless it's already onPATH). - Run
setup_startup_windows.bat.
To verify, open Task Manager and look for cleverswitch.exe in the Details tab.
Handled by setup_linux.sh during installation. To set up separately, use your distro's autostart mechanism (e.g., GNOME Tweaks, KDE Autostart) or see other methods.
chmod +x scripts/mac/uninstall.sh
./scripts/mac/uninstall.shThis stops and removes the launch agent (if configured) and uninstalls the CleverSwitch package.
chmod +x scripts/linux/uninstall_linux.sh
./scripts/linux/uninstall_linux.shThis removes the autostart entry, uninstalls the CleverSwitch package, and optionally removes udev rules.
- Delete the
cleverswitchfolder. - Remove the startup entry: open Task Manager > Startup tab, find
cleverswitch, and disable/delete it.
pip uninstall cleverswitchWill be available in later releases.
Will be available in later releases.
CleverSwitch is inspired by Solaar and uses the same HID++ 2.0 protocol knowledge, but is an independent, minimal implementation. It does not import or depend on Solaar.
Please open a new issue.
If you find this project useful, consider supporting its development:
- Credit Card: Donate via Boosty
- Crypto:
BTC: 1HXzgmGZHjLMWrQC8pgYvmcm6afD4idqr7USDT (TRC20): TXpJ3MHcSc144npXLuRbU81gJjD8cwAyzP