Turn any phone or tablet into a wireless extended display with touch control.
No app install needed — runs entirely in the browser. Built with Rust.
Windows and macOS have tools like Duet Display, Sidecar, and GlideX. Linux has had nothing — until now.
LinGlide is a native Linux application that creates a real virtual display on your system and streams it to any mobile device over WiFi. Your phone becomes a true second monitor: drag windows to it, use touch to interact, and it shows up in your display settings like any other screen.
| LinGlide | VNC-based scripts | Deskreen | |
|---|---|---|---|
| True extended display | Virtual monitor via EVDI | xrandr hacks | Mirror only |
| Touch input | Native tap, scroll, drag, stylus | No | No |
| App install required | No (browser PWA) | VNC viewer app | No |
| Latency | Low (H.264 + WebCodecs) | High (VNC) | Medium (WebRTC) |
| Written in | Rust | Bash/Python | Electron |
| Linux native | Yes | Yes | Cross-platform |
| Secure pairing | PIN + token auth + TLS | None | None |
- Extended display — real virtual monitor via EVDI kernel module, visible in display settings
- Mirror mode — share your existing screen without a virtual display
- Full touch control — tap, scroll, drag, and stylus input via uinput
- Zero install on mobile — works in Chrome, Edge, Safari (PWA for app-like experience)
- Low latency — hardware-accelerated H.264 encoding with OpenH264
- Secure — 6-digit PIN pairing, token authentication, TLS encryption
- Auto-discovery — devices find LinGlide automatically via mDNS
- USB support — ADB port forwarding for wired Android connections
- Desktop GUI — system tray app with QR code for easy pairing
- CLI — fully scriptable for power users
git clone https://github.com/BeckhamLabsLLC/LinGlide.git
cd LinGlide
sudo ./scripts/install.shLog out and back in, then:
- Launch LinGlide from your application menu (or run
linglide) - Click Start Server
- On your phone, open the URL shown or scan the QR code
- Enter the PIN — done
- Linux with X11 (Wayland support planned)
- EVDI kernel module (installed automatically by the install script)
- Mobile browser with WebCodecs support:
- Chrome/Chromium 94+
- Edge 94+
- Safari 16.4+
- Firefox is not supported (no WebCodecs)
# Install dependencies (Ubuntu/Debian)
sudo apt install build-essential pkg-config libssl-dev libx11-dev \
libxcb1-dev libxcb-shm0-dev libxcb-randr0-dev \
libudev-dev evdi-dkms
# Build
cargo build --release -p linglide-desktop
# Run
./target/release/linglide-gui┌─────────────────────────────────────────────────────────────┐
│ LINUX HOST (Rust) │
├─────────────────────────────────────────────────────────────┤
│ EVDI → Frame → H.264 Encoder │
│ (Virtual Capture (OpenH264) │
│ Display) │
│ │
│ uinput ← Event ← WebSocket Server │
│ (Touch) Handler (Axum + TLS) │
└─────────────────────────────────────────────────────────────┘
│
WiFi (WebSocket + fMP4)
│
┌─────────────────────────────────────────────────────────────┐
│ MOBILE DEVICE (Browser/PWA) │
├─────────────────────────────────────────────────────────────┤
│ WebCodecs Touch Event Fullscreen │
│ H.264 Decoder Handler Manager │
└─────────────────────────────────────────────────────────────┘
EVDI module not loading
If you see "Failed to add EVDI device", run:
sudo modprobe -r evdi && sudo modprobe evdi initial_device_count=1The install script configures this automatically for future boots.
Permission denied for uinput
Log out and log back in after installation for group permissions to take effect.
Browser not supported
WebCodecs is required. Use Chrome/Chromium 94+, Edge 94+, or Safari 16.4+. Firefox does not support WebCodecs.
Contributions are welcome! Feel free to open issues for bugs or feature requests, or submit pull requests.
sudo ./scripts/uninstall.shMIT License — see LICENSE for details.
