Add local screenshare app
Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
parent
527ed85dff
commit
c23d7d06e0
8 changed files with 3552 additions and 0 deletions
149
lanshare/README.md
Normal file
149
lanshare/README.md
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue