Moonshine:让你从PC向任意运行Moonlight的设备串流游戏
摘要
Moonshine是一款开源工具,允许你从Linux PC向任意运行Moonlight的设备串流游戏,支持隔离会话、无需显示器、硬件编码及完整输入支持。
查看缓存全文
缓存时间: 2026/07/20 09:45
hgaiser/moonshine 来源:https://github.com/hgaiser/moonshine CI(持续集成): https://github.com/hgaiser/moonshine/actions
Moonshine 🌙
Moonshine 让你能将 PC 上的游戏串流到任意运行 Moonlight(https://moonlight-stream.org/) 的设备上。你的键盘、鼠标和手柄输入会被传回主机,让你可以远程玩游戏,仿佛就坐在主机前一样。
特性
- 隔离的串流会话:每个串流都在独立的合成器中运行,与你的桌面环境完全隔离。你仍然可以在串流的同时使用主机 PC 做其他事情。
- 无需显示器:可在无头服务器上运行——不需要 HDMI 诱骗器。
- 硬件视频编码:支持使用 GPU 进行 H.264、H.265 和 AV1 编码。
⚠️ AV1 警告:AV1 编码尚处于实验阶段,并且在 NVIDIA GPU 上存在帧大小随时间增长的问题(见 issue(https://github.com/nvpro-samples/vk_video_samples/issues/217))。该问题预计在驱动版本 595.44.3.0 中得到修复。在此之前,请坚持使用 H.264 或 H.265。
- HDR 支持:为受支持的游戏提供真正的 10 位 HDR 串流。
- 完整输入支持:鼠标、键盘和手柄(包括体感、触摸板及触觉反馈)。
- 音频串流:立体声及环绕声(5.1/7.1),搭配低延迟 Opus 编码。
系统要求
- 仅限 Linux。已在 Arch Linux 上测试,但据报道也可在其他 Linux 发行版上运行。
- systemd。用于启动和管理应用程序进程。几乎所有现代 Linux 发行版都默认包含它。
- 支持 Vulkan 视频编码的 GPU。NVIDIA RTX、AMD RDNA2+ 或 Intel Arc。
- Moonlight v6.0.0 或更高版本。不保证与旧版本或非官方移植版的兼容性。
安装
Arch
最简单的方法是通过 AUR 安装:
yay -S moonshine
为用户运行 Moonshine:
- 启用用户常驻(lingering):
sh sudo loginctl enable-linger $USER
这样即使未登录,Moonshine 也能在用户会话中运行应用程序。如果你的用户始终在你想要串流时保持登录,则可以跳过此步骤。
- 启用开机自启并立即运行:
sh sudo systemctl enable --now moonshine@$USER
源码编译
编译所需的依赖:
sh sudo pacman -S \ clang \ cmake \ gcc-libs \ glibc \ libc++ \ libevdev \ libpulse \ libxkbcommon \ make \ mesa \ opus \ pkg-config \ rust \ shaderc \ vulkan-headers \ wayland
然后编译并运行:
sh cargo run --release -- /path/to/config.toml
配置
如果你提供的路径不存在,将自动创建配置文件。使用 AUR 包时,默认位于 $XDG_CONFIG_HOME/moonshine/config.toml。
与客户端配对
首次使用 Moonlight 连接时,会显示一个 PIN。主机上会出现一个通知,点击即可打开配对页面,也可以手动访问 http://localhost:47989/pin 。你也可以通过命令行配对:
sh curl -X POST "http://localhost:47989/submit-pin" -d "uniqueid=0123456789ABCDEF&pin="
添加应用程序
每个应用程序都在其独立的隔离串流会话中运行。在 config.toml 中如下添加:
toml [[application]] title = "Steam" boxart = "/path/to/steam.png" # 可选 command = ["/usr/bin/steam", "steam://open/bigpicture"]
title:在 Moonlight 中显示的名称。boxart(可选):封面图片路径。command:要运行的命令。第一项为可执行文件,其余为参数。pre_command(可选):启动应用程序前运行的命令。每条命令依次执行。同步执行——会话会等待所有命令完成。post_command(可选):串流会话结束后运行的命令。每条命令依次执行。同步执行——服务器会等待所有命令完成。
示例:
toml [[application]] title = "Steam" command = ["/usr/bin/steam", "steam://open/bigpicture"] pre_command = [ ["/usr/bin/systemctl", "stop", "conflicting.service"], ["/usr/bin/nvidia-smi", "pstate", "50"], ] post_command = [ ["/usr/bin/nvidia-smi", "pstate", "performance"], ]
应用扫描器
扫描器可自动检测已安装的应用程序,无需手动添加。
Steam 扫描器——查找所有已安装的 Steam 游戏:
toml [[application_scanner]] type = "steam" library = "$HOME/.local/share/Steam" command = ["/usr/bin/steam", "-bigpicture", "steam://rungameid/{game_id}"]
桌面扫描器——从 .desktop 文件查找应用程序:
toml [[application_scanner]] type = "desktop" directories = [ "$HOME/.local/share/applications", "/usr/share/applications", ] include_terminal = false resolve_icons = true
常见问题
- 与 Sunshine(https://github.com/LizardByte/Sunshine)相比如何?
- Sunshine 支持更多平台,整体功能也更丰富。Moonshine 仅限 Linux。
- Moonshine 将每个串流会话运行在独立的隔离环境中,与桌面分离。这意味着在串流时,你的主机 PC 仍然可用,并且无需活跃的桌面会话也能工作。
安全
Moonshine 不设计用于公共网络。底层的 GameStream 协议存在限制,导致流量在应用层并非完全加密。如果你需要通过网络串流,请使用 VPN,例如 Tailscale(https://tailscale.com/)、WireGuard(https://www.wireguard.com/)或 ZeroTier(https://www.zerotier.com/)。请勿直接将 Moonshine 端口暴露到互联网。
致谢
如果没有以下项目背后人员的出色工作,这一切是不可能的:
- Moonlight(https://moonlight-stream.org/),没有它就不会有 Moonshine 的客户端。
- Sunshine(https://github.com/LizardByte/Sunshine),它为 API 的主机部分奠定了大量基础。
- Inputtino(https://github.com/games-on-whales/inputtino),提供了输入设备的全面实现。
- magic-mirror(https://github.com/colinmarc/magic-mirror),在使用 Vulkan 和 Wayland 合成器进行无头串流方面提供了灵感。
相似文章
Steam Machine
一款小巧而强大的PC,专为大屏游戏设计。
Acer 推出用于流式传输 PC 游戏的 Linux 掌机
Acer 发布了 Nitro Blaze Link,一款基于 Linux 的手持设备,专为流式传输 PC 游戏而设计,配备 7 英寸显示屏、Wi-Fi 6、1GB RAM 和 8GB 存储,将于 2026 年第四季度上市。
Lumox
Lumox 是一款允许用户将iOS设备屏幕镜像到Mac电脑的工具。
DualStream
DualStream 是一款轻松实现桌面和移动设备同步直播的工具。
Steam Machine
Steam Machine 是 Valve 的一款游戏硬件产品,允许用户在电视上玩 Steam 游戏。