Self-Hosted Remote-Desktop
Why even self-host?
There are a myriad of remote-desktop software options;
Parsec, RustDesk, Steam Remote Play, and many others.
-
Steam Remote Play is a option in Valve’s ecosystem, which works well, but the majority of my game library isn’t on Steam, let alone everything else I’d do with my computer.
-
Parsec is a proprietary, more developed commercial option targeted at gamers, and while it’s a good out-of-the box solution, it lacks control and features for my uses.
-
RustDesk is a great open source option for remote desktop, but it isn’t low-latency enough.
None of these options worked particularly well for me, which made me look for a better solution.
Moonlight (and Sunshine)
Moonlight is an open-source implementation of NVIDIA’s GameStream protocol;
Moonlight, paired with Sunshine, allows for low-latency remote desktop.
(Sunshine is a host used to interface with Moonlight)
So why use Moonlight & Sunshine?
- Supports higher FPS streaming than Parsec
- Free as in cost, but also non-proprietary.
- Elevated control compared to proprietary options.
- Optimized for gaming or remote-desktop use in settings.
- Private, no account creation, no connecting someone else’s server.
While being initially limited to LAN, it can be used remotely via a local VPN with something like WireGuard or port forwarding.
(Outside of this article’s scope currently)
It lacks some features from more developed alternatives, but personally, the merits outweigh its drawbacks.
Utility
It allows me to utilize older hardware I wouldn’t normally be able to use with very little latency.
I use it to stream games from my desktop to my laptop for portability, but it could also be used on consoles, Steam Deck, Phones (Android and IOS), Smart TVs, etc.
Installation and Setup
Download Moonlight and Sunlight using your respective package manager, If you’re using Windows just install via installer.
On my system it’s :
emerge net-misc/sunshine net-misc/moonlight
(Appimages also exist for both Moonlight and Sunlight)
Firewall
If you’re experiencing issues you may need to create exceptions for the following ports on your local firewall (I use firewall-config)
TCP : 47984, 47989, 48010
UDP : 5353, 47998, 47999, 48000, 48002, 48010
(Moonlight’s firewall setup documentation)