Files
dotfiles/hosts/mainframe/sunshine/sunshine.conf
T
connor d5cb5f5690 Moonlight: headless compositor on the 3060, Sunshine capturing it
mainframe has no desktop and the only connected output hangs off the Intel
iGPU, while the RTX 3060 that encodes drives no monitor. Capturing the real
output would copy every frame between GPUs. So: a minimal sway session on
the headless wlroots backend, pinned to card0, with one 1920x1080 virtual
output for Sunshine to capture. Verified end to end — Sunshine finds
zwlr_screencopy_manager_v1 and creates h264_nvenc and hevc_nvenc.
(av1_nvenc fails because Ampere has no AV1 encoder; that is expected.)

Two things had to be fixed to get there. The installed sunshine-git was
built against boost 1.89 against a system now on 1.92 and could not load
five libraries — which is why the service had been enabled but never once
run. Replaced with sunshine-bin, which is current and prebuilt.

And Sunshine now gets a unit of ours rather than a drop-in: the source AUR
package ships sunshine.service while -bin ships
app-dev.lizardbyte.app.Sunshine.service, so a drop-in silently stops
applying the moment you switch between them.

apps.json replaces the stock file, whose "Low Res Desktop" entry shelled
out to xrandr and would have done nothing on Wayland.
2026-09-14 15:41:55 -04:00

18 lines
574 B
Plaintext

# RTX 3060 (01:00.0). The Intel iGPU is renderD128 and owns the only physically
# connected output; this machine deliberately captures a virtual output on the
# NVIDIA card instead, so capture and NVENC happen without a cross-GPU copy.
adapter_name = /dev/dri/renderD129
# The single output created by hosts/mainframe/sway/headless.conf.
output_name = HEADLESS-1
# wlroots screencopy rather than a KMS grab. This is why the sunshine binary
# needs no cap_sys_admin here.
capture = wlr
encoder = nvenc
nvenc_preset = 1
nvenc_twopass = quarter_res
min_log_level = warning