Switch legacy Logitech Easy-Switch keyboards and mice together on macOS.
One action sends two supported devices to the same Easy-Switch host. It is a small, local alternative for setups that do not qualify for Logitech's native Enhanced Easy-Switch—including the tested combination of an MX Keys S and the original 2015 MX Master.
Not affiliated with, sponsored by, or endorsed by Logitech.
Download
Download the latest macOS ZIP and SHA256SUMS from
GitHub Releases.
The archive contains:
Switch to Host 1.appSwitch to Host 2.appSwitch to Host 3.app
Each app contains its own copy of the switching code. See INSTALL.md for checksum verification, Gatekeeper, and first-run instructions.
What it solves
Many Logitech keyboards and mice can each remember several computers, but switching normally means pressing controls on both devices. The included apps invoke the two-device Easy-Switch action already installed with Logi Options+. Choose a host once and the keyboard and mouse leave together.
Useful search terms for the same problem include multi-device switching for Logitech peripherals, switching an MX keyboard and MX Master together, Easy-Switch with Bolt and Unifying Receiver devices, and synchronized keyboard and mouse host switching.
Compatibility
Requirements:
- macOS 12 or later
- Logi Options+ installed and its Plugin Service running
/usr/bin/python3(included with many macOS installations and Apple command-line tools)- exactly two devices exposed by Options+'
Easy-Switch 2 Devicesaction - matching host-slot assignments on both devices
Verified end to end:
- MX Keys S and first-generation MX Master
- both connected over Bluetooth
- Logi Options+ 2.7.970334 and Plugin Service 6.4.1.3246
Bolt, Bluetooth, and legacy Unifying Receiver configurations may work when Options+ exposes both devices to the action, but receiver type alone does not guarantee compatibility. The original MX Master is verified as a legacy device; its Unifying connection path has not yet been tested by this project.
Run the non-mutating compatibility check:
/usr/bin/python3 ./switch_pair.py status
If exactly two intended devices appear, the launcher apps can select them automatically. The command-line client also supports explicit selectors.
Install and assign
Copy the three apps to /Applications. In Logi Options+, assign a customizable
button or key to Open Application, then choose the app for the required
host. Opening an app immediately requests the switch; no window is shown.
For switching in both directions, install the launchers on each Mac. Keep a physical Easy-Switch control, built-in trackpad, or spare input device available during initial testing.
Command line
Inspect compatible choices:
/usr/bin/python3 ./switch_pair.py status
Preview and then execute a switch to physical host slot 2:
/usr/bin/python3 ./switch_pair.py switch 2 /usr/bin/python3 ./switch_pair.py switch 2 --execute
If Options+ exposes more than two choices, select the pair explicitly:
/usr/bin/python3 ./switch_pair.py switch 2 \ --first "DEVICE NAME" \ --second "OTHER DEVICE" \ --execute
How it works
The client connects only to the local Plugin Service installed by Options+, discovers choices for its two-device Easy-Switch action, and invokes that fixed action with a host slot. It does not patch Options+, modify firmware, enable a debugger, automate the UI, install a daemon, or open a network connection.
The service events confirm that both commands were emitteds. Commands are sequential rather than atomic, so a failure can leave only one device switched. The client never retries an uncertain execution automatically.
Privacy and security
The normal client:
- No network connection or listener
- No telemetry
- No device, account, or usage data
- Needs no administrator, Accessibility, Automation, or debug permission
- Reads device display names and model identifiers only in memory
- Modifies no Logitech files, databases, firmware, or socket permissions
Build and test
make test
make audit
make distmake dist creates three self-contained app bundles, applies identity-free
ad-hoc signatures, and writes a ZIP plus SHA-256 checksum under dist/.
Limitations
- The local Plugin Service protocol is undocumented and may change.
- Downloaded apps are ad-hoc signed, not Developer ID signed or notarized.
- The apps require exactly two action-compatible devices.
- Two identical models may not be distinguishable through the action.
- Device reconnection is not confirmed by the service response.
- This release supports macOS only.
License and trademarks
MIT. See LICENSE.