Skip to content

Sunshine & Moonlight

Ultra high performance remote desktop software. This is an open-source continuation of Nvidia's GameStream project. It works by directly copying your GPU's frame buffer and encoding it into a HEVC video stream.

Sunshine is an implementation of the Moonlight Server.

Apollo is a fork of Sunshine that includes virtual display management out of the box.

Installation

Sunshine Github

Apollo Github

Moonlight Github

Apollo Config Notes

I'm currently unable to get Apollo to release its virtual display upon disconnect of a client. Terminating Apollo returns everything to normal. To this end I have "Device Configuration" for the virtual display set to "verify that the display is enabled" which means don't create a virtual display if not required. It is also wise ime to boost the minimum FPS factor to at least 60 to get rid of rubbery movement on the virtual display.

WAN Setup

Right now I just use a Wireguard VPN to my home network to connect, but here's how you can remotely manage and connect directly. Forward the following ports for Sunshine:

  • 47989 TCP (Sunshine HTTP)
  • 47984 TCP (Sunshine HTTPS)
  • 48010 TCP (Sunshine RTSP)
  • 47998-48002 UDP (Sunshine A/V/Mic/Control)

I have Sunshine's web portal (port 47990) not forwarded and instead reverse proxied through Caddy. I have tls_insecure_skip_verify because Sunshine tries to force certificate usage, but we have Caddy taking care of that for us. I use direct IP connect to sunshine to avoid a non-proxied DNS subdomain entry exposing my IP address.

sub.domain.here {
        reverse_proxy 192.168.7.11:47990 {
                transport http {
                        tls_insecure_skip_verify
                }
        }
}