4.6 KiB
LAN discovery and pairing preview
This development branch starts the built-in replacement for Mouse Without Borders. It adds discovery and authenticated pairing inside the existing KSwitcher resident process. It is not yet a mouse/keyboard or clipboard transport. Do not disable MWB on the strength of this preview.
Try it on two Windows computers
- Run this development build on both computers, on the same private IPv4 subnet.
- Open Settings → Tools → KSwitcher computers.
- Enable discovery on both. The list contains running LAN-enabled KSwitcher instances, not computers returned by a generic Windows/network scan.
- Match the computer name and eight-character instance-ID prefix displayed on the other computer. Select each other in the lists.
- Generate a code once. Enter that same 32-character code on both computers, then click Pair on both within two minutes. Spaces, hyphens and uppercase hexadecimal characters are accepted. A different code never establishes trust.
- Both sides should report Paired; authenticated presence appears as “Paired / verified”. An offline pair stays listed so it can be forgotten.
Discovery uses UDP 45883 on private IPv4 and link-local interfaces. Windows may require an inbound firewall allowance for KSwitcher on the private network; the preview does not modify firewall rules. Networks that block broadcasts, separate VLANs, public IPv4 and IPv6-only networks are not supported yet. A second build cannot listen on the same discovery port on the same computer.
Changes in this window apply immediately. Closing the window does not cancel a pending pairing; use Cancel pairing. Disabling discovery stops its worker and closes its socket. Forget pair removes local trust; forget it on both computers for bilateral removal. No input can be sent or received in this milestone.
Identity, pairing and storage
An instance ID belongs to a KSwitcher data directory, not a hostname/IP address. It persists when the LAN configuration is first saved. Discovery announcements contain only protocol/version, instance ID, computer name and a fresh challenge. Discovered names and addresses are untrusted; they never authorize input.
The generated code has 128 bits of randomness from Windows CNG. It is deliberately not a guessable short PIN. HMAC-SHA256 proofs bind the source/destination IDs and fresh nonces; both endpoints confirm the handshake before saving the pair. Replayed confirmations cannot complete a new attempt. The shared pair key is separate from the setup code. The code is never transmitted or logged.
Local identity, enablement and trust records are stored in DPAPI-protected
data/lan-pairing.bin. They are separate from settings export and OpenBao sync.
Do not clone this file between installations: each instance needs its own identity.
Unverified/offline status does not remove a previously saved pair. Discovery is
bounded to 64 visible instances and stale discoveries expire after 12 seconds.
A newly started pairing window lasts two minutes. Presence challenges rotate so
captured replies cannot indefinitely keep a disconnected instance verified.
Disabled discovery starts no worker and opens no sockets. Enabling it adds one worker thread within KSwitcher; the existing configurator uses local IPC. There is no new executable, service, WebView or runtime dependency.
Next integration milestone
- An authenticated encrypted input channel using the stored pair key, separate from UDP discovery. Pairing alone must never inject input.
- Left/right/top/bottom screen placement and cursor crossing at the screen edge from the first input prototype, not hotkey-based normal switching.
- Reuse the resident low-level hooks. Forwarded keys must not expand snippets or invoke actions on the source PC; received keys run through the destination path.
- Release pressed keys/buttons and return local control on disconnection, timeout, suspend, lock, disable or process shutdown. Keep an emergency return chord.
- Text/image clipboard transport with bounded sizes and loop suppression follows reliable input handoff. File transfer and secure-desktop control are later work.
Validation
KSwitcherLanTests covers cryptographic test vectors, wrong codes, identity and
protocol substitution, mutual confirmation, replay, expiry, DPAPI persistence,
and no worker while disabled. --network additionally exercises real discovery
start/stop/rebind. Settings UI tests cover the child window, disabled actions,
empty list, parent reactivation and unchanged Save state. Two physical computers
are still required to validate discovery across adapters/firewalls and pairing
under real packet loss; this preview does not claim that validation.