KMSwitcher / One desk, more computers

In development

Move to the edge.
Keep working.

Push your mouse pointer against the edge of one computer's screen to switch your shared keyboard and mouse to the next. Arrange your desk once, then move between computers as you work.

Automatic switching uses the desktop companion on Windows or Linux X11.

Two computers. One flow.

Computer 1

Selected

Computer 2

Ready

Computer 1 selected. Keyboard and mouse work here.

Illustration of a screen-edge handoff between two computers.

01 / Screen-edge switching

Your computers, arranged like your desk.

Place your stations in the companion's layout editor. When you push through an outer screen edge, KMSwitcher finds the next ready screen in that direction and brings your keyboard and mouse with you.

Try a desk layout

Interactive illustration
01 / WorkstationAbove the laptopReady
02 / LaptopAt the centre of your deskSelected
03 / Second computerTo the rightReady

Laptop selected. Move up to the workstation or right to the second computer.

Only directions with a neighbouring station are enabled. Try up, down, right, then left to return to the laptop.

An example arrangement. The pointer, keyboard, and mouse follow the selected computer; empty directions don't wrap around.
Go in all four directions.
Move left, right, up, or down. A computer above your laptop can be above it in your layout too. Receiver numbers don't dictate where screens belong.
Keep your multi-monitor desktop.
Moving between monitors on the same computer stays normal. Switching happens only at exposed outer edges, including the exposed parts of offset monitors.
Land on the screen you aimed for.
The pointer arrives just inside the destination screen that lines up with your crossing, rather than always jumping to its primary monitor. Empty gaps don't wrap around.
Dock a different laptop.
A receiver identifies the desk station. Move a laptop between docks and its station changes with it; saved station display areas keep neighbouring stations aligned as resolutions change.
Adapt when screens change.
The companion refreshes monitor geometry when you close a lid, reconnect a display, or change docks. A station can report up to 16 active monitors.
Skip computers that aren't ready.
Powered-off, stale, disabled, and unready stations are skipped. The destination companion confirms readiness and pointer placement before the controller switches input.

Make the edge feel right.

Adjust the edge delay and corner exclusion to suit your desk. Held keys or mouse buttons block automatic handoffs, and a short arrival cooldown prevents bouncing straight back. Pause automatic switching locally from the tray, or pause it for the whole desk.

Prefer the keyboard?

Double-tap. Pick a computer.

Double-tap your trigger, then press a receiver number. Ctrl is the default; change the key and timing in preferences.

CtrlCtrlthen2

Illustration: two Ctrl taps, then 2, select computer 2.

02 / Clipboard & file sharing

Copy here. Use it over there.

Copy normally, then choose a destination from the companion's tray menu. You decide when to send: copying something or crossing a screen edge never sends it automatically.

Follow a clipboard transfer

Interactive illustration
  1. Copy
  2. Choose destination
  3. Transfer
  4. Receive

Computer 1

Desk notesSource clipboard

Companion tray

Send clipboardto Computer 2 →

Computer 2

Waiting for an itemDestination clipboard unchanged

Choose a destination explicitly. Plain text is ready to paste after it arrives.

Illustrated content only. Images and files wait for acceptance; plain text is placed on the destination clipboard after verification.

Choose how content travels.

Use encrypted paired dongles, prefer an authenticated encrypted LAN connection with dongle fallback, or allow network transfers only. Both computers' preferences are respected. No internet server is involved.

Follow every transfer.

See byte progress, measured rate, transport, errors, and cancellation in the transfer window. The default item limit is 256 MiB, adjustable from 1 to 2,048 MiB on each computer. LAN is the practical choice for larger transfers.

Both computers need the companion running in an unlocked Windows or Linux X11 session. Non-text items leave the current clipboard untouched until accepted. Save received files you want to keep before restarting the companion; temporary received and staged items are cleared on restart.

03 / Dedicated hardware

One place for your keyboard and mouse.

An ESP32-S3 controller receives your inputs through a USB hub. An ESP32-S2 receiver stays plugged into each computer. The controller routes input over encrypted ESP-NOW radio to the selected receiver.

Receivers stay connected as USB HID devices while you switch, so a handoff doesn't require USB re-enumeration. Manual keyboard switching works in firmware independently of the desktop companion.

Wired USB keyboards, mice, and compatible wireless keyboard/mouse receivers can share the hub. Standard HID keyboard, pointer, scrolling, mouse-button, media, and system controls are forwarded.

The hardware at a glance

Keyboard + mouse
USB hub + controllerESP32-S3

↓   ESP-NOW wireless   ↓

Computer 1S2 · Selected
Computer 2S2 receiver
Computer 3S2 receiver
Illustrated setup · Up to 7 paired receivers

Automatic input selection supports up to two physical input devices, subject to the controller's eight USB host channels. A combo receiver counts as one device; hubs also consume channels. Proprietary device reports and generic Bluetooth adapters aren't universally supported.

04 / From hardware to your desk

Set up, pair, and put things in place.

The desktop companion includes a guided device and firmware wizard. Use it for initial setup, then keep your desk layout and everyday controls close at hand.

  1. Prepare the controller and receivers.

    The wizard checks the connected chip, flash capacity, firmware checksums, and layout. It backs up pairing and settings, writes the firmware, and verifies the result.

  2. Give each receiver a number.

    Double-tap your trigger, press P, then a slot 1–7. Hold the receiver's button for about three seconds during the pairing window. Pairings survive normal restarts and firmware updates.

  3. Match the layout to your desk.

    Run the companion on each computer. Drag station groups into place, save the layout to the controller, and enable automatic switching. Optional login startup keeps the companion ready.

05 / The rest of the toolkit

The details that make it your desk.

Explore the everyday preferences, device tools, and automation features behind the headlines.

Keyboard, mouse & everyday preferences
  • Your choice of trigger: Ctrl, Alt, Shift, Scroll Lock, Insert, Pause/Break, or Num Lock, with adjustable double-tap and selection timing. Top-row and keypad destination numbers are supported.
  • Normal shortcuts stay normal: modifier combinations keep their usual meaning; an expired selection replays the trigger taps, and Escape cancels selection.
  • Lock-light feedback: supported keyboards can follow the selected computer's Caps Lock, Num Lock, and Scroll Lock state.
  • A saved boot destination: choose a preferred receiver or automatic first-available selection.
  • Controller indication: choose normal RGB indication, brightness, and per-computer colours. Normal indication is off by default.
  • USB input control: inspect connected devices, use automatic selection, or allow specific physical devices. Saved choices survive reconnection and controller restarts.
  • Preference-only reset: restore everyday defaults while retaining pairings, link keys, and diagnostic history.
An independent mouse jiggler for each receiver
  • Per-computer control: toggle the selected receiver with double-trigger then J, or control any reachable compatible receiver from the browser console.
  • Three movement modes: left/right, four-way, or random strokes. Double-trigger then K cycles the selected receiver's mode.
  • Adjustable movement: set the idle interval and movement distance. Real mouse movement or scrolling pauses the jiggler until the idle wait has passed again.
  • Independent operation: it can continue after you switch away, pause routing, or lose controller contact. Jiggler movement doesn't trigger screen-edge switching.
  • Clear restart behaviour: interval and distance are saved on the controller; each receiver restarts with its jiggler disabled in left/right mode.
Companion app, desk layouts & tray controls
  • A layout for your whole desk: up to seven stations, each reporting up to 16 active monitors, with drag-to-position groups and editable coordinates and display-area sizes.
  • Layout backups: export and import JSON configurations. Revision checks prevent a stale edit from silently replacing newer settings.
  • Local and global control: local automatic-switching preferences follow your laptop; the shared layout and global pause stay with the controller.
  • A background companion: closing Settings keeps the helper running. Use optional login startup, tray pause/resume, or a headless helper. Desktops without a tray keep the settings window available.
  • Direct receiver access: the companion talks through its local USB receiver without installing a custom kernel driver.
  • Explicit clipboard destinations: the tray shows each station and its current computer name, disabling unavailable destinations. Transfer policies and names follow the computer between docks.
Installers, firmware updates & device management
  • Desktop packages: Windows x64 installer and portable ZIP; Linux x64 DEB, RPM, and tar packages. Packaged setup includes firmware without requiring Python or ESP-IDF.
  • Guided wired installation: select the board and port, check compatibility, back up settings, then flash and verify. Normal upgrades preserve pairing and preferences.
  • Application updates: after the required initial wired installation or migration, update the controller through UART and one or all paired receivers over radio.
  • Verified updates: check firmware role, chip, image size, manifests, and SHA-256 integrity. Matching images can be skipped; receiver batches report each target separately and process the selected receiver last.
  • Update results: retain downloadable JSON reports, confirmed boot/image checks, and route-restoration results. Compatible OTA layouts support rollback when a new image fails startup confirmation.
  • Saved radio channels: choose a channel permitted by the firmware's country policy after upgrading all paired receivers. Receivers retain their pairings and can rediscover their controller after a channel change.
Browser console, diagnostics & recovery
  • A portable browser console: a single offline HTML file connects to the controller's COM/UART port in desktop Chrome or Edge. It includes a simulated-device demo.
  • Everyday device tools: inspect receiver identity and health, change preferences, choose USB inputs, manage radio channels, and run firmware updates.
  • A live terminal: command history, quick actions, downloadable logs, a maximised console view, and light, dark, or system appearance. Supported console rates range from 115,200 baud to 4 Mbaud.
  • Retained diagnostics: controller and receiver events, hourly statistics, build identity, and verified history downloads help investigate failures. Diagnostic storage records event codes and counters, not key values or pointer coordinates.
  • Connection recovery: the controller retries the selected computer through radio or USB trouble. Bounded input buffering lasts up to five seconds; expired or ambiguous input can be discarded.
  • USB recovery tools: retry device descriptors or perform a logical USB reconnect while retaining the selected computer and saved input choices. Automatic recovery handles detected USB stalls.
Scripting & tools for builders
  • A scriptable CLI: select computers, query status and peers, control automatic switching and startup, edit layouts, manage preferences, and run guided firmware operations from commands.
  • Machine-readable output: JSON results and exit codes support scripts and diagnostics. Firmware packages record source identity and hashes.
  • Controller consoles: use the UART terminal or the keyboard console in a text editor for commands and diagnostic output.
  • A Linux hardware test controller: saved device profiles, synthetic keyboard/mouse workloads, simultaneous captures, correlated reports, and controlled device restarts support development and stress testing.

06 / What you need

Choose the right setup for your desktop.

Screen-edge switching and clipboard sharing need a companion on each participating computer, compatible controller and receiver firmware, and a ready desktop session.

Desktop companion support
DesktopScreen-edge switchingClipboard sharingSetup & configuration
Windows x64SupportedSupportedInstaller or portable ZIP
Linux X11, x64SupportedSupportedDEB, RPM, or tar; glibc 2.35+
Linux WaylandUnavailableUnavailableFirmware setup and CLI configuration remain available
Does every computer need the companion?

Install it on each computer that participates in automatic edge switching or clipboard sharing. Manual hardware shortcuts run in firmware and remain available without the companion. No custom kernel driver is installed.

Can I drag an item straight across to another computer?

Cross-computer dragging is future work. To move content today, copy it and explicitly send it from the tray menu, then paste or save it on the destination.

Will every keyboard and mouse work?

KMSwitcher reads standard USB HID descriptors, with no device-model whitelist. Compatibility still depends on the device's reports and the available USB channel budget. Proprietary touchpad gestures, vendor configuration, and arbitrary Bluetooth adapters are outside the supported standard input path. Other operating systems and device combinations need compatibility testing.