Sunshine 游戏串流应用配置终极指南:从第一次添加游戏到一键流畅串流
Sunshine 游戏串流应用配置终极指南:从第一次添加游戏到一键流畅串流
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
某个周五晚上,你装好了 Sunshine,兴致勃勃地打开电脑上的 3A 大作,却发现客户端那边怎么都拉不起游戏。你翻遍设置,一头雾水——「我明明把游戏装上去了,Sunshine 凭什么不认识它?」
其实答案很简单:Sunshine 只是一个「传话筒」,它并不自动扫描你的游戏,它需要你亲手把「怎么启动某个游戏」这件事告诉它。本文就是一份面向新手的游戏串流应用配置完整教程,从零开始,带你把游戏一个个「登记在册」,再逐步做到启动稳定、画质拉满。读完你就能独立完成应用添加、预备命令编写和常见故障自救。
一、先明白原理:应用清单就像餐厅的点菜单
第一次进入 Sunshine 的 Web 管理界面(默认地址https://localhost:47990),你会看到首页要你先设置用户名和密码,登录后左侧就有「Applications」入口。点进去,你会看到 Sunshine 自带的几个默认应用(比如 Desktop、Steam)。
Sunshine 管理游戏的逻辑,本质上就是维护一份「点菜单」。这份菜单叫apps.json,记录着每个游戏的启动方式、前置操作、图标等信息。当你在客户端发起串流请求时,Sunshine 就像服务员一样,照着菜单去执行对应的启动命令。
整个流程可以简化成一条链路:
Web 管理界面 ↓ 增删改 apps.json 应用清单 ↓ 读取 命令执行引擎(主命令 + 预备命令) ↓ 启动 游戏进程(附带环境变量注入)理解了这条链路,后面所有配置你都看得懂:你做的所有操作,本质都是在往apps.json里「写菜单」。平时用 Web UI 点点点即可,配置文件会自动同步更新。
二、认识五个必懂的配置项
在动手之前,先花两分钟认识apps.json里的核心字段。别被英文名吓到,其实每个都很好理解:
| 配置项 | 一句话解释 | 新手易踩的坑 |
|---|---|---|
name | 应用在客户端显示的名字 | 别用中文特殊符号,个别客户端可能显示异常 |
cmd | 主启动命令,支持字符串或数组 | 填错路径最常导致「点了没反应」 |
detached | 分离式启动命令,适合 URI 唤醒 | 与cmd二选一,别同时填两个 |
prep-cmd | 启动前/结束后执行的操作(do/undo 成对) | 忘了配 undo,游戏退出后分辨率回不来 |
working-dir | 工作目录,决定命令从哪个路径执行 | 相对路径经常翻车,务必写绝对路径 |
image-path | 应用的封面/图标路径 | 用网络图片地址会失效,建议本地 PNG |
除此之外,还有auto-detach(启动后自动分离,不等游戏退出)、elevated(是否以管理员权限运行)、wait-all、exit-timeout等进阶开关,后面会逐步提到。
💡 类比:
cmd是「正餐」,detached是「外卖」——你点外卖(URI)时,店里(游戏平台)自己负责把餐送到,你不需要等它出锅。
三、第一程 · 让游戏先「能跑」:Windows 添加实战
3.1 Steam 游戏:一条 URI 搞定
Steam 游戏是最好配的,因为 Steam 提供了统一的唤醒协议。以《艾尔登法环》为例(AppID 为 1245620),你只需要在应用编辑页新建一条记录:
{ "name": "Elden Ring", "detached": ["steam://rungameid/1245620"], "auto-detach": true, "image-path": "elden-ring.png" }关键点在于auto-detach:置为true后,Sunshine 发出唤醒指令就不再多管,Steam 自己会拉起游戏进程。这样即使游戏要跑几十秒才出画面,串流会话也不会因为「主命令返回了」而提前中断。
3.2 本地 exe 游戏:直接指向启动文件
对于不依赖任何平台的本地游戏,用cmd指定可执行文件即可:
{ "name": "本地游戏示例", "cmd": "GameLauncher.exe -windowed", "working-dir": "D:\\Games\\MyGame", "elevated": false }这里有两个细节值得注意:一是working-dir要写绝对路径,否则游戏可能找不到自己的存档目录;二是如果游戏需要管理员权限,记得把elevated设为true,否则可能出现「闪一下黑框就没了」。
3.3 Epic 平台游戏:走商店的唤醒协议
Epic 商店的游戏可以借助其 Launcher 的 URL Scheme:
{ "name": "Epic 商店游戏示例", "cmd": "com.epicgames.launcher://apps/ExampleGame?action=launch", "working-dir": "E:\\EpicGames\\ExampleGame" }把示例中的ExampleGame换成游戏在 Epic 目录中的标识即可。这类「平台托管」的游戏,思路和 Steam URI 完全一致——把启动权交给平台自己。
四、第二程 · 跨平台补课:Linux 下的不同玩法
Windows 上的套路在 Linux 上要「入乡随俗」。最典型的差异是:很多用户用 Flatpak 安装 Steam,此时 Sunshine 和 Steam 不在同一个沙箱里,直接调用steam://前缀会无效。
正确姿势是用flatpak-spawn从宿主环境发起唤醒,配合setsid让命令脱离会话独立运行:
{ "name": "Steam 大屏幕模式(Flatpak)", "detached": ["flatpak-spawn --host setsid steam steam://open/bigpicture"], "prep-cmd": [ { "do": "flatpak-spawn --host setsid steam steam://open/bigpicture", "undo": "flatpak-spawn --host setsid steam steam://close/bigpicture" } ] }💡 小结:无论 Windows 还是 Linux,核心思路只有一条——「能用平台协议唤醒的,就别手写 exe;需要手写的,就确保路径、权限、工作目录三件套齐全。」
另外提醒一句:Linux 下如果 Sunshine 是通过 systemd 服务运行的,它没有桌面环境上下文,很多图形程序需要额外处理;这也是为什么上面要借助flatpak-spawn --host这类「借壳」手段。跨平台配置差异并不复杂,只要记住「平台协议优先、路径写绝对、沙箱要穿透」就够了。
五、第三程 · 让游戏「跑得稳」:预备命令 do 与 undo
光能启动还不够,很多游戏在串流时还需要「提前铺路」。比如:进游戏前把分辨率切到客户端匹配的分辨率,退出后还原回桌面分辨率;或者启动前关掉可能会弹窗的软件。这些活儿,交给预备命令(prep-cmd)干。
预备命令就像演出前的彩排:do是开演前布置舞台,undo是散场后收拾道具。Sunshine 在串流会话建立前执行所有do,在会话结束时执行所有undo,保证「好借好还」。
5.1 Windows:动态切换分辨率
以常见的分辨率切换工具为例,写进prep-cmd:
"prep-cmd": [ { "do": "cmd /C \"nircmd setdisplay %SUNSHINE_CLIENT_WIDTH% %SUNSHINE_CLIENT_HEIGHT% %SUNSHINE_CLIENT_FPS%\"", "undo": "cmd /C \"nircmd setdisplay 2560 1440 120\"" } ]do里的%SUNSHINE_CLIENT_WIDTH%等变量,会在执行时被替换成客户端实际请求的分辨率;undo则固定还原回你的桌面分辨率。
5.2 Linux:用 xrandr 完成同样的任务
Linux 下思路一致,工具换成xrandr:
"prep-cmd": [ { "do": "sh -c \"xrandr --output DP-1 --mode ${SUNSHINE_CLIENT_WIDTH}x${SUNSHINE_CLIENT_HEIGHT} --rate ${SUNSHINE_CLIENT_FPS}\"", "undo": "xrandr --output DP-1 --mode 2560x1440 --rate 120" } ]注意两点:显示器名称(如DP-1)要先用xrandr查清楚;写do命令时套一层sh -c是因为变量展开需要 shell 参与。至于那些「必须等前置条件完成才启动游戏」的场景,可以在预备命令里依次写下多个步骤,Sunshine 会按顺序执行。
六、环境变量速查表:给游戏程序递小纸条
看到这里你可能好奇:%SUNSHINE_CLIENT_WIDTH%这些变量是哪来的?这是 Sunshine 在启动应用时自动注入的环境变量——相当于 Sunshine 悄悄给游戏程序塞了张「小纸条」,告诉它客户端想要什么。
| 变量名 | 它代表什么 | 典型用途 |
|---|---|---|
SUNSHINE_CLIENT_WIDTH | 客户端请求的画面宽度 | 动态切换分辨率 |
SUNSHINE_CLIENT_HEIGHT | 客户端请求的画面高度 | 动态切换分辨率 |
SUNSHINE_CLIENT_FPS | 客户端请求的帧率 | 同步刷新率 |
SUNSHINE_CLIENT_HDR | 客户端是否支持 HDR | 条件式开启 HDR 模式 |
SUNSHINE_APP_NAME | 当前正在启动的应用名 | 日志区分、脚本分支判断 |
SUNSHINE_APP_ID | 当前应用的唯一标识 | 脚本/工具联动 |
💡 用法提示:Windows 下在命令里用
%变量名%引用,Linux 下用$变量名或${变量名}引用,别混用。你也可以在自己的批处理/脚本里读取这些变量,实现更复杂的自动化。
七、第四程 · 让游戏「跑得爽」:完整方案组合拳
把前面所有招式组合起来,就是一个「跑得爽」的完整配置。以一台 4K 显示器的 Windows 主机为例,最终的应用配置长这样:
{ "name": "Elden Ring", "detached": ["steam://rungameid/1245620"], "auto-detach": true, "image-path": "elden-ring.png", "prep-cmd": [ { "do": "cmd /C \"nircmd setdisplay %SUNSHINE_CLIENT_WIDTH% %SUNSHINE_CLIENT_HEIGHT% %SUNSHINE_CLIENT_FPS%\"", "undo": "cmd /C \"nircmd setdisplay 3840 2160 120\"" } ] }整套流程是这样的:客户端发起串流 → Sunshine 先执行do(把显示器切成客户端分辨率)→ 通过 Steam URI 唤醒游戏 → 游戏以原生分辨率运行 → 会话结束执行undo(恢复桌面分辨率)。一个闭环,干净利落。
如果游戏本身吃不满帧,还可以配合 Sunshine 的编码侧设置(码率、编码器、帧率上限)做整体调优——应用配置负责「启动正确」,编码设置负责「画面流畅」,两者互补。
八、翻车自救手册:三个高频故障排查
配置写好了,实际跑起来难免翻车。下面三个问题是出现频率最高的,按「症状 → 排查思路 → 解决方案」给你列好:
8.1 游戏启动后会话立即结束
- 症状:客户端点开游戏,画面一闪,串流直接断开。
- 排查思路:八成是主命令进程「先退场」了,Sunshine 误以为游戏结束。
- 解决方案:改用
detached分离式启动;或设置"auto-detach": true;同时检查游戏是否真的启动成功(去主机上看一眼进程)。
8.2 输入设备没反应
- 症状:画面正常,但鼠标键盘手柄全部失灵。
- 排查思路:输入通道权限问题。
- 解决方案:Linux 下把运行 Sunshine 的用户加入
input组(sudo usermod -a -G input 你的用户名)并重新登录;Windows 下检查虚拟手柄驱动(ViGEm)是否安装成功。
8.3 分辨率对不上
- 症状:客户端画面拉伸、模糊,或者游戏内分辨率不是客户端请求的。
- 排查思路:预备命令没生效,或显示模式不支持该分辨率。
- 解决方案:确认
prep-cmd的do确实执行成功(看日志);确认目标分辨率是显示器原生支持的;确认变量名在对应系统下写法正确。
💡 记住这条铁律:所有翻车,先看日志。Sunshine 的日志页面会记录预备命令执行、应用启动的每一步,错误原因通常就藏在最后几行里。
九、让配置更省心:最佳实践与性能优化清单
跑顺之后,再教你几招「偷懒但专业」的优化姿势:
- 平台协议优先:Steam、Epic 能走 URI 就走 URI,别自己去拼启动参数,最稳。
- 预备命令保持轻量:少放与串流无关的脚本,避免拖慢启动;能用一条命令解决的就别写三行。
- 合理配置超时:给应用加上
"exit-timeout": 3,避免退出流程卡死;如果某应用不需要等前置命令,"wait-all": false能明显加快启动。 - 善用全局预备命令:所有应用都要执行的步骤(比如统一关闭通知弹窗)可以放在全局设置里,再用
"exclude-global-prep-cmd": true给个别应用开「免跑」特权。 - 图标用本地 PNG:别用远程图片地址,断网或失效都会让封面变空白。
- 定期备份:
apps.json是你所有配置的心血,改出问题随时能回滚。 - 改完必测:每新增一个应用,都走一遍完整的「启动 → 操作 → 退出」流程,确认 do/undo 都干净。
{ "wait-all": false, "exit-timeout": 3, "exclude-global-prep-cmd": true }上面的代码片段就是一次典型的「启动加速」配置:不等所有前置完成、退出超时设为 3 秒、跳过全局预备命令——适合追求极速启动的场景。
十、现在,打开你的第一份应用清单
回顾一下整条进阶路线:先理解apps.json的「点菜单」本质,接着用 URI 或 exe 让游戏「能跑」,再借助预备命令和撤销命令让流程「跑得稳」,最后通过环境变量和动态分辨率让体验「跑得爽」,翻车了也有日志和自查清单兜底。
现在轮到你了:打开 Sunshine 的 Web 管理界面,新建你的第一个应用——挑你常玩的 Steam 游戏,用一条steam://rungameid/前缀的detached命令完成添加,然后从手机或另一台电脑发起串流,体验第一次「一键进游戏」的快乐。
如果配置过程中遇到问题,回到本文的「翻车自救手册」对照排查,Sunshine 的日志永远是你最可靠的队友。祝串流愉快,游戏快乐!🎮
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
