$ SOLVED // it worked
Solved Linux Sunshine host (headless Linux, RTX GPU) + Moonlight client moderate

Moonlight won't connect to a headless PC (RTSP Error 60)

Symptom Moonlight shows the PC but fails to start the stream with "RTSP Error 60"; or the PC status shows Offline despite the host being up.

Updated 2026-06-05 Verified fix

Moonlight could see the headless Sunshine box and even pair with it, but starting a stream died immediately with “RTSP Error 60.” Sometimes the client showed the PC as Offline entirely, despite the host being powered on and reachable.

Root cause

On a headless host, Sunshine’s RTSP handshake fails when the service is in a bad state — most often:

  • A zombie session from a previous stream that didn’t tear down cleanly is still holding the encoder/RTSP port, so the new connection can’t negotiate.
  • The systemd unit hit its start-limit (start-limit-hit) after repeated crash/restart cycles and is now refusing to start, which presents to the client as Offline.

RTSP Error 60 is the client’s view of “the server accepted me but never completed the RTSP setup” — almost always the server side being wedged, not a network problem.

The fix

Clear the stuck session and bring the service back cleanly:

systemctl --user status sunshine        # diagnose: active? failed? start-limit-hit?
systemctl --user stop sunshine          # drop the zombie session holding the encoder
systemctl --user reset-failed sunshine  # clear start-limit-hit if present
systemctl --user start sunshine

Then reconnect from Moonlight. The RTSP handshake completes and the stream starts.

Notes for headless hosts

  • A headless Sunshine host needs a virtual display (or the GPU’s headless mode) for the encoder to have something to capture; if that’s missing, sessions will repeatedly fail and trip the start-limit — fix the display first, then reset-failed.
  • If Moonlight shows the wrong apps after this, re-pair the client, since the app list is cached per pairing.
  • reset-failed is the piece most people miss: once systemd has marked the unit start-limit-hit, a plain start silently does nothing until you reset it.