xdeskv1.0.0
User guideGuide utilisateur

Reach it from outsideL'atteindre de l'extérieur

The exposure modes: LAN, Tailscale, UPnP, bore, ngrok, cloudflared, manual; what each one opens and who can use it.Les modes d'exposition : LAN, Tailscale, UPnP, bore, ngrok, cloudflared, manuel ; ce que chacun ouvre et qui peut l'utiliser.

The LAN (and the PC itself) is always open while the host shares; the exposure mode adds one path. A connection arriving through a path the mode does not open is dropped before TLS and logged once. Changing the mode drops the sessions of the path it closes.

Le LAN (et le PC lui-même) est toujours ouvert pendant le partage ; le mode d'exposition ajoute un chemin. Une connexion arrivant par un chemin que le mode n'ouvre pas est coupée avant TLS et notée une fois dans les logs. Changer de mode coupe les sessions du chemin qu'il ferme.

1. ModesModes

ModeAddsHowEnd to end
lannothingevery local interface + UDP discovery (xdesk scan, port 47801)yes
tailscaleyour devices of the tailnethttps://100.x.y.z:<port>, or the MagicDNS name for xdesk connectyes (WireGuard + TLS)
upnpthe internetupnpc opens the port on the router, shows the public addressyes
borethe internet (relay)bore local <port> --to bore.pub (TCP, no account)yes
ngrokthe internet (relay)ngrok tcp <port> (account)yes
cloudflaredthe internet (relay, browsers only)cloudflared tunnel --url https://localhost:<port>no: the relay terminates TLS
manualthe internetport forwarded by hand, public address in the settingsyes
xdesk host --expose tailscale -p 47900   # this run only: exposure and port

The tools are used only when installed; the panel shows the state of the tunnel and every address, each with copy and QR code buttons. The TCP tunnels (bore, ngrok, cloudflared) keep the video on TCP; with manual, forward UDP too for the native viewers.

ModeAjouteCommentDe bout en bout
lanrientoutes les interfaces locales + découverte UDP (xdesk scan, port 47801)oui
tailscaletes appareils du tailnethttps://100.x.y.z:<port>, ou le nom MagicDNS pour xdesk connectoui (WireGuard + TLS)
upnpinternetupnpc ouvre le port sur la box, affiche l'adresse publiqueoui
boreinternet (relais)bore local <port> --to bore.pub (TCP, sans compte)oui
ngrokinternet (relais)ngrok tcp <port> (compte)oui
cloudflaredinternet (relais, navigateurs seulement)cloudflared tunnel --url https://localhost:<port>non : le relais termine TLS
manualinternetport redirigé à la main, adresse publique dans les réglagesoui
xdesk host --expose tailscale -p 47900   # ce lancement seulement : exposition et port

Les outils ne sont utilisés que s'ils sont installés ; le panneau montre l'état du tunnel et chaque adresse, avec des boutons copier et QR code. Les tunnels TCP (bore, ngrok, cloudflared) gardent la vidéo en TCP ; avec manual, redirige aussi l'UDP pour les viewers natifs.

2. Tailscale and browsersTailscale et navigateurs

Every *.ts.net name is on the HSTS preload list of the browsers: a self-signed certificate is refused there without any way to accept it. So the Tailscale path gets a real certificate with tailscale cert (renewed by xdesk, kept in <data>/tailscale/), picked by the server from the name the browser asks (SNI): https://<pc>.<tailnet>.ts.net:<port> opens without warning. The native clients send no name and keep the pinned self-signed certificate.

Important. Needs, once: HTTPS enabled in the Tailscale admin console (DNS page; the name is then published in the public certificate logs) and the right to run tailscale cert (sudo tailscale set --operator=$USER). Without them the browser address stays the 100.x.y.z IP and the panel says why.

LAN addresses use the <pc>.local name when avahi / Bonjour publishes it, the IP otherwise.

Chaque nom *.ts.net est dans la liste HSTS préchargée des navigateurs : un certificat auto-signé y est refusé sans aucun moyen de l'accepter. Le chemin Tailscale reçoit donc un vrai certificat avec tailscale cert (renouvelé par xdesk, gardé dans <data>/tailscale/), choisi par le serveur selon le nom demandé par le navigateur (SNI) : https://<pc>.<tailnet>.ts.net:<port> s'ouvre sans avertissement. Les clients natifs n'envoient pas de nom et gardent le certificat auto-signé épinglé.

Important. Il faut, une fois : HTTPS activé dans la console d'admin Tailscale (page DNS ; le nom est alors publié dans les logs publics de certificats) et le droit de lancer tailscale cert (sudo tailscale set --operator=$USER). Sans cela l'adresse du navigateur reste l'IP 100.x.y.z et le panneau dit pourquoi.

Les adresses du LAN utilisent le nom <pc>.local quand avahi / Bonjour le publie, l'IP sinon.