This guide is for the other server that will run the actual remote desktop tool — not this download site. All IP addresses, domain names and login details below are generic examples. Replace them with your own real values before going to production.
Fill in the fields below and the commands and config files on this page update automatically with your own values. Everything happens in your browser — nothing is sent anywhere.
Download the latest release (v0.1.1) from the Downloads page, and unpack it on the server that will run the tool — not on this web server. The zip contains signaling-server/, host-agent/, web-viewer/ and deploy/ with all the templates mentioned below.
The same placeholders recur in renderer.js, viewer.js, and every file in deploy/. Find/replace all of them before you start anything.
Generate strong, random TURN login credentials yourself, e.g. with openssl rand -base64 24 — never use the example values directly.
bash deploy/ubuntu/install-ubuntu.sh server
sudo systemctl daemon-reload
sudo systemctl enable --now signaling-server
bash deploy/ubuntu/install-ubuntu.sh host
cd host-agent && npm start
Ubuntu 24.04 uses Wayland by default — choose "Ubuntu on Xorg" at login, or run npm start -- --ozone-platform=x11 if screen capture fails.
sudo ln -s /etc/nginx/sites-available/YOUR_DOMAIN /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d YOUR_DOMAIN
sudo apt install -y coturn certbot
sudo certbot certonly --standalone -d YOUR_TURN_DOMAIN
sudo systemctl enable --now coturn
sudo ufw allow 3478
sudo ufw allow 5349
sudo ufw allow 49152:65535/udp
powershell -ExecutionPolicy Bypass -File deploy\windows\install-windows.ps1
cd host-agent
npm start
Installs Node.js via winget if missing, and runs npm install in host-agent/.
Use NSSM to run it as a service — see deploy/windows/run-signaling-server-as-service.md in the zip for the full commands.
Requires no installation:
cd web-viewer
npx serve .
Open the printed URL in Chrome, enter the signaling server address and the session code, and connect.
Automatically replaces the commands and files below on this page as you fill in the fields above. Values are only stored locally in your browser (localStorage) — nothing is sent to any server.
Loading…
Loading…
Loading…
Loading…
| Placeholder | Meaning |
|---|---|
your-domain.example | Your public domain |
turn.your-domain.example | Subdomain for the TURN server |
TURN_PUBLIC_IP | Public IP of the coturn machine |
SIGNALING_INTERNAL_IP | Internal IP of the machine running server.js |
SIGNALING_PORT | Port server.js listens on (default 8080) |
CHANGE_ME_TURN_USER / _PASSWORD | Your own random TURN login credentials |
INSTALL_PATH | Where you unpack the project on the target machine |
| ☐ Real TURN login credentials generated and inserted everywhere |
| ☐ TLS enabled on both the signaling domain and the TURN domain |
| ☐ Firewall rules restricted to only the necessary ports |
| ☐ Signaling server runs as a non-root service user |
| ☐ Session codes are long enough (16+ characters) if used without a password |
| ☐ systemd/NSSM restarts services automatically on crash and boot |