Moonshine 推荐,Linux 主机不接显示器也能串流游戏

客厅电视上用 Moonlight 客户端玩电脑里的游戏,服务端这一侧通常装 Sunshine。Linux 用户另有一个选择,Rust 写的 Moonshine,主打无显示器运行,主机塞进机柜不接任何屏幕也能开串流,分辨率与刷新率还不受物理显示器牵制。我把它的仓库 README 和七月那场三百多赞的 Hacker News 讨论看完了,这个项目适合的人群很明确,愿意折腾的人,图省心的现在就可以关掉这篇。

主要功能

Moonshine 由开发者 hgaiser 维护,2024 年 1 月开工,BSD 协议开源,星标 1185,最新 v0.16.1 版 9 月 14 日发布,发布节奏稳定,产物覆盖 tar 包、deb 与 rpm 三种格式。定位是给 Moonlight 客户端提供服务的无头串流服务器,仅支持 Linux,需要 systemd 和一块支持 Vulkan 编码的显卡,NVIDIA RTX、AMD RDNA2 以上或 Intel Arc 都行,客户端要求 Moonlight v6.0.0 起,配对走 HTTP 47989 端口。

无显示器的实现方式是它最有意思的地方。每一路串流运行在独立创建的 Wayland 合成器里,与桌面环境完全隔离。于是不需要 HDMI 欺骗插头,分辨率和刷新率随客户端任意定,主机没有 HDR 显示器也能输出 HDR 10-bit 画面,串流进行时主机桌面照常可用。这套设计可以拆开理解,传统方案借用在用的桌面会话,分辨率被物理显示器锁死,想无头就得插个假负载骗过系统,Moonshine 给每个会话自己开一个合成器,显示模式由会话自己声明,三件麻烦事一次解决。

编码与音频的规格摆出来。视频走 H.264、H.265 与 AV1 三种硬编码,网络好就 AV1 拿画质,网络差退回 H.264 保流畅。音频用 Opus 编码,立体声之外支持 5.1 与 7.1 环绕声,家庭影院的功放能接住完整声场。Steam、Lutris、Heroic 的应用库都能自动扫描生成启动列表,自带 healthcheck 诊断命令,串流出问题时先跑一遍定位病灶。

安装渠道以 Linux 包为主,Arch 用户从 AUR 装,deb 与 rpm 包覆盖 Debian 系与红帽系,Nix flake、SteamOS 安装脚本、原子发行版的 rpm-ostree 路径都有官方说明,Steam Deck 用户可以照着脚本把掌机变成串流主机。与 Sunshine 的关系要说清楚,它并非 Sunshine 的分支,Sunshine 是 C++ 项目,覆盖平台与功能更多,Moonshine 只做 Linux 一件事,README 也大方致谢,称 Sunshine 为主机端 API 铺了大量地基。

解决了什么需求

真实使用者的反馈集中在 Linux 上 Sunshine 的老毛病。HN 用户 Philpax 说受够了 Sunshine 在 Linux 下需要独占输出、间歇性视频音频输入失败的毛病,换 Moonshine 后一切正常,没登录的工作站直接把游戏串到了电视上,玩的游戏是光与影 33 号远征队。vaughands 强调的重点是分辨率自由,Sunshine 在 Linux 上做不到任意分辨率,这件事对他很关键。jauntywundrkind 看重每路串流独立合成器带来的隔离性,设想一台游戏主机同时服务多个客户端。作者 hgaiser 本人在帖里把设计意图讲透了,独立合成器让无头、任意分辨率、无 HDR 显示器输出 HDR 这三件事顺理成章,他也直说普通新手请用 Sunshine,Moonshine 是给愿意折腾的人的。

Reddit r/linux_gaming 在 2024 年 3 月就有它的公告帖,r/MoonlightStreaming 的虚拟化串流讨论里也有人推荐这个 Rust 方案,想在虚拟机里搭游戏串流主机的人可以顺藤摸瓜。HN 那场讨论三百七十多个赞、一百五十多条评论,Linux 串流这个话题积压的诉求可见一斑。

注意事项

几个边界先摆出来。协议层面基于 NVIDIA GameStream,README 明确提示应用层流量并未完全加密,跨不信任网络串流要自己加保护。配对走 HTTP 47989 端口,主机防火墙放行出站即可,客户端侧无需额外开洞。不支持同时给两个客户端串流,一台机器一路流。硬件要求 Vulkan 编码,老显卡直接出局。没有 Windows 版,想通吃的用户绕行。HN 讨论里 remix2000 指出 Sunshine 同样能无头运行,Moonshine 的差异化更多在独立合成器带来的隔离与分辨率自由,选型时别只冲着无头两个字去,多看一眼自己的显卡与系统。

总结

把一台 Linux 主机变成纯串流游戏机,Moonshine 的解法干净,每路会话一个合成器,无头、任意分辨率、HDR 全都顺理成章。适合手里有闲置 Linux 机器又愿意读文档的人,普通玩家跟着作者的建议装 Sunshine 更省心。项目 2024 年初开工,两年多走到 v0.16 系,节奏不快但每步都踩得实。

来源

  • GitHub 仓库 https://github.com/hgaiser/moonshine
  • 最新版本发布页 https://github.com/hgaiser/moonshine/releases
  • Hacker News 讨论 https://news.ycombinator.com/item?id=48972970
  • Reddit r/linux_gaming 公告帖 https://www.reddit.com/r/linux_gaming/comments/1b7jzkk/moonshine_a_game_streaming_server_for_moonlight
  • Reddit r/MoonlightStreaming 讨论 https://www.reddit.com/r/MoonlightStreaming/comments/1jo4ssa/virtualized_moonlight_server