Project 01 · Initial release

A phone becomes your Linux mouse and keyboard.

Portway serves a touch controller straight from your computer. Open it in a phone browser, pair once, and control the host without a native app or a cloud relay.

Runs on
Linux
Written in
Rust
License
MIT
Requires
A browser

WHY / 02

Remote control without another account, app, or vendor in the middle.

Portway is a small server with a specific job. It serves its own controller, accepts authenticated input over WebSockets, and hands that input to Linux. Your phone needs only a modern browser.

HOW IT WORKS / 03

Three parts. One local connection.

Portway defaults to port 2721 and serves everything the controller needs from the Linux host.

  1. 01

    Run it on Linux

    The service starts an HTTP(S) and WebSocket server beside the uinput backend.

    portway serve
  2. 02

    Open it on your phone

    Visit the host’s local address. There is no app package to install or update.

    192.168.1.42:2721
  3. 03

    Pair and control

    Exchange a short-lived six-digit code for a browser session, then use the touchpad or keyboard.

    portway pair

CONTROLS / 04

Made for the awkward moment when the keyboard is elsewhere.

Reach for the phone already beside you: pause a video, move a window, enter a command, or navigate from across the room.

01

Touchpad gestures

Move, tap, double-click, two-finger scroll, right-click, and click-and-drag from one large touch surface.

02

A useful keyboard

Send US-ASCII text, sticky modifiers, navigation keys, F1–F12, and common media controls.

03

Kernel-level input

Events go through Linux /dev/uinput, so the basic path is not tied directly to X11 or Wayland.

04

Defensive release

Disconnects, hidden pages, inactivity, and server shutdown all release held keys and mouse buttons.

INSTALL / 05

Build it, then let the guided installer do the system work.

Portway uses the latest stable Rust toolchain. On a conventional systemd distribution, the installer creates an unprivileged service, configures access to /dev/uinput, and starts it at boot.

NixOS stays declarative; a flake package and NixOS module are included in the repository.

shell / quick start
git clone https://github.com/heptanal/portway.git
cd portway
cargo build --release --locked
scripts/install-linux

SECURITY / 06

Local does not automatically mean private.

Portway requires authentication by default, but plain HTTP does not encrypt pairing codes or input.

  • 01Use it on a trusted network and restrict port 2721 with your firewall.
  • 02Configure native HTTPS when traffic needs protection in transit.
  • 03Run the service as an unprivileged user—not root.
Read the security model

PORTWAY / OPEN SOURCE / MIT

The short path from your thumb to Linux.

Get the source