utility-scripts/lanshare/README.md
Marcel Müller accbfdb1ea Update
Signed-off-by: Marcel Müller <neikos@neikos.email>
2026-02-09 08:22:15 +01:00

152 lines
4.3 KiB
Markdown

# 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 (with bundled candidates) │
└─────────────────────────────────────────────────────────────┘
│ │
│ WebSocket │ WebSocket
│ (signaling only) │ (signaling only)
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Peer A │◄────────────────────►│ Peer B │
│ (Browser) │ Direct WebRTC │ (Browser) │
└─────────────┘ (video/audio) └─────────────┘
```
**100% Local Network** — No external services, simple direct connections:
- No STUN/TURN servers needed
- No trickle ICE — candidates bundled directly in SDP
- One offer + one answer = connected
- Video/audio streams stay entirely on your LAN
## 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