Skip to content

Sunshine

The Sunshine extension adds Sunshine, a self-hosted game streaming host for Moonlight, to a Frostyard desktop image. Use it to stream your desktop to a Moonlight client. Every image carries the extension’s definition, switched off. The extension itself is not in the image: Updex turns it on and downloads it.

You need:

  • A Frostyard desktop image (Snow, Snowfield, or Sundog). The extension is built on the desktop base, so it is not for Floe.
  • Root access to enable, update, and remove the extension.
  • Network access to https://repository.frostyard.org/ext/sunshine/.
  • Free space in /var for the image.

Sunshine has no published test results on Frostyard images yet. Try it on a machine you can spare first.

See what Updex found, then enable the feature and download it now:

Terminal window
updex features list --component=sunshine
sudo updex features enable sunshine --now

sunshine appears as a component, with its feature disabled. The enable command downloads the image, checks its checksum and signature, links it, and refreshes the merge.

Check the merge and the program and its helper unit:

Terminal window
systemd-sysext status
command -v sunshine
getcap /usr/bin/sunshine
systemctl status snosi-sysext-udev-reload.service

systemd-sysext status lists sunshine. command -v sunshine prints /usr/bin/sunshine. getcap shows cap_sys_admin,cap_sys_nice=p. snosi-sysext-udev-reload.service is active.

If enable --now exits with a refresh error (refresh_error in JSON), the download worked, but the activation did not. If the output says activation did not finish, the extension is merged, but users and groups can be missing: reboot. Otherwise the merge state is unknown: reboot. A sudo systemd-sysext refresh by hand does not create users and groups. Then run the checks above again.

Start Sunshine from your applications (the Sunshine launcher), or from a terminal as your own user:

Terminal window
systemctl --user start app-dev.lizardbyte.app.Sunshine.service

Nothing starts the user service for you. Frostyard adds no user preset and no boot-time drop-in for it.

Sunshine keeps the upstream defaults. Open the web UI at https://localhost:47990. Streaming uses TCP ports 47984, 47989, and 48010, and UDP ports 47998 to 48000.

The extension also adds the uhid kernel module entry and the udev rules in /usr/lib/udev/rules.d/60-sunshine.rules for virtual input devices. udev reads its rules before the extension merges, so snosi-sysext-udev-reload.service loads them again after the merge. It runs at boot, and no test shows that it runs on a live merge. Reboot after enable --now.

/usr/bin/sunshine carries the file capabilities cap_sys_admin and cap_sys_nice. The build fails if they differ.

Check for an update, then install it:

Terminal window
updex features check --component=sunshine
sudo updex features update --component=sunshine

Updex downloads and verifies the new image, switches the link, deletes older versions, and refreshes the merge. See Manage system extensions for --no-vacuum, --dry-run, and the update timer. The refresh swaps /usr under the running system. Stop any stream first.

Roll back with sudo updex features rollback sunshine. It takes effect at the next boot. See Roll back.

Remove Sunshine:

Terminal window
sudo updex features disable sunshine --now --force

Updex unmerges all extensions on the host, deletes the image, and merges the rest again. The program, its launcher, and its udev rules go. Reboot when the command finishes. Without --force, Updex refuses while the image is merged.

Item What you get
Package sunshine, the upstream Debian Trixie package, installed into the image with dpkg. The build checks the download against a pinned checksum
Support packages debianutils, libcap2, libcurl4t64, libdrm2, libevdev2, libgbm1, libglib2.0-0t64, libicu76, libminiupnpc18, libnuma1, libopus0, libpipewire-0.3-0t64, libpulse0, libqt6core6t64, libqt6gui6, libqt6svg6, libqt6widgets6, libssl3t64, libva2, libva-drm2, libvulkan1, libwayland-client0, libx11-6, libxtst6, miniupnpc, qt6-qpa-plugins, qt6-wayland
Program /usr/bin/sunshine, with cap_sys_admin,cap_sys_nice capabilities
Launcher and files dev.lizardbyte.app.Sunshine.desktop, its icon, /usr/share/sunshine/apps.json, and /usr/share/sunshine/web/
Input setup /usr/lib/modules-load.d/60-sunshine.conf and /usr/lib/udev/rules.d/60-sunshine.rules
Version The image file name carries the sunshine package version, plus a +rN snosi revision when one is set
Image file sunshine_<version>_<os>_<arch>.raw.zst; .raw.xz, .raw.gz, and .raw also work
Download From https://repository.frostyard.org/ext/sunshine/, signature required (Verify=true), into /var/lib/extensions.d/
Services User unit app-dev.lizardbyte.app.Sunshine.service, started by hand. System unit snosi-sysext-udev-reload.service, on at boot

The image is built on the desktop base. Each build checks the program, the user unit, the launcher, the icon, the web files, the udev and modules-load files, and the reload unit. A build that is missing one fails.

Reviewed 2026-10-27; Updex facts reviewed 2026-10-30. snosi commit b2858ca0222814c395cf8248db98f3e096d57dc9; Updex v2.1.3 commit 2661e987faac986f2594d1d9bbbadf1bf3053f5b.