当前位置: 首页 > news >正文

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-allexit-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-cmddo确实执行成功(看日志);确认目标分辨率是显示器原生支持的;确认变量名在对应系统下写法正确。

💡 记住这条铁律:所有翻车,先看日志。Sunshine 的日志页面会记录预备命令执行、应用启动的每一步,错误原因通常就藏在最后几行里。

九、让配置更省心:最佳实践与性能优化清单

跑顺之后,再教你几招「偷懒但专业」的优化姿势:

  1. 平台协议优先:Steam、Epic 能走 URI 就走 URI,别自己去拼启动参数,最稳。
  2. 预备命令保持轻量:少放与串流无关的脚本,避免拖慢启动;能用一条命令解决的就别写三行。
  3. 合理配置超时:给应用加上"exit-timeout": 3,避免退出流程卡死;如果某应用不需要等前置命令,"wait-all": false能明显加快启动。
  4. 善用全局预备命令:所有应用都要执行的步骤(比如统一关闭通知弹窗)可以放在全局设置里,再用"exclude-global-prep-cmd": true给个别应用开「免跑」特权。
  5. 图标用本地 PNG:别用远程图片地址,断网或失效都会让封面变空白。
  6. 定期备份apps.json是你所有配置的心血,改出问题随时能回滚。
  7. 改完必测:每新增一个应用,都走一遍完整的「启动 → 操作 → 退出」流程,确认 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),仅供参考

http://www.cnnetsun.cn/news/4083181.html

相关文章:

  • 迁移学习实战思路:如何用预训练模型完成文本分类
  • 67.QT-QSharedMemory
  • 加密音乐打不开?3个问题带你彻底搞懂
  • Java设计模式---代理模式
  • 第 4 篇:「当数据库坏了」— 优雅降级与七层防守
  • 《C++深度解构02》类和对象(上)——定义规范、内存对齐与 this 指针全解
  • AI智能体开发指南:企业如何构建智能体系统
  • nxdumptool 终极指南:3 步完成 Switch 卡带与数字游戏的完整备份
  • protal:基于比对的超快速宏基因组物种与菌株分辨分析谱工具
  • League Akari 完整上手指南:本地化英雄联盟辅助工具从安装到精通
  • 装完DistroAV却找不到NDI Source?NDI Runtime缺失的4类场景与彻底排查方案
  • SumatraPDF 颜色反转:5 个让你少走弯路的实用技巧
  • DDrawCompat 使用避坑指南:老游戏打不开,先别急着卸载
  • 三步搞定 DDrawCompat:让 Windows 11 重新跑起二十年前老游戏的完整指南
  • 从 GPT-5.5 迁到 Luna,我的 Agent 工作流哪里断了
  • Git Worktree 实战指南:多分支并行开发与高效工作流设计
  • 2026黄冈危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总
  • 突破LLM上下文限制:构建智能体原生记忆系统的分层架构与工程实践
  • arm 解决git 下载代码
  • TNGA架构与双叉臂悬架:深度解析C-HR高速行驶品质的机械奥秘
  • 魔兽争霸3卡顿变形加载失败?这套插件一次治好老游戏的现代病
  • VBA Workbook对象操作全解析:从创建、保存到关闭的自动化实践
  • AI Agent Skill开发实战:从概念到实现,打造智能体核心能力
  • 【重庆邮电大学、重庆蚂蚁消费金融有限公司主办 | 重庆举办】第一届粒球计算国际会议(ICGBC 2026)
  • Linux写论文最头疼的文献管理,被这个WPS-Zotero插件3步搞定了
  • 从单体应用到插件化架构:可组合运行时如何重塑软件开发
  • 从谍照解读新车:广汽传祺GS8 390T动力升级与市场策略分析
  • Godot游戏开发:模块化设计与信号通信实战指南
  • 在Windows Server 2012关闭Internet Explorer增强的安全配置
  • 技术资源分发与社群运营的工程化实践:从加群到自动化体系