Previous approach used Tauri sidecar binary with IPC commands. New approach uses the RustDesk web architecture correctly: - RustDesk server runs as native binary in --server mode (ports 21115-21119) - RustDesk web client (Flutter web build) loaded in a Tauri webview window - Web client communicates with server via WebSocket (21118/21119) Backend changes: - main.rs: Simplified IPC - start/stop server + open webview window - Removed tokio dependency (no longer needed) - Removed sidecar bundle config from tauri.conf.json Frontend changes: - RemoteDesktop.js: Toggle server on/off, launch web client webview - New UI with server control section + web client launcher - Updated CSS for the new layout - Updated HTML with server URL input and launch button Documentation: - Updated binaries/README.md with full build pipeline: 1. Build RustDesk native binary 2. Build Flutter web client 3. WASM bridge dependency note 4. Server ports reference
2.7 KiB
2.7 KiB
RustDesk Integration — Build Instructions
Architecture
Shelled OS (Tauri)
├── Main Window: OS desktop UI (taskbar, popups)
├── RustDesk Server: Native binary (--server mode, ports 21115-21119)
└── RustDesk Web Client: Flutter web build loaded in a Tauri webview
└── Connects to server via WebSocket (ws://localhost:21118, ws://localhost:21119)
Step 1: Build RustDesk Native Binary
The RustDesk binary is built from shelled/rustdesk-as-ref/.
Prerequisites (Windows)
- Rust toolchain (
rustup) - vcpkg with:
libvpx,libyuv,opus,aom - Visual Studio Build Tools (C++ workload)
set VCPKG_ROOT=C:\path\to\vcpkg
cd shelled\rustdesk-as-ref
cargo build --release
Copy binary
mkdir shelled\shelled-os-ui\src-tauri\binaries
copy target\release\rustdesk.exe shelled\shelled-os-ui\src-tauri\binaries\rustdesk.exe
Step 2: Build RustDesk Web Client
The web client is a Flutter web build that communicates with the server via WebSocket.
Prerequisites
- Flutter SDK 3.24+
- The
flutter/web/js/WASM bridge (fromrustdesk-web-clientproject)
Build
cd shelled\rustdesk-as-ref\flutter
# Install web dependencies
flutter pub get
flutter create --platforms web . # Generate web/ directory if missing
# Build Flutter web
flutter build web --release
Copy to Shelled OS
mkdir shelled\shelled-os-ui\rustdesk-web
xcopy build\web\* shelled\shelled-os-ui\rustdesk-web\ /E
Note on the WASM Bridge
The RustDesk web client requires a JS/WASM bridge layer that provides:
setByName(name, value)— Flutter → Rust/WASM commandsgetByName(name, value)— Rust/WASM → Flutter datainit()— Initialize the connection
This bridge was removed from the main RustDesk repo. You'll need to get it from:
- GitHub Releases:
web_deps.tar.gzfromrustdesk/doc.rustdesk.com - Or the
MonsieurBiche/rustdesk-web-clientfork'sfix-buildbranch
Step 3: Run Shelled OS
cd shelled\shelled-os-ui
npm run dev
Using the Remote Desktop
- Click the Remote Desktop icon in the taskbar
- Click "Start Server" to launch the RustDesk server
- Click "Launch" to open the web client in a new window
- Connect to remote machines through the web client
Server Ports
| Port | Protocol | Purpose |
|---|---|---|
| 21115 | TCP | NAT type test |
| 21116 | TCP+UDP | ID registration & signaling |
| 21117 | TCP | Relay server |
| 21118 | TCP/WS | WebSocket signaling (web client) |
| 21119 | TCP/WS | WebSocket relay (web client) |
WebSocket URLs (for web client)
- Signal:
ws://localhost:21118(orwss://behind reverse proxy) - Relay:
ws://localhost:21119(orwss://behind reverse proxy)