Moonshine: Linux 无头游戏流媒体服务器
Moonshine: Linux 无头游戏流媒体服务器
Moonshine 可在 Linux 上实现无头、隔离的游戏流媒体
Moonshine 是一个用 Rust 编写的无头流媒体服务器,允许用户将游戏从 Linux PC 流式传输到任何运行 Moonlight 客户端的设备。与镜像物理显示器的传统流媒体解决方案不同,Moonshine 为每个流媒体会话创建自己的隔离合成器(compositor),这意味着在远程流式传输游戏时,主机 PC 仍可完全用于其他任务。
关键技术特性
Moonshine 通过专注于精简、仅限 Linux 的实现,使其区别于其他流媒体主机,从而消除了对物理显示器或 HDMI dummy plugs 的需求。
隔离的流媒体会话
每个流媒体都在其自身的合成器中运行,与主机的桌面环境完全分离。这种架构允许实现类似多席位(multi-seat)的功能,即主机可以在一个人使用时,另一个人从同一硬件流式传输游戏。
无头运行与虚拟显示器
由于 Moonshine 控制着自己的合成器,它可以生成任何分辨率或刷新率的虚拟显示器,而无需物理显示器或 dummy plug。这也实现了开箱即用的 HDR 支持(10-bit),即使主机连接的物理显示器不支持 HDR。
硬件编码与性能
Moonshine 利用 Vulkan 视频编码来实现低延迟性能。它支持:
- 编解码器: H.264, H.265, 和 AV1(AV1 目前处于实验阶段,在 NVIDIA GPU 上直到驱动版本 595.44.3.0 之前可能会有问题)。
- 音频: 支持立体声和环绕声(5.1/7.1)的低延迟 Opus 编码。
- 输入: 全面支持鼠标、键盘和手柄,包括触觉反馈、触摸板和动作控制。
系统要求与安装
Moonshine 专为现代 Linux 环境设计,并具有支持 Vulkan 编码的特定硬件要求。
要求
- OS: Linux(已在 Arch Linux 上测试)。
- Init System: systemd(用于进程管理)。
- GPU: 支持 Vulkan 视频编码的 GPU(NVIDIA RTX, AMD RDNA2+, 或 Intel Arc)。
- Client: Moonlight v6.0.0 或更高版本。
在 Arch Linux 上安装
用户可以通过 AUR 安装 Moonshine:
yay -S moonshine
为了确保服务器可以在没有活跃用户登录的情况下启动应用程序,用户应当启用 lingering:
sudo loginctl enable-linger $USER
sudo systemctl enable --now moonshine@$USER
配置与应用程序管理
Moonshine 使用 config.toml 文件进行设置。它包含自动扫描器以减少手动配置。
添加应用程序
应用程序在配置文件中通过 command 定义。Moonshine 还支持 pre_command 和 post_command 数组,允许用户在会话前后编写脚本来更改环境(例如,停止冲突的服务或更改 GPU 功耗状态)。
应用程序扫描器
为了简化设置,Moonshine 提供了内置扫描器:
- Steam Scanner: 自动检测已安装的 Steam 游戏并以 Big Picture 模式启动它们。
- Desktop Scanner: 通过标准系统和用户目录中的
.desktop文件查找应用程序。
与 Sunshine 和其他工具的比较
虽然 Sunshine 是开源 GameStream 主机的行业标准,但 Moonshine 为无头服务器提供了特定的架构优势。
Moonshine vs. Sunshine
Sunshine 是一个具有更广泛功能集的跨平台工具。然而,Sunshine 通常镜像现有的桌面会话。Moonshine 使用隔离的合成器,意味着它不依赖于运行中的桌面环境,使其成为无头 Linux 服务器的更佳选择。
生态系统背景
社区讨论突出了流媒体工具的复杂格局,包括 Apollo 和 Artemis 等分支,以及 Games on Whales 等项目。正如 Moonshine 的创建者在讨论中所指出的:
"其核心与 Sunshine 相似,但有一个重要的区别:Moonshine 创建自己的合成器,而不依赖于现有的桌面环境。"
安全警告
Moonshine 不建议在公共网络上使用。GameStream 协议不提供完整的应用层加密。通过互联网进行流媒体传输的用户必须使用安全隧道,例如 Tailscale, WireGuard, 或 ZeroTier,并且绝不应将 Moonshine 端口直接暴露在互联网上。