Remote Desktop
LabTether puts a remote desktop in your browser — no client app needed. Four protocols cover everything from a headless Linux server to a Windows workstation to a Proxmox VM with a SPICE display adapter. Pick the one that fits, and LabTether handles the connection plumbing.
Choosing a protocol
| Protocol | Best for | Latency | Platform support |
|---|---|---|---|
| WebRTC | Lowest latency interactive control | Excellent (peer-to-peer when possible) | Linux agents (capture is Linux-only for now) |
| VNC | Universal fallback, widest compatibility | Good | Linux, macOS, Windows, Proxmox VMs |
| RDP | Windows remote desktop | Good (via guacd proxy) | Windows |
| SPICE | Proxmox QEMU/KVM VMs with SPICE display | Good | Proxmox VMs with SPICE-capable display adapter |
Start with WebRTC when the agent reports it as available — you get the best latency, clipboard sync, drag-and-drop file transfer, and multi-monitor support. If WebRTC is unavailable or the connection quality stays poor, LabTether automatically falls back to VNC after a short grace period. If VNC stabilizes and conditions improve, it can recover back to WebRTC automatically.
Use VNC as your general-purpose fallback. It works across every platform and does not depend on WebRTC peer negotiation. For macOS targets, make sure Screen Sharing is enabled with control (not observe-only) permissions.
Use RDP for Windows nodes where you want a native Windows remote desktop experience. It runs through guacd, so the hub needs the guacd service running and reachable.
Use SPICE only for Proxmox VMs that have a SPICE-capable display adapter configured. LabTether defaults Proxmox VMs to VNC because not every VM exposes a SPICE port — you need to explicitly switch to SPICE in the desktop protocol selector when you know the VM supports it.
Tip: Keep one known-good fallback protocol documented per environment. When something is on fire at 2 AM, you do not want to debug protocol selection — you want to get in.
WebRTC
WebRTC gives you the lowest latency path, with direct peer-to-peer connectivity when both sides are on the same LAN. The connection negotiates through the hub, but actual media and input flow directly between your browser and the agent when possible.
Requirements:
- Agent reports WebRTC capability (currently Linux-only for desktop capture)
- Browser supports WebRTC media and data channels
- No firewall blocking ICE traversal between peers
Starting a session:
- Open the node's desktop tab and select WebRTC.
- Wait for the signaling handshake to complete.
- The desktop stream renders in the viewer with keyboard and mouse input.
What you get beyond basic desktop:
- Clipboard sync — toolbar buttons push/pull clipboard content directly between browser and agent, no hub relay needed.
- File transfer — drag files onto the viewer to upload them over the WebRTC data channel. Progress shows inline.
- Multi-monitor — if the target reports multiple displays, LabTether renders them as a stitched layout using the agent-reported geometry.
- Quality indicator — the toolbar shows a live quality badge (
good,fair, orpoor) reflecting stream health. - Ad-hoc recording — hit the record button for a browser-local WebM capture.
Auto-fallback: If the quality badge stays at poor or the ICE candidate pair is relayed and remains degraded, LabTether automatically reconnects with VNC. If VNC stabilizes and conditions improve, it can recover back to WebRTC.
Tip: Direct/LAN ICE routes are attempted before reflected or relayed candidates. If WebRTC keeps demoting to VNC, check whether a firewall or NAT is blocking direct connectivity between the two peers.
VNC
VNC is the compatibility workhorse. It works everywhere — Linux, macOS, Windows, and Proxmox VM consoles — and does not depend on peer-to-peer negotiation.
Starting a session:
- Select VNC in the desktop protocol picker.
- Wait for the handshake.
- The desktop renders in an embedded noVNC viewer.
Viewer controls:
- In the embedded view, session controls live in a dock below the viewer.
- In fullscreen, use the bottom overlay toolbar. It supports auto-hide, top/bottom positioning, and a More menu for shortcuts and display selection.
- Mouse hands pointer control to the remote viewer. Keyboard sends typing to the remote session without hiding your local cursor.
Agent-backed features: Clipboard sync, file download, multi-monitor display selection, and desktop audio with mute/volume controls. Audio changes update in place without restarting the sideband stream.
Tip: If the Linux desktop path hides the remote cursor shape, LabTether keeps a visible local fallback cursor until a usable cursor is available again. For missing audio on Linux, verify
ffmpegorgst-launch-1.0is installed and that the target exposes a PulseAudio or PipeWire source.
RDP
RDP sessions are proxied through guacd (Apache Guacamole's connection daemon) for a native Windows remote desktop experience in the browser.
Requirements:
- guacd service running and reachable by the hub
- Target has RDP enabled with valid credentials
Starting a session:
- Select RDP in the desktop protocol picker.
- Start the session and wait for the guacd handshake.
- The Windows desktop renders in the browser viewer with keyboard and mouse input.
Tip: If you have trouble, check guacd service state and network path first, then verify the target's RDP settings and credentials. Compare with VNC or WebRTC to isolate whether the issue is protocol-specific or network-level.
SPICE
SPICE provides a display protocol path for Proxmox QEMU/KVM VMs that have a SPICE-capable display adapter configured. The connection flows through a same-origin WebSocket on the hub, so your browser only needs to trust one origin — no second TLS prompt for the Proxmox backend.
Requirements:
- Proxmox connector healthy
- VM configured with a SPICE-capable display adapter
- VM currently exposing a SPICE port
Starting a session:
- Switch the desktop protocol selector from the default VNC to SPICE for the target VM.
- Start the session — LabTether requests a SPICE ticket from Proxmox.
- The hub dials the Proxmox SPICE
tls-portwith TLS (using your collector'sca_pemorskip_verifysettings) and forwards frames to the browser viewer. - The desktop renders through the same
https://your-hub/desktop/sessions/{id}/streamWebSocket path.
Warning: LabTether defaults Proxmox VMs to VNC because Proxmox inventory reachability does not guarantee that a given VM is currently exposing a SPICE port. Only switch to SPICE when you know the VM supports it. If the SPICE ticket succeeds but the stream fails, check whether the collector TLS settings match the certificate Proxmox presents on the SPICE
tls-port.