This script allows you to switch channels of your Logitech keyboard and mouse automatically whenever the mouse goes over a specific part of the screen, which is configurable.
You need to change Receiver Slot and ID accordingly in above settings. Target channel is calculated according to the configured screen edge — Target 1 switches to channel 1, Target 2 to channel 2, Target 3 to channel 3.
Supports both Unifying (HID++ 1.0) and Bolt (HID++ 2.0) protocols. See BOLT_SETUP.md for Bolt configuration details.
| Protocol | Device | Header | Receiver Slot | ID | Const | Target Channel | Padding |
|---|---|---|---|---|---|---|---|
| Unifying | Keyboard | 0x10 | 0x01 | 0x09 | 0x1c | 0x00 | 0x00 0x00 |
| Unifying | Mouse | 0x10 | 0x02 | 0x0c | 0x1c | 0x00 | 0x00 0x00 |
| Bolt | Keyboard | 0x11 | 0x01 | 0x09 | 0x1E | 0x00 | 0x00 x15 |
| Bolt | Mouse | 0x11 | 0x02 | 0x0E | 0x1E | 0x00 | 0x00 x15 |
Use python tools/probe_devices.py to discover your device's Receiver Slot and ID values.
Prevents computer sleep when you're focused on another machine. Moves the mouse after 45 seconds of inactivity and simulates F15 keypress every 30 seconds. Resets when user activity is detected.
Clipboard sharing between machines over LAN.
For Linux users, install xclip: sudo apt-get install xclip. Details here
Start the server on one computer, note the IP:port shown, then connect from the other computer using that address (e.g. 192.168.50.50:55555).
pip install -r requirements.txt
python src/main.pyInstall pypiwin32 before running:
pip install pypiwin32Linux needs sudo privileges for HID access:
sudo ./Logitech\ Channel\ SwitchermacOS needs Input Monitoring permission (System Settings → Privacy & Security → Input Monitoring). Grant it to Terminal or Python.
Run the exe file directly or use the installer.
CI/CD builds automatically on tag push (v*) using --onedir mode for faster startup.
pyinstaller --onedir --windowed --add-data "static/icon:static/icon" --add-data "static/hidapitester:static/hidapitester" --add-data "static/uniclip:static/uniclip" --icon static/icon/icon.icns --name "Logitech Channel Switcher" src/main.pypython -m PyInstaller --onedir --windowed --add-data "static/icon;static/icon" --add-data "static/hidapitester;static/hidapitester" --add-data "static/uniclip;static/uniclip" --icon static/icon/icon.ico --name "Logitech Channel Switcher" src/main.pyThis project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

