3 步把游戏 PC 变成 Moonlight 串流主机:Sunshine 完整上手指南
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
想在客厅电视、平板甚至手机上玩 PC 游戏?游戏主机连得上,PC 游戏却玩不了?Sunshine 就是为此而生:一个跑在游戏 PC 上的自托管游戏串流主机,负责抓取画面、压缩并推送出去;接收端的 Moonlight 客户端(装在电视、平板、手机上)负责显示画面、回传输入。开源免费、无订阅,硬件门槛只要求主机 PC 能跑游戏。
一句话定位:Sunshine = 跑在 PC 上的自托管游戏串流主机 + 浏览器管理面板。
要点速览:
- 主机平台:Windows、Linux、macOS(实验性)、FreeBSD
- 客户端:任意设备上的 Moonlight 客户端
- 编码:NVIDIA / AMD / Intel / Apple 硬件编码,CPU 软编兜底
- 管理面板:内置 Web UI,默认端口47990
- 成本:开源免费,无订阅费
快速上手:从安装到第一次串流只要 3 步
从零到看到第一帧串流画面,10 分钟以内。
第 1 步:安装 Sunshine。按平台任选一条通道:
winget install LizardByte.Sunshine flatpak install --system flathub dev.lizardbyte.app.Sunshine brew install sunshineFlatpak 装完还要再跑一次flatpak run --command=additional-install.sh dev.lizardbyte.app.Sunshine,否则虚拟输入权限不生效。验证信号:终端执行sunshine --help能打出版本信息。
第 2 步:启动并打开管理面板。Linux 上直接开用户级服务:
systemctl --user --now enable app-dev.lizardbyte.app.Sunshine没装成服务就直接在终端敲sunshine。启动后浏览器打开默认地址https://localhost:47990。浏览器提示"不安全"只是自签名证书,忽略即可。
⚠️ 首次启动会让你创建用户名和密码——当场抄下来,忘了只能靠命令行重置凭据。
第 3 步:配对 Moonlight 客户端。在 Moonlight 里添加这台主机,客户端会显示一个 PIN;把它填进 Sunshine 顶部导航的 "PIN" 页面,给设备起个名字,配对即完成。随后选 "Desktop" 启动——电视或平板上出现主机桌面的那一刻,就代表全部配好了。
核心能力:先看懂一条数据流,再谈它能干什么
先看主线流程,能力点就串起来了。Sunshine 先用捕获后端(Linux 上是 KMS、X11、Wayland portal,Windows 上是 WGC)把画面抓下来,再交给硬件编码器(在 GPU 上压缩画面,几乎不占 CPU)实时压成视频流发到网络上;Moonlight 客户端解码播放。输入则反向走——你在客户端侧的键鼠、手柄,会在主机上被虚拟成真实设备,游戏里"看到"的就是插在本机上的那个控制器。
配置全在浏览器里,不碰配置文件
能干什么:选编码器、分辨率、码率、音频设备,管理应用列表、查日志,全在浏览器完成。 怎么用:登录 Web UI 后,侧边栏按 AudioVideo / Applications / Advanced / Network 分标签;顶部有搜索框,直接输参数名就能跳转,不用一页页翻。 坑在哪:界面语言在 General 标签里改locale,改完刷新页面才生效。
给每个游戏一个一键启动入口
能干什么:每个游戏/应用建一个条目,在 Moonlight 里点它就直接启动并开串流。 怎么用:Applications 标签点 "Add New",填名称、可执行文件路径、工作目录,还可以加prep-cmd(启动前执行的命令)。默认条目定义在 src_assets/linux/assets/apps.json(桌面、Steam 大屏两个)。
坑在哪:三条固定规则——点新应用会先结束当前正在串流的那个;任何前置命令执行失败就放弃启动;被拉起的应用退出,串流也随之结束。
怎么挑编码器
能干什么:用 GPU 压画面,把延迟和 CPU 占用都压下来。 怎么用:AudioVideo 标签里选与你显卡匹配的 API,Sunshine 会自动探测,默认选择一般就是对的。支持矩阵(摘自 README):
| 编码 API | 适用显卡 | Linux | Windows | macOS |
|---|---|---|---|---|
| NVENC | NVIDIA | 支持 | 支持 | — |
| QuickSync | Intel | — | 支持 | — |
| AMF | AMD | — | 支持 | — |
| Vulkan Video | AMD / Intel | 支持(部分) | — | — |
| VAAPI | AMD / Intel | 支持 | — | — |
| VideoToolbox | Apple | — | — | 支持 |
| 软编(CPU) | 任意 | 支持 | 支持 | 支持 |
坑在哪:没有独显时,1080p 软编会让 CPU 占用明显上升,能硬编就别硬扛;Linux 上 NvFBC 捕获只能搭配 NVENC,捕获方式和编码器要成对挑,README 里有"捕获→编码兼容性"对照表。
客户端的手柄"变"成主机的手柄
能干什么:手柄插在客户端设备上,主机自动虚拟出同款控制器传给游戏。 怎么用:插上手柄 → 配对 → 启动游戏即可。Linux 依赖 uinput;Windows 需另装虚拟 HID 驱动,装完建议重启。 坑在哪:macOS 主机暂不支持手柄;驱动激活状态在 Web UI 的 Troubleshooting 页和系统托盘里都能查。
实战用法:两个最值得试的典型玩法
玩法一:把整台 PC 当远程桌面
- 目标:在平板或手机上操作整台 PC,远程办公或当第二台显示器
- 准备:无,"Desktop" 条目默认自带
- 操作:Moonlight 里选 "Desktop" 启动串流,它不拉起任何程序,直接串桌面
- 验证结果:客户端看到主机桌面;按
Ctrl+Alt+Shift+N隐藏鼠标指针,F1/F12 变体快捷键可以切换串流显示器
玩法二:用客户端手柄打游戏
- 目标:DualSense 插在手机上,游戏里直接用真手柄玩
- 准备:Linux 把用户加入
input组后重新登录;Windows 装好虚拟 HID 驱动并重启 - 操作:插入手柄,配对,启动目标游戏
- 验证结果:主机生成了对应的虚拟手柄(Troubleshooting 页可查),游戏识别为该型号控制器,按键、震动都正常
常见问题:5 个高频问答
你踩到的坑,大概率在这五个问题里。
Q:后台密码忘了,怎么进去?凭据只存在本机。先停掉 Sunshine,然后执行:
sunshine --creds 新用户名 新密码再用新凭据登录。
Q:浏览器打开 47990 端口没反应?多半是服务没跑起来或防火墙拦了。先看服务状态:
systemctl --user status app-dev.lizardbyte.app.Sunshine没启动就把它拉起来;在跑着就放行防火墙的 47990 端口。
Q:画面频繁卡顿、丢包,是不是编码器选错了?八成不是编码器,是网络:Sunshine 的发送节奏是每 16ms 突出一帧数据(对应 60fps),路径上任何一段比主机慢,缓冲就会被冲爆。先用 iPerf3 测稳定性(主机iperf3 -s,客户端iperf3 -c {主机IP} -t 60 -u -R -b 50M),丢包低于 5%、抖动低于 1ms 才算合格;确属速率差导致的话,把主机网卡降速,或升级到 0.23.1 之后的版本(突发发送逻辑已优化)。
Q:Linux 上连上之后键鼠没反应?运行 Sunshine 的用户没有 uinput 权限:
sudo usermod -aG input $USER重新登录生效。
Q:串出来的画面发白、过曝?主机开了 HDR 而客户端没开,流就按 SDR 解码了。在 Moonlight 设置里打开 HDR 选项,同时确认主机侧 HDR 真的处于激活状态(必要时接一块 HDR 显示器或 EDID 模拟器);Linux 上还要求 KMS 捕获后端,NvFBC / X11 捕获不支持 HDR。
拿不准就看 Troubleshooting 页,每条 warning/error 都能展开看细节:
进阶入口:想深入时看这里
- docs/getting_started.md:官方安装指南,覆盖各平台渠道、快捷键、SSH 远程拉起,装完先读它
- docs/configuration.md:全部配置项(
port、locale、编码器、音频设备……)逐项说明,Web UI 不够用时查参数 - docs/troubleshooting.md:排障手册,丢包、MTU 等网络问题和 Linux 捕获专项坑都在这
- src/platform/:各平台捕获与编码实现源码(KMS、VAAPI、WGC 等),理解内部行为的主入口
- tests/:单元测试与集成测试,观察内部行为、验证改动的好窗口
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考