Reaching the web UI from another machine sends an Origin header naming this host rather than localhost, and Sunshine's CSRF check rejects it: Web UI: [10.0.0.8] -- CSRF protection blocked request from origin: https://10.0.0.2:47990 csrf_allowed_origins takes a comma-separated list of bare origins, NOT a JSON array — brackets and quotes are rejected entry by entry, which is how the first attempt failed. Both the IP and hostname spellings are listed because the browser sends whichever was typed. origin_web_ui_allowed=lan set explicitly alongside it, so the two settings that gate remote access to the UI are stated in one place.
28 lines
1.1 KiB
Plaintext
28 lines
1.1 KiB
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
|
|
|
|
# The web UI is reached from other machines on the LAN, so their Origin header
|
|
# names this host rather than localhost and Sunshine's CSRF check rejects it.
|
|
# Both spellings are listed because the browser sends whichever you typed.
|
|
# Comma-separated bare origins — not a JSON array; brackets and quotes are
|
|
# rejected entry by entry.
|
|
csrf_allowed_origins = https://10.0.0.2:47990,https://mainframe:47990,https://localhost:47990
|
|
|
|
# Web UI reachable from the LAN, not just this machine.
|
|
origin_web_ui_allowed = lan
|