ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Sunshine游戏串流应用配置避坑指南:手把手搭建一键启动游戏库

Sunshine游戏串流应用配置避坑指南:手把手搭建一键启动游戏库 Sunshine游戏串流应用配置避坑指南手把手搭建一键启动游戏库【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine周五晚上十点你瘫在沙发上掏出手机打开 Moonlight轻点一张印着《赛博朋克2077》封面的卡片。卧室里的台式机安静地亮屏分辨率自动切成手机的比例三秒后夜之城的光污染铺满整个掌面。全程没有键盘、没有鼠标、没有一根HDMI线。但这套点一下就能玩的体验背后有个前提有人提前教会了主机赛博朋克2077到底是什么、怎么启动、启动前要做什么准备。在 Sunshine 这个自托管的游戏串流服务器里这份教案就写在apps.json里。本指南将沿着一条倒叙的路线从最终效果反推这套应用管理机制帮你亲手搭起自己的游戏库。第一关挖出藏在地下的应用清单 apps.jsonSunshine 把所有可串流应用的定义集中在一个 JSON 文件里。它的默认位置随平台不同而不同平台默认位置Linux / FreeBSD / macOS~/.config/sunshine/Windows%ProgramFiles%\Sunshine\config\Docker/config如果你偏好在终端里改完全可以文件里每个应用就是一个 JSON 对象。以官方仓库自带的配置为例核心字段如下字段类型作用namestring显示在 Moonlight 里的应用名cmdstring主执行命令前台运行detachedarray分离式启动命令后台放行prep-cmdarray预备命令含do与undo两个阶段working-dirstring工作目录留空则默认取目标程序所在目录image-pathstring应用图标必须是 PNGauto-detachbool自动转为分离模式wait-allbool等待所有子进程退出后才结束会话exit-timeoutnumber会话结束前的等待秒数一个请求从点选到画面的完整生命周期看这张流程图最直观第二关三条启动路径选错一步就黑屏这是新手最容易栽跟头的环节。Sunshine 启动应用有两条主路径外加一套辅助机制选错的结果往往不是报错而是启动即退出。cmd前台命令适合直连可执行文件直接指定程序路径Sunshine 会监视它的生命周期。比如 Epic 商店的游戏可以走 URI 协议{ name: Fortnite, cmd: com.epicgames.launcher://apps/fortnite?actionlaunchsilenttrue, image-path: fortnite.png }detached分离命令专治启动器自杀问题为什么 Steam 游戏必须走detached因为 Steam 启动时会先拉起一个自我更新的进程原始进程随后被杀掉。如果放在cmd里Sunshine 会认为应用已退出串流立即中断。放进detached后Sunshine 放行命令、不再追踪进程生死{ name: Surviving Mars, detached: [steam://rungameid/464920], auto-detach: true, image-path: steam.png }auto-detach: true的意思是如果应用自己完成了分离动作Sunshine 就放它走。官方默认配置里的 Steam Big Picture 同样如此并额外用prep-cmd的undo阶段在退出时关闭它。prep-cmd开播前的清场与收尾prep-cmd是成对出现的do在串流开始前执行undo在结束后执行。最适合干分辨率切换这类脏活例如 Linux X11 下动态匹配客户端分辨率{ prep-cmd: [ { do: sh -c \xrandr --output HDMI-1 --mode ${SUNSHINE_CLIENT_WIDTH}x${SUNSHINE_CLIENT_HEIGHT} --rate ${SUNSHINE_CLIENT_FPS}\, undo: xrandr --output HDMI-1 --mode 3840x2160 --rate 120 } ] }三条路径怎么选一张表说清楚场景推荐路径原因普通 exe / 脚本cmd进程生命周期可控Steam / 平台启动器detachedauto-detach启动器会自我更新、杀原进程分辨率调整、环境准备prep-cmd的 do/undo天然成对退出自动还原第三关环境变量让命令看人下菜碟上一节代码里的${SUNSHINE_CLIENT_WIDTH}是 Sunshine 注入到命令进程里的环境变量由客户端请求参数实时生成。常用变量如下环境变量含义示例值SUNSHINE_CLIENT_WIDTH客户端请求宽度1920SUNSHINE_CLIENT_HEIGHT客户端请求高度1080SUNSHINE_CLIENT_FPS客户端请求帧率60SUNSHINE_CLIENT_HDR客户端 HDR 需求true / falseSUNSHINE_APP_NAME当前应用名Surviving MarsSUNSHINE_APP_ID当前应用 ID12345Windows 上配合 QRes 这类工具一样能实现动态分辨率注意 Windows 环境变量用%包裹{ prep-cmd: [ { do: cmd /C \C:\\Tools\\QRes.exe /X:%SUNSHINE_CLIENT_WIDTH% /Y:%SUNSHINE_CLIENT_HEIGHT% /R:%SUNSHINE_CLIENT_FPS%\, undo: C:\\Tools\\QRes.exe /X:3840 /Y:2160 /R:120 } ] }常见误区与避坑清单应用修改后客户端不刷新Sunshine 的应用列表只在 Moonlight 客户端重启后重新拉取改完配置记得在客户端刷新。Steam 游戏启动即退出十有八九是把启动器命令写进了cmd换成detached并开启auto-detach。Flatpak 沙箱里命令全部失效Flatpak 版 Sunshine 无法直接访问宿主机所有命令要加flatpak-spawn --host前缀。图标不显示image-path必须是 PNG 文件其他格式一律不认。分辨率切换失败xrandr --mode只认已存在的模式手机/iOS 的非标分辨率需要先用cvt生成新模式光写do命令不够。进阶技巧让游戏库更像正式产品全局预备命令在 Sunshine 主配置里设置global_prep_cmd每个应用启动前都会执行若某个应用想豁免给它加exclude-global-prep-cmd: true。免 UAC 提权以 Windows 服务方式运行时为需要管理员的游戏如带反作弊的加elevated: true进程会以当前用户身份直接提权启动不弹 UAC 窗。杜绝僵尸进程配合wait-all: true与合理的exit-timeout如 5 秒确保游戏退干净、串流会话正常收尾。给应用开日志填output字段指定日志文件路径游戏启动异常时排查效率翻倍。下一步行动打开浏览器访问https://localhost:47990完成首次登录设置后进入 Applications 页面先为 Steam 添加一个detached启动的 Big Picture 应用再用prep-cmd配一条分辨率切换命令最后在 Moonlight 客户端重启并验证。备份好你的apps.json它就是你这台串流主机的镇宅之宝。好配置的评判标准只有一个躺在沙发上时你的手不用再摸键盘。【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进