Add local screenshare app

Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
Marcel Müller 2026-02-04 12:18:48 +01:00
parent 527ed85dff
commit c23d7d06e0
8 changed files with 3552 additions and 0 deletions

149
lanshare/README.md Normal file
View file

@ -0,0 +1,149 @@
# LAN Share
A peer-to-peer screen sharing application for local networks. No accounts, no cloud services — just open a browser and share.
## Features
- **WebRTC P2P**: Direct peer-to-peer connections, video never touches the server
- **Audio support**: Optionally share system audio with your screen
- **Multiple streams**: View multiple shared screens, select which one to focus on
- **Zero config**: Just run the server and open the URL in any browser
- **Keyboard shortcuts**: `F` for fullscreen, `M` for mute, `Escape` to expand sidebar
## Building
```bash
cargo build --release
```
The binary will be at `target/release/lanshare`.
## Running
```bash
./target/release/lanshare
```
Or with cargo:
```bash
cargo run --release
```
The server starts on `http://0.0.0.0:8080` by default.
### CLI Options
```
Usage: lanshare [OPTIONS]
Options:
-H, --host <IP> IP address to bind to [default: 0.0.0.0]
-p, --port <PORT> Port to listen on [default: 8080]
-v, --verbose Enable verbose/debug logging
-q, --quiet Quiet mode - only show errors
-h, --help Print help
-V, --version Print version
```
Examples:
```bash
# Listen on a specific interface
lanshare --host 192.168.1.100 --port 3000
# Localhost only (for testing)
lanshare -H 127.0.0.1
# Quiet mode
lanshare -q
```
### CLI Options
```
LAN Share - Peer-to-peer screen sharing for local networks
Usage: lanshare [OPTIONS]
Options:
-H, --host <HOST> Host address to bind to [default: 0.0.0.0]
-p, --port <PORT> Port to listen on [default: 8080]
-v, --verbose Enable verbose logging
-h, --help Print help
-V, --version Print version
```
### Examples
```bash
# Run on default settings (0.0.0.0:8080)
lanshare
# Run on a specific port
lanshare -p 3000
# Bind to localhost only
lanshare -H 127.0.0.1 -p 8080
# Run with verbose logging
lanshare -v
```
## Usage
1. Start the server on any machine in your LAN
2. Open `http://<server-ip>:8080` in a browser on each device
3. Enter your name when prompted
4. Click "Start Sharing" to share your screen
5. Select shared screens from the sidebar to view them
## Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ Signaling Server │
│ (Rust/Axum/WebSocket) │
│ - Peer discovery │
│ - Relays SDP offers/answers │
│ - Relays ICE candidates │
└─────────────────────────────────────────────────────────────┘
│ │
│ WebSocket │ WebSocket
│ (signaling only) │ (signaling only)
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Peer A │◄────────────────────►│ Peer B │
│ (Browser) │ WebRTC P2P │ (Browser) │
└─────────────┘ (video/audio) └─────────────┘
```
The server only handles signaling — the actual video/audio streams flow directly between browsers via WebRTC.
## Browser Support
Tested on:
- Chrome/Chromium
- Firefox
- Edge
- Safari (macOS)
Note: Screen sharing with audio requires Chrome/Edge on Windows/macOS. Firefox and Linux may have limited audio capture support depending on the system.
## Configuration
Command-line options take precedence over defaults. See `lanshare --help` for all options.
Environment variables:
- `RUST_LOG`: Override log level (e.g., `RUST_LOG=lanshare=debug`)
## Security Notes
- This is designed for **trusted local networks only**
- No authentication — anyone with the URL can join
- No encryption beyond what WebRTC provides by default (DTLS-SRTP)
- Don't expose to the internet without additional security measures
## License
MIT