1- # LinGlide
1+ <p align =" center " >
2+ <img src =" LinGlideFlow.png " alt =" LinGlide " width =" 128 " >
3+ <br >
4+ <strong >LinGlide</strong >
5+ </p >
26
3- [ ![ CI] ( https://github.com/BeckhamLabsLLC/LinGlide/actions/workflows/ci.yml/badge.svg )] ( https://github.com/BeckhamLabsLLC/LinGlide/actions/workflows/ci.yml )
4- [ ![ License: MIT] ( https://img.shields.io/badge/License-MIT-blue.svg )] ( LICENSE )
7+ <h3 align =" center " >Use your phone as a second monitor on Linux</h3 >
58
69<p align =" center " >
7- <img src =" LinGlideFlow.png " alt =" LinGlide Logo " width =" 128 " >
10+ <a href =" https://github.com/BeckhamLabsLLC/LinGlide/actions/workflows/ci.yml " ><img src =" https://github.com/BeckhamLabsLLC/LinGlide/actions/workflows/ci.yml/badge.svg " alt =" CI " ></a >
11+ <a href =" LICENSE " ><img src =" https://img.shields.io/badge/License-MIT-blue.svg " alt =" License: MIT " ></a >
12+ <a href =" https://github.com/BeckhamLabsLLC/LinGlide/releases " ><img src =" https://img.shields.io/github/v/release/BeckhamLabsLLC/LinGlide " alt =" Release " ></a >
13+ <a href =" https://github.com/BeckhamLabsLLC/LinGlide/stargazers " ><img src =" https://img.shields.io/github/stars/BeckhamLabsLLC/LinGlide?style=social " alt =" GitHub stars " ></a >
814</p >
915
10- A high-performance Linux application that turns your mobile device into an extended display with touch control. Built with Rust for optimal performance.
16+ <p align =" center " >
17+ <em >Turn any phone or tablet into a wireless extended display with touch control.<br >No app install needed — runs entirely in the browser. Built with Rust.</em >
18+ </p >
1119
12- ** Developed by [ BeckhamLabs ] ( https://beckhamlabs.com ) **
20+ ---
1321
14- ## Features
22+ Windows and macOS have tools like Duet Display, Sidecar, and GlideX. Linux has had nothing — until now.
23+
24+ ** 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.
1525
16- - ** Extended Display** : Use your phone/tablet as a second monitor
17- - ** Touch Control** : Full touch input support - tap, scroll, drag
18- - ** Zero App Install** : Works in any modern browser (PWA supported)
19- - ** Low Latency** : Hardware-accelerated H.264 streaming
20- - ** Secure** : Device pairing with PIN verification
21- - ** mDNS Discovery** : Devices auto-discover the server on your network
26+ <!-- TODO: Replace with an actual demo GIF or screenshot of LinGlide in action -->
27+ <!-- <p align="center">
28+ <img src="demo.gif" alt="LinGlide demo" width="600">
29+ </p> -->
2230
23- ## Quick Install
31+ ## Why LinGlide?
2432
25- One command to install everything:
33+ | | LinGlide | VNC-based scripts | Deskreen |
34+ | ---| ---| ---| ---|
35+ | ** True extended display** | Virtual monitor via EVDI | xrandr hacks | Mirror only |
36+ | ** Touch input** | Native tap, scroll, drag, stylus | No | No |
37+ | ** App install required** | No (browser PWA) | VNC viewer app | No |
38+ | ** Latency** | Low (H.264 + WebCodecs) | High (VNC) | Medium (WebRTC) |
39+ | ** Written in** | Rust | Bash/Python | Electron |
40+ | ** Linux native** | Yes | Yes | Cross-platform |
41+ | ** Secure pairing** | PIN + token auth + TLS | None | None |
42+
43+ ## Features
44+
45+ - ** Extended display** — real virtual monitor via EVDI kernel module, visible in display settings
46+ - ** Mirror mode** — share your existing screen without a virtual display
47+ - ** Full touch control** — tap, scroll, drag, and stylus input via uinput
48+ - ** Zero install on mobile** — works in Chrome, Edge, Safari (PWA for app-like experience)
49+ - ** Low latency** — hardware-accelerated H.264 encoding with OpenH264
50+ - ** Secure** — 6-digit PIN pairing, token authentication, TLS encryption
51+ - ** Auto-discovery** — devices find LinGlide automatically via mDNS
52+ - ** USB support** — ADB port forwarding for wired Android connections
53+ - ** Desktop GUI** — system tray app with QR code for easy pairing
54+ - ** CLI** — fully scriptable for power users
55+
56+ ## Quick Start
2657
2758``` bash
2859git clone https://github.com/BeckhamLabsLLC/LinGlide.git
29- cd linglide
60+ cd LinGlide
3061sudo ./scripts/install.sh
3162```
3263
33- Then ** log out and log back in** for permissions to take effect.
64+ Log out and back in, then:
3465
35- ## Usage
36-
37- 1 . Launch ** LinGlide** from your application menu (or run ` linglide ` in terminal)
66+ 1 . Launch ** LinGlide** from your application menu (or run ` linglide ` )
38672 . Click ** Start Server**
39- 3 . On your mobile device, open the URL shown (or scan the QR code)
40- 4 . Enter the PIN to pair your device
41-
42- That's it! Your mobile device is now an extended display.
68+ 3 . On your phone, open the URL shown or scan the QR code
69+ 4 . Enter the PIN — done
4370
4471## System Requirements
4572
4673- Linux with X11 (Wayland support planned)
47- - EVDI kernel module (installed automatically)
48- - Modern browser with WebCodecs (Chrome 94+, Edge 94+, Safari 16.4+)
74+ - EVDI kernel module (installed automatically by the install script)
75+ - Mobile browser with WebCodecs support:
76+ - Chrome/Chromium 94+
77+ - Edge 94+
78+ - Safari 16.4+
79+ - Firefox is ** not** supported (no WebCodecs)
4980
5081## Build from Source
5182
52- If you prefer to build manually:
53-
5483``` bash
5584# Install dependencies (Ubuntu/Debian)
5685sudo apt install build-essential pkg-config libssl-dev libx11-dev \
@@ -64,23 +93,17 @@ cargo build --release -p linglide-desktop
6493./target/release/linglide-gui
6594```
6695
67- ## Uninstall
68-
69- ``` bash
70- sudo ./scripts/uninstall.sh
71- ```
72-
7396## How It Works
7497
7598```
7699┌─────────────────────────────────────────────────────────────┐
77100│ LINUX HOST (Rust) │
78101├─────────────────────────────────────────────────────────────┤
79- │ EVDI → Frame → H.264 Encoder │
80- │ (Virtual Capture (OpenH264) │
102+ │ EVDI → Frame → H.264 Encoder │
103+ │ (Virtual Capture (OpenH264) │
81104│ Display) │
82105│ │
83- │ uinput ← Event ← WebSocket Server │
106+ │ uinput ← Event ← WebSocket Server │
84107│ (Touch) Handler (Axum + TLS) │
85108└─────────────────────────────────────────────────────────────┘
86109 │
@@ -96,34 +119,44 @@ sudo ./scripts/uninstall.sh
96119
97120## Troubleshooting
98121
99- ### EVDI module not loading
122+ <details >
123+ <summary ><strong >EVDI module not loading</strong ></summary >
100124
101125If you see "Failed to add EVDI device", run:
102126``` bash
103127sudo modprobe -r evdi && sudo modprobe evdi initial_device_count=1
104128```
105-
106129The install script configures this automatically for future boots.
130+ </details >
107131
108- ### Permission denied for uinput
132+ <details >
133+ <summary ><strong >Permission denied for uinput</strong ></summary >
109134
110135Log out and log back in after installation for group permissions to take effect.
136+ </details >
111137
112- ### Browser not supported
138+ <details >
139+ <summary ><strong >Browser not supported</strong ></summary >
113140
114- WebCodecs is required. Supported browsers:
115- - Chrome/Chromium 94+
116- - Edge 94+
117- - Safari 16.4+
141+ WebCodecs is required. Use Chrome/Chromium 94+, Edge 94+, or Safari 16.4+. Firefox does not support WebCodecs.
142+ </details >
118143
119- Firefox does not support WebCodecs.
144+ ## Contributing
145+
146+ Contributions are welcome! Feel free to open issues for bugs or feature requests, or submit pull requests.
147+
148+ ## Uninstall
149+
150+ ``` bash
151+ sudo ./scripts/uninstall.sh
152+ ```
120153
121154## License
122155
123- MIT License - see [ LICENSE] ( LICENSE ) for details.
156+ MIT License — see [ LICENSE] ( LICENSE ) for details.
124157
125158---
126159
127160<p align =" center " >
128- Made with care for the Linux community by <a href =" https://beckhamlabs.com " >BeckhamLabs</a >
161+ <a href =" https://beckhamlabs.com " >BeckhamLabs</a >
129162</p >
0 commit comments