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_commandpost_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 端口直接暴露在互联网上。

Sources