Software
RmDesk
Check your download: file names and SHA-256 checksums published 24/09/2026
Compare the checksum of the file you downloaded with the one listed here. If they differ, the file is not the one published on this page - delete it and download it again.
- RmDesk-0.2.5-Setup.exe
5e6ad51a6b8e630a5dffd9a23345b02d711c174d75546c0ec2e27b20285d2d94 - RmDesk-0.2.5-linux-x86_64.tar.gz
8771116fb377cdda5923b0eac9083eac8f859375ba7cc84db6c435e3a40e8f0b - RmDesk-0.2.5-linux-arm64.tar.gz
9e5f8a18b66513b546fb7bb500ec6ad9059de02cee85dcea1edeeca6e21c7038 - RmDesk-0.2.5-macos-arm64.tar.gz
bf77d782f8fdaf80dc73484cbac7c43dfb2a649d8ca96793fff2fc7b5beaf974 - RmDesk-0.2.5-macos-x64.tar.gz
43044ea0f8de88c67a55e6ddccfd715bdbe48ded8a9b4479193ebb98f00a2cae - RmDesk-0.2.5.apk
cbc48ed8827930558f3139a7fe511f6f5e2f09fe4fff9a456a555eb9cc6be114 - rmdesk-relay-setup-0.2.5.sh
102a52e85bc14853b36822aa4adf2d0e6c4896fa58c4bd62e7539abf3b24ba35 - rmdesk-relay-setup-0.2.5.ps1
0626eb8482811dfb77b0c0ae0775c18a0713cf67a3143a95b7c554128f441c11
Windows (PowerShell): Get-FileHash <file>
Linux: sha256sum <file>
macOS: shasum -a 256 <file>
How to install and use it
Windows 10 or 11
- Run
RmDesk-0.2.5-Setup.exeand say yes to the Windows prompt. It installs RmDesk and the two programs it needs to reach this computer's sign-in and lock screens. If you are not an administrator on this machine, choose "Install for me only" - everything works except the sign-in screen and the firewall rule, which genuinely need an administrator. - If Windows SmartScreen says the program is unrecognised, choose More info, then Run anyway. The program is not code-signed; the checksum above is how you know it is the published file.
- To let somebody in: read them the twelve digits and the password shown under "This computer". When they connect, check that the six words in the box match the ones on their screen, untick anything you do not want to allow, and press Allow.
- To reach another computer: type its twelve digits under "Another computer", and its password, and press Connect. Compare the six words with the person at the other end before you carry on. Leave "Remember the password for this computer" ticked and next time it connects without asking; the computers you reached are listed under Recent, one click to connect again.
- To reach this computer at its sign-in and lock screens: open RmDesk, set a permanent password and tick unattended access in Settings, and Save. Then Settings > The sign-in screen > Install the service, and allow the Windows prompt. The service answers to the same twelve digits and password, and a lock or a sign-in reconnects by itself in a few seconds. Nothing else to download - the installer has already put the service in place.
Android
- Copy
RmDesk-0.2.5.apkto the phone, open it in the Files app and tap Install. If Android refuses apps from this source, tap Settings, allow it for that app, and tap Install again - then turn the permission back off. - Open RmDesk. Type the other computer's twelve digits and its password, tap Connect, and compare the six words. The phone can also let somebody watch its screen, after you agree on the phone.
- Computers you connected to are listed under Recent: tap one to connect again, with its saved password if you ticked "Remember the password". Files a computer sends arrive in Downloads/RmDesk.
Linux
- The download holds the program, the relay, and a script that installs them. RmDesk shares this machine's screen (X11) and can join another one.
tar -xzf RmDesk-0.2.5-linux-x86_64.tar.gz cd RmDesk-0.2.5-linux-x86_64 sudo ./install.sh - It copies the programs into /usr/local/bin and asks whether RmDesk should start when you sign in and whether the firewall should let it in. Answer both however you like -
rmdesk startupandrmdesk firewallchange them later. Without sudo, pass--prefix ~/.localto install it just for you. - Then run
rmdesk host: it prints this machine's twelve digits and a password and waits. To join another machine,rmdesk connect <twelve digits>. - On 64-bit ARM use RmDesk-0.2.5-linux-arm64. To remove it again,
sudo ./install.sh --uninstall.
macOS
- The download holds the program, the relay and an install script. A Mac can join another machine and be controlled from one; this version cannot share a Mac's own screen.
tar -xzf RmDesk-0.2.5-macos-arm64.tar.gz cd RmDesk-0.2.5-macos-arm64 xattr -dr com.apple.quarantine . sudo ./install.sh - The
xattrline is needed because macOS quarantines anything downloaded from the web; without it the programs will not start and the reason given is unhelpful. - Then
rmdesk connect <twelve digits>to join a machine. On an Intel Mac use RmDesk-0.2.5-macos-x64. To remove it,sudo ./install.sh --uninstall.
Your own relay server (any machine with a public address)
- A relay lets two computers that cannot reach each other directly meet. RmDesk knows two already; to run your own, download
rmdesk-relay-setup-0.2.5.sh(Linux, 64-bit Intel/AMD or ARM, any distribution) orrmdesk-relay-setup-0.2.5.ps1(Windows Server). The relay program is inside the file, checked against its SHA-256 before it is installed: nothing else is needed, nothing is downloaded while it runs, and it depends on no server of ours. A domain name is optional - the address alone is enough. - On Linux, copy it to the machine and run it as root:
scp rmdesk-relay-setup-0.2.5.sh root@203.0.113.9: ssh root@203.0.113.9 sh rmdesk-relay-setup-0.2.5.sh - Answer the questions - the public address first; leave the domain empty to use the address. Nothing changes until you agree at the end. It installs the relay, runs it under an account with no login, starts it with the machine (systemd, OpenRC or init.d; in a bare container it starts it in the background), opens TCP port 7708 in the firewall and checks that it answers.
--yes --address 203.0.113.9answers everything at once,--checkchanges nothing,--uninstalltakes it all away,--extract DIRwrites out only the program. - On Windows Server, in PowerShell started with Run as administrator:
powershell -ExecutionPolicy Bypass -File .\rmdesk-relay-setup-0.2.5.ps1 - Let TCP port 7708 in at your provider's firewall or your router too, if there is one in front of the machine - the one step no script on the machine can do.
- In RmDesk on both computers add the address the script prints, for example
203.0.113.9:7708: Settings > Reaching machines on other networks > add > Save (on a phone: Relays > add). Then connect by the twelve digits as usual. The relay is used only when there is no direct path, and it cannot read the session: it is encrypted end to end before it arrives.
A question about installing or using it? Ask in the comments below, or through the contact page.
Remote support tools fall back to a server their vendor operates whenever a direct path cannot be made, and they end the connection when a path stops cooperating, which is precisely what carrier-grade NAT, inspecting proxies and satellite links do.
Remote desktop with a strictly peer-to-peer data plane, end-to-end encryption on every session with no unencrypted code path, a password or somebody agreeing before anyone gets in, and three ways to reach the far end tried in sequence.
Sessions come up on paths where other tools decline to start and hold while quality varies, with nothing extra to install at the far end and nobody in the middle able to read the traffic.
Somebody has to get onto a machine that is behind carrier-grade NAT, at the far end of a satellite hop, or inside a corporate network that inspects everything leaving it — and the alternative is a site visit that can cost a day. The question is not which remote desktop product has the longest feature list. It is whether a session will come up at all on a path like that, and whether it holds while a change is being made.
Why I built it
Because the commercial options answer a different question. They are built for supporting a user on a healthy broadband line, which is a reasonable thing to build for and not the situation I keep meeting. In that design a server the vendor operates carries the session whenever a direct path cannot be made, the assumption is a cooperative network, and when the path stops cooperating the connection ends rather than thins out.
Six years of remote-site work sets the requirement differently. A terminal is commissioned once and then expected to run unattended, the nearest engineer to it can be a day away, and the link you are working over is the link you are working on. So the two things that actually matter are that the data plane belongs to nobody but the two machines, and that the connection degrades instead of dropping. Both are transport decisions, which means they cannot be added afterwards — and that is what made this a piece of software rather than a purchase.
The problem
A relayed data plane puts an operator you cannot audit in the path of your screen, your keystrokes, your clipboard and your file transfers. On somebody else’s estate that is a question you will be asked and should be able to answer properly. It also puts their capacity and their availability in the path of your outage.
The rest is the networks themselves: symmetric NAT, carrier-grade NAT, proxies with deep packet inspection, captive portals, IPv6-only segments, lossy links and high-latency satellite paths. Tools that assume none of those either refuse to connect or die halfway through a configuration change, which on a remote site is worse than never having started. And the conventional answer — install one product on the machine you are helping and a different one on yours, each with its own account — is an obstacle at exactly the moment nobody has patience for one.
What I did
- A strictly peer-to-peer data plane. Screen, audio, input, clipboard and file transfer never traverse an operated server under normal conditions.
- End-to-end encryption with no unencrypted code path, decided at the start rather than added later, because encryption retrofitted onto a transport always leaves a way around it. Each installation holds a long-term key it generated itself.
- Nobody connects without a password or somebody at the far end agreeing. Consent is part of the protocol, not a setting that can be quietly left off.
- Degrade the experience rather than drop the connection. The judgement call that shapes everything else: the transport is written to give up picture quality, not the session.
- Three ways of reaching the far end, tried in sequence rather than all at once. A direct connection first, then a port mapping asked of the router, and only then a relay that routes by identifier and cannot read the session. The order is the point — the most direct and most private path is attempted first, and the relay is a last resort instead of the default.
- One application at both ends. The same program listens and connects, so there is no server to install and no second product to buy for the other side. On a local network it finds other machines by identifier with nothing to configure.
- The same design on Windows, Linux, macOS and Android, because the machine you happen to be holding when a site goes down is not negotiable.
The result
Sessions that come up on paths where the usual tools decline to start, and stay up while the picture gets worse and better again. Nothing at the far end beyond the same application, no port that somebody has to open by hand on the network in front of it, and no operator in the middle who could read the traffic even if asked to — including the relay, which routes by identifier and sees ciphertext.
The practical effect is fewer journeys and fewer half-finished changes. The wider point is the same one the other tools here make: this exists because a diagnosis and a support burden needed an instrument with particular properties, and no product on sale had them. Where a product does have them, I use the product.