Released March 24, 2026 · Go · MIT License · GitHub

MWB Linux cover showing Linux mouse, keyboard, and clipboard routed through a Go bridge to a Windows PowerToys host
Project cover: Linux input capture, encrypted MWB packets, and the Windows PowerToys host. Source architecture diagrams are below.

A native Linux client for Microsoft PowerToys' Mouse Without Borders (MWB). Move your mouse to the edge of the screen and the cursor moves to the other machine, along with your keyboard and clipboard, with no extra software needed on Windows beyond PowerToys.

Why I built it

Mouse Without Borders only ships as a Windows-side PowerToys feature. There was no native Linux client implementing the same protocol, so switching between a Linux desktop and a Windows machine meant KVM hardware or a clunkier remote-desktop workaround. MWB Linux implements the protocol directly: a single ~5MB binary, no GUI dependencies.

Who this is for

  • People who already use PowerToys Mouse Without Borders on Windows and want a Linux machine in the same desk setup.
  • Developers who want keyboard, mouse, and clipboard sharing without running a full remote desktop session.
  • Linux users who are comfortable with X11-side input tooling and want the protocol work to be visible in the repo.

What it does

Architecture

The client runs a dual-mode connection (listens and connects outbound, first one wins), does an encrypted challenge-response handshake, sends proactive heartbeats every 5 seconds to keep Windows from dropping the connection, polls for screen edges every 10ms for instant switching, and forwards mouse/keyboard input as MWB protocol packets. Device isolation uses xinput disable/enable to prevent dual-cursor movement during remote control. Full protocol notes are in the repository's architecture doc.

Rendered Mermaid sequence diagram from the MWB Linux repository showing TCP setup, encryption, handshake, machine registration, and heartbeat lifecycle
Rendered from docs/ARCHITECTURE.md: TCP setup, AES stream initialization, handshake, machine-pool registration, and keep-alive. Open full SVG.
Rendered Mermaid sequence diagram from the MWB Linux repository showing Windows to Linux, Linux to Windows, and return-to-Linux cursor switching paths
Rendered from docs/ARCHITECTURE.md: MachineSwitched, Mouse(123), edge polling, xinput isolation, and return handling. Open full SVG.

Build decisions

I kept the first release as a command-line Go client rather than a tray app. That made the hard part visible: protocol compatibility, connection lifecycle, heartbeats, packet forwarding, clipboard sync, and input isolation. A GUI can come later; a GUI without a reliable protocol bridge would only make the project look more finished than it is.

The second decision was to document the desktop-environment boundary instead of smoothing it over. X11 exposes the control points this project needs for edge detection and device isolation. Wayland does not expose the same surface in a uniform way, so the project treats Wayland support as receive-only rather than pretending all Linux desktops behave the same.

Honest limitations

Bidirectional mode requires X11 (edge detection and device isolation use xdotool/xinput); receive-only mode works under Wayland via XWayland. Keyboard input doesn't work on the Windows lock screen, a Winlogon security restriction. On setups with many input devices, returning control to Linux can cause a brief 1-2 second compositor stall. These are documented in the repository rather than hidden.

Project artifacts

Install

curl -fsSL https://raw.githubusercontent.com/lucky-verma/mwb-linux/main/scripts/install.sh | sudo bash

Or build from source, or grab a versioned .deb/binary from Releases. Full instructions in the README.