English | Türkçe
easy-switch is a small, free and open-source Windows tool that moves a Logitech mouse or keyboard (MX Master 4, MX Master 3S, MX Anywhere, MX Keys and other Easy-Switch devices) to another computer with a single button press. Assign it to any mouse button in Logi Options+ and switch between your PC, laptop and work computer without flipping the mouse over to press the Easy-Switch button.
Logitech MX devices can be paired with up to three computers/devices, and you switch between them with the Easy-Switch button on the bottom of the device. Logi Options+ does not let you assign this switch directly to a button; it can only be done through the Actions Ring, in two steps. easy-switch fills that gap: assign this program to any button in Options+, and a single press moves the device to another channel.
The program can be used in two ways: as plain Python code on computers that have Python installed (no .exe needed), or as a ready-made .exe that needs no Python. See Installation for details.
- Features
- Supported devices
- How it works
- Channel selection
- Installation
- Command line
- Log and errors
- Requirements and limitations
- FAQ
- License
- One-button Easy-Switch: switch the mouse or keyboard to computer 1, 2 or 3, or to the next one, with a single press of any button you choose.
- Works with Logi Options+: uses Options+'s own Open file / Open application actions; no Actions Ring, no extra clicks.
- Logi Bolt, Unifying, Lightspeed and Bluetooth: finds the device on any Logitech receiver or a direct Bluetooth connection.
- Fast: remembers where the device was found, so a switch takes about 0.2 seconds.
- No installation, no dependencies: a single Python file using only the standard library, or a ready-made
.exe. No driver, no background service. - Safe and auditable: does not read keyboard or mouse input; the whole program is one readable file.
- Same setup on every computer: no per-computer configuration.
easy-switch works with Logitech devices that have an Easy-Switch button and support the HID++ 2.0 CHANGE_HOST feature. This includes most current Logitech MX and multi-device products, for example:
- Mice: MX Master 4, MX Master 3S, MX Master 3, MX Anywhere 3S, MX Anywhere 3, MX Vertical, M720 Triathlon
- Keyboards: MX Keys S, MX Keys, MX Keys Mini, MX Mechanical, K780, K380
- Connections: Logi Bolt receiver, Unifying receiver, Lightspeed receiver, Bluetooth
Tested so far with the MX Master 4 on a Logi Bolt receiver under Windows 11. The other devices above use the same protocol but have not been tested; if you try one, please open an issue and report the result.
The program sends exactly the same command the device's own Easy-Switch button sends: the CHANGE_HOST (0x1814) feature of the HID++ 2.0 protocol.
-
The computer's HID devices are scanned:
Connection HID++ channel (usage page / usage) Device index Logitech receiver (Bolt, Unifying, Lightspeed...) 0xFF00/0x00021..6Direct Bluetooth 0xFF43/0x02020xFF -
Each device's name is read with the
DEVICE_NAME(0x0005) feature, and the target device is found by name. Selection is by name because another Easy-Switch device (a keyboard, for example) may share the same receiver. -
CHANGE_HOST.getHostInforeads the number of channels and the current channel. -
CHANGE_HOST.setCurrentHostswitches to the target channel. The device drops the connection immediately, so no reply is expected.
There are no computer-specific settings; the same program works on every computer.
The target channel is taken from, in order:
- Command-line argument:
easy-switch.exe 3orpython easy_switch.py 3 - The program's file name:
easy-switch-3.exeoreasy-switch-3.pyw→ channel 3 - If neither is given, the next channel (1 → 2 → 3 → 1)
Option 2 exists because Logi Options+ cannot pass arguments to a program: for each channel you use a copy of the same program whose name ends with the channel number.
| With Python | With .exe |
Behavior |
|---|---|---|
easy-switch.pyw |
easy-switch.exe |
Switches to the next channel |
easy-switch-1.pyw |
easy-switch-1.exe |
Switches to channel 1 |
easy-switch-2.pyw |
easy-switch-2.exe |
Switches to channel 2 |
easy-switch-3.pyw |
easy-switch-3.exe |
Switches to channel 3 |
If the device is already on the target channel, the program does nothing.
There are two ways; both do the same job:
A. With Python (.pyw) |
B. Ready-made program (.exe) |
|
|---|---|---|
| When? | Computers where running .exe files is blocked, or where the .exe is flagged by antivirus |
If you don't want to install Python |
| Requires | Python (no extra packages) | Nothing |
| Options+ action | Open file | Open application |
Note
The program only works on the computer it is installed on. Once the device has moved to another computer, to come back either install the program on that computer too and assign the button there, or use the device's own Easy-Switch button.
If you have never installed Python before, follow these steps from start to finish.
- Open https://www.python.org/downloads/windows/. Under Stable Releases, click the Download Windows installer (64-bit) link below one of the top releases. The downloaded file should be named something like
python-3.x.x-amd64.exe. - Run the downloaded installer.
- Tick the two boxes at the bottom of the first screen:
- Use admin privileges when installing py.exe
- Add python.exe to PATH
- Click Install Now and wait for the installation to finish.
Important
The Python installer is itself an .exe. On computers where running .exe files is blocked, ask your IT department to install Python; in most organizations Python is an approved application. Once Python is installed, nothing else needs to be installed for this program.
Check: type cmd in the Start menu, open Command Prompt, and type:
python --versionYou should see a version number such as Python 3.12.5. The program works with Python 3.10 and later.
- On this GitHub page, click the green Code button, then Download ZIP.
- Right-click the downloaded ZIP file and choose Extract All.
- Move the extracted folder to a permanent location, for example
C:\Tools\easy-switch. Options+ will launch the file from this path, so the folder should not be moved later.
These files are all you need in the folder; the dist/ folder is not needed for this method:
| File | Purpose |
|---|---|
easy_switch.py |
The program itself; always required |
easy-switch.pyw |
Switches to the next channel |
easy-switch-1.pyw |
Switches to channel 1 |
easy-switch-2.pyw |
Switches to channel 2 |
easy-switch-3.pyw |
Switches to channel 3 |
The .pyw files are small launchers that run the program without opening a black console window. The file name decides which channel to switch to. They must be in the same folder as easy_switch.py.
Move the mouse to wake it up. In Command Prompt, go to the folder and run the program in dry-run mode. This mode does not switch channels; it only reports what it would do:
cd C:\Tools\easy-switch
python easy_switch.py --dry-runYou should see a line similar to this:
2026-10-05 01:49:49 [dry-run] 2. kanaldan 3. kanala geçilecekti
This means "would switch from channel 2 to channel 3". The program's messages are currently in Turkish; see Log and errors for the meaning of each message.
If your mouse is not an MX Master 4, give the device name: python easy_switch.py --device "MX Anywhere 3" --dry-run. If the name is not found, the error message lists the names of the Logitech devices seen on the computer.
- Open Logi Options+ and click your mouse.
- On the mouse picture, click the button you want to use for switching (for example the Forward button on the side). That button's previous function will be lost.
- In the action list that opens on the right, choose Open file.
- Click BROWSE FILE and select the
.pywfile you want, for exampleC:\Tools\easy-switch\easy-switch-3.pyw. - Press the button. The mouse moves to the other device in about half a second.
Tip
If nothing happens when you press the button, check the easy-switch.log file in the folder. If the file was never created, Windows is not opening .pyw files with Python: right-click the .pyw file, choose Open with → Python → Always use this app, and try again.
-
Download the
.exefiles from the latest release and put them in a permanent folder, for exampleC:\Tools\easy-switch.File Behavior easy-switch.exeSwitches to the next channel easy-switch-1.exeSwitches to channel 1 easy-switch-2.exeSwitches to channel 2 easy-switch-3.exeSwitches to channel 3 -
Logi Options+ → your mouse → the button you will use for switching → Open application from the action list → BROWSE APPLICATION → the
.exeyou want. -
Press the button.
On the first run, Windows SmartScreen may show a "Windows protected your PC" warning. This is normal because the program is unsigned; you can continue with More info → Run anyway.
Instead of trusting the ready-made files, you can build the .exe files from the source code yourself. For this, install Python and download the files using steps 1 and 2 of method A. Then, in Command Prompt:
cd C:\Tools\easy-switch
pip install pyinstaller
pyinstaller --onefile --windowed --name easy-switch --exclude-module hid easy_switch.py
cd dist
copy easy-switch.exe easy-switch-1.exe
copy easy-switch.exe easy-switch-2.exe
copy easy-switch.exe easy-switch-3.exe--onefile: packs everything into a single.exefile.--windowed: prevents a console window from opening.--exclude-module hid: leaves out thehidapipackage, which is not needed on Windows.
The .exe files are created in the dist folder. The four files are identical apart from their names; the name decides which channel to switch to. To test, run dist\easy-switch.exe --dry-run and check the result in dist\easy-switch.log. To connect it to Options+, follow the steps above.
The program does not read keyboard or mouse input. It only opens Logitech's HID++ channel, writes its own commands to the device, and reads only the replies to those commands. Windows reserves the keyboard and mouse channels for the operating system; the program does not access them. On Windows, HID access goes through ctypes and Windows' own hid.dll / setupapi.dll; no external packages are involved. The entire program is in a single readable file: easy_switch.py.
Install the hidapi package with pip install hidapi and try python3 easy_switch.py --dry-run. These platforms have not been tested.
easy-switch.exe [CHANNEL] [--device NAME] [--dry-run]
python easy_switch.py [CHANNEL] [--device NAME] [--dry-run]
Both forms take the same options; in the examples below, easy-switch.exe can be replaced with python easy_switch.py.
| Option | Description |
|---|---|
CHANNEL |
Channel to switch to (1, 2, 3). If omitted, the file name is checked; if that has no number either, the next channel is used. |
--device NAME |
Name of the target device; matched as a substring, case-insensitive. Default: MX Master 4. |
--dry-run |
Does not switch channels; writes what it would do to the log file. |
Examples:
easy-switch.exe 2
easy-switch.exe --device "MX Keys" 3
easy-switch.exe --dry-runEvery run writes one line to easy-switch.log in the program's folder. When the file exceeds 256 KB it is kept as easy-switch.log.1.
If an error occurs while running without a console, a warning window is also shown. The program's messages are currently in Turkish:
| Message | Meaning |
|---|---|
N. kanaldan M. kanala geçildi |
Switched from channel N to channel M. |
[dry-run] N. kanaldan M. kanala geçilecekti |
Dry run: would switch from channel N to channel M. |
zaten N. kanalda, bir şey yapılmadı |
Already on channel N; nothing was done. |
Common errors:
| Error | Meaning and fix |
|---|---|
... bulunamadı; uyuyor ya da bu bilgisayara bağlı değil olabilir |
"... not found; it may be asleep or not connected to this computer." Move the device to wake it up. The end of the message lists the Logitech devices seen on that computer (bulunanlar: = "found:"); you can pick one of them with --device. |
kanal N geçersiz; cihazda M kanal var |
"Channel N is invalid; the device has M channels." The channel number in the file name or argument is larger than the device's channel count. |
The program remembers which receiver and slot each device was found on in easy-switch.cache.json next to it, and looks there first on the next run; a switch then takes about 0.2 seconds. The first run, or a run after the device was moved to another receiver, scans every connected receiver and can take a few seconds, because asking a sleeping device for its name wakes it up. If the remembered location is wrong, the program scans again and updates the file by itself; deleting the file is always safe.
- Windows 10/11; the
.exeneeds nothing, the.pywneeds only Python. The source code may also work on macOS and Linux withhidapi, but these platforms have not been tested. - The device must support the HID++ 2.0
CHANGE_HOSTfeature (current Logitech devices that have an Easy-Switch button). - Works while Logi Options+ is running; it does not interfere with it.
- Tested with: MX Master 4, Logi Bolt receiver, Windows 11.
| File | Contents |
|---|---|
easy_switch.py |
The entire program |
easy-switch*.pyw |
Console-less Python launchers |
dist/README.txt |
Short user note shipped with the .exe files (Turkish) |
The compiled .exe files are not stored in the repository; they are published on the Releases page.
Install easy-switch on each computer, then in Logi Options+ assign the easy-switch.pyw (Python) or easy-switch.exe file to a mouse button. Pressing that button moves the mouse to the next computer. To jump to a specific computer, use easy-switch-1, easy-switch-2 or easy-switch-3 instead. Step-by-step instructions are under Installation.
Not directly. Options+ only offers Easy-Switch through the Actions Ring, which takes two steps. easy-switch is an ordinary program, so it can be assigned to any button with Options+'s Open file or Open application action.
No. Logitech Flow moves the mouse to another computer when the cursor reaches the screen edge and needs Options+ on both computers on the same network. easy-switch switches only when you press the button, and it needs no network connection: it sends the same command as the device's own Easy-Switch button.
Yes, if the keyboard supports Easy-Switch. Select it by name: easy-switch.exe --device "MX Keys" 2. Because Options+ cannot pass arguments, with Python you can make a copy of a .pyw launcher (for example keys-switch-2.pyw) and add the line sys.argv += ["--device", "MX Keys"] before sys.exit(main()). The mouse and the keyboard switch separately.
No. It runs as a normal user and uses Windows' built-in HID support. Nothing is installed and nothing runs in the background.
It does not read keyboard or mouse input. It only talks to Logitech's HID++ channel and reads the replies to its own commands; see Security. The whole program is a single file, easy_switch.py, that you can read before running.
Install easy-switch on the other computer too and assign a button there, or use the Easy-Switch button on the bottom of the device.
The source code supports hidapi on macOS and Linux, but these platforms have not been tested. See macOS and Linux.