简介
Sunshine 提供低延迟、云游戏服务器功能,支持 AMD、Intel 和 Nvidia GPU 进行硬件编码,同时也支持软件编码。
Moonlight 是开源游戏流媒体客户端。
安装 Sunshine 的设备发送画面声音,安装 Moonlight 的设备接收前者发送的画面声音。
安装 Sunshine 发送流媒体
Win/Mac 在 Releases · LizardByte/Sunshine 下载对应系统版本。
Linux 我使用的是 Flatpak,先按照 Linux Debian/Deepin flatpak 换源安装软件
操作。
# 安装 sunshine
$ sudo flatpak install dev.lizardbyte.app.Sunshine
# 额外安装和配置
$ flatpak run --command=additional-install.sh dev.lizardbyte.app.Sunshine
Sunshine User Service has been installed.
Use [systemctl --user enable sunshine] once to autostart Sunshine on login.
Configuring mouse permission.
Restart computer for mouse permission to take effect.
# 开机启动用户级 sunshine,或看下文改成系统级
$ systemctl --user enable sunshine
# 启动 sunshine
$ systemctl --user start sunshine
可选,将用户级 sunshine service 改成系统级:
# 复制 service
sudo cp ~/.config/systemd/user/sunshine.service /etc/systemd/system/sunshine.service
# 将 Wanted=xdg-desktop-autostart.target 改成 Wanted=graphical.target
sudo vim /etc/systemd/system/sunshine.service
# 关闭用户级 service
systemctl --user disable sunshine
# 重载并开机启动
sudo systemctl daemon-reload
sudo systemctl enable sunshine
sudo systemctl start sunshine
注意:本机 Deepin 首次启动时系统会卡住,按电源键后恢复。
浏览器打开提示的 https://localhost:47990,自定义用户名密码登录。
- 修改
Configuration
-Locale
为简体中文 (Chinese Simplified)
,Save
-Apply
,刷新网页。 配置
-Network
,勾选UPnP
,IP 地址族
改为IPv4+IPv6
,保存
-应用
。
安装 Moonlight 配对并接收流媒体
在 Moonlight Game Streaming: Play Your PC Games Remotely 下载对应系统版本。
# Linux 安装 Moonlight
flatpak install flathub com.moonlight_stream.Moonlight
安装 Moonlight 后,和 Sunshine 设备连接在同一网络下,Moonlight 首页就会显示 Sunshine 设备,点击后显示 PIN 码。
在 Sunshine 设备上打开 PIN 码配对页面 https://localhost:47990/pin,输入 Moonlight 设备上的 PIN 码,自定义设备名称后配对。
Moonlight 首页再次点击 Sunshine 设备后开始串流,显示 Sunshine 设备的画面。
安装虚拟显示器软件到 Sunshine 设备
Windows ParsecVDisplay
Releases · nomi-san/parsec-vdd 安装后CUSTOM
中填写一个分辨率、帧率和 Moonlight 设置中的视频分辨率、视频帧数相同。
ADD DISPLAY
一个显示器,单击创建的虚拟显示器,可以看到类似\\.\DISPLAY29
的选项,在Resolution
中可以修改为刚刚指定的分辨率、帧数。
回到 Sunshine 后台,将\\.\DISPLAY29
填写到配置
-Audio/Video
-输出名称
中,保存
-应用
。
新版 Sunshine 有可能要填 device_id 而不是上面的 display_name,可以用命令行在 Sunshine 安装目录下运行sunshine.exe
,看日志中对应的 device_id 是多少。
[2025-03-11 10:58:49.825]: Info: Currently available display devices:
[
……
{
"device_id": "{f0f2bd44-9933-5119-bde7-638f4079e4c0}",
"display_name": "\\\\.\\DISPLAY51",
……
}
]
将{f0f2bd44-9933-5119-bde7-638f4079e4c0}
填写到配置
-Audio/Video
-输出名称
中,保存
-应用
。
Sunshine 设备在设置
-系统
-屏幕
中,将显示器排列方式改为扩展这些显示器
,保存
-应用
。
最后在 Moonlight 首页点击设备连接即可。
如果没有扩展,重新修改下显示器排列方式。
Linux xrandr
# 查看到当前显示器为 HDMI-A-0
$ xrandr
Screen 0: minimum 320 x 200, current 3840 x 2160, maximum 16384 x 16384
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
HDMI-A-0 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 597mm x 336mm
# 安装 xcvt
$ sudo apt install xcvt
# 生成分辨率、帧数为 Moonlight 设置中的视频分辨率、视频帧数
cvt 2800 1752 60
# 2800x1752 59.97 Hz (CVT) hsync: 108.85 kHz; pclk: 418.00 MHz
Modeline "2800x1752_60.00" 418.00 2800 3016 3320 3840 1752 1755 1765 1815 -hsync +vsync
# 使用 xrandr 创建新的 mode,--newmode 后面跟刚刚 cvt 产生的 modeline 信息,如果去掉“_60.00”就可以在显示器首选项中看到。
$ xrandr --newmode "2800x1752_60.00" 418.00 2800 3016 3320 3840 1752 1755 1765 1815 -hsync +vsync
# 再次查看显示器
$ xrandr
……
DisplayPort-6 disconnected (normal left inverted right x axis y axis)
2800x1752_60.00 (0x695) 418.000MHz -HSync +VSync
h: width 2800 start 3016 end 3320 total 3840 skew 0 clock 108.85KHz
v: height 1752 start 1755 end 1765 total 1815 clock 59.97Hz
# 添加新的 mode
$ xrandr --addmode DisplayPort-6 "2800x1752_60.00"
# --left-of HDMI-A-0 为放在真实显示屏的左边
$ xrandr --output DisplayPort-6 --mode "2800x1752_60.00" --left-of HDMI-A-0
在 Sunshine 启动日志中,观察到 DisplayPort-6 的 id 为 7。
[2025-03-11 02:18:04.757]: Info: CLIENT CONNECTED
[2025-03-11 02:18:04.791]: Info: Detecting displays
[2025-03-11 02:18:04.799]: Info: Detected display: DisplayPort-0 (id: 0)DisplayPort-0 connected: false
[2025-03-11 02:18:04.799]: Info: Detected display: HDMI-A-0 (id: 1)HDMI-A-0 connected: true
[2025-03-11 02:18:04.799]: Info: Detected display: DisplayPort-1 (id: 2)DisplayPort-1 connected: false
[2025-03-11 02:18:04.799]: Info: Detected display: DisplayPort-2 (id: 3)DisplayPort-2 connected: false
[2025-03-11 02:18:04.799]: Info: Detected display: DisplayPort-3 (id: 4)DisplayPort-3 connected: false
[2025-03-11 02:18:04.799]: Info: Detected display: DisplayPort-4 (id: 5)DisplayPort-4 connected: false
[2025-03-11 02:18:04.799]: Info: Detected display: DisplayPort-5 (id: 6)DisplayPort-5 connected: false
[2025-03-11 02:18:04.799]: Info: Detected display: DisplayPort-6 (id: 7)DisplayPort-6 connected: false
回到 Sunshine 后台,将7
填写到配置
-Audio/Video
-显示器编号
中,保存
-应用
。
最后在 Moonlight 首页点击设备连接即可。
// TODO 自定义脚本
公网串流
// TODO
参考
- 使用 Sunshine + Moonlight 来实现毫秒级延迟的远程串流 - 哔哩哔哩
- 几乎无延迟的无线副屏?sunshine+moonlight最强串流!【保姆级教学】_哔哩哔哩_bilibili
- Sunshine: Getting Started-Install-Linux-Flatpak-Additional installation (required)
- Sunshine + Moonlight 纯软件实现全平台设备作 Linux 副屏 - Sxrhhh - 博客园
- 23 没有cvt 命令,应该怎么装-论坛-深度科技
- 📲 在 Linux 上把手机 / 平板当作虚拟副屏,游戏聊天两不误 - 風雪城
评论区