使用Ubuntu电脑作为Windows电脑的扩展屏的配置记录(低延迟方案)_ubuntu moonlight
方案概述
笔者在网上多方调研,后按照大佬Ivan Chen的个人blog中教程进行了完美复现,实测已在win11+ubuntu22.04上顺利完成。Ivan Chen的方案原文链接如下:spacedesk的完美替代方案 _https://idkidknow.com/2024/09/15/spacedesk%E7%9A%84%E5%AE%8C%E7%BE%8E%E6%9B%BF%E4%BB%A3%E6%96%B9%E6%A1%88/
本配置记录介绍如何使用 虚拟显示器驱动 和 低延迟串流技术,让 Ubuntu 电脑成为 Windows 电脑的扩展屏幕,并尽可能减少延迟。我们使用的关键工具如下:
-
Virtual Display Driver(虚拟显示器驱动):欺骗 Windows 认为有额外的屏幕
-
Sunshine(开源远程桌面服务器):在 Windows 上流式传输虚拟屏幕
-
Moonlight(Nvidia 开发的串流客户端):在 Ubuntu 上接收并显示虚拟屏幕
配置步骤
1. 在 Windows 上创建虚拟显示器
Windows 默认不支持额外的显示器,因此需要安装一个虚拟显示器驱动,让 Windows 误认为有额外的屏幕。
🔹 安装 Virtual Display Driver
-
下载 virtual-display-rs (开源 Rust 实现的虚拟显示驱动)
GitHub仓库:virtual-display-rs
-
按仓库readme中的引导步骤,安装证书,运行msi软件包进行安装
-
运行刚刚安装的 Virtual Display Driver Control 创建新的虚拟显示器。
-
选择合适的分辨率(建议与 Ubuntu 屏幕一致)
-
进入 Windows 显示设置,你应该能看到一个新的虚拟屏幕
-
选择 “扩展这些显示器”,并调整虚拟屏幕的位置,使其成为副屏
2. 在 Windows 上安装 Sunshine 服务器
Sunshine 是一个开源的低延迟远程桌面工具,用于将虚拟屏幕串流到 Ubuntu 端。
🔹 安装 Sunshine
-
从 GitHub 下载 Sunshine 并安装
-
运行 Sunshine
-
进入 Sunshine 配置界面,确保以下设置正确:
-
指定捕获的屏幕
-
打开cmd命令行,进入Sunshine的安装目录,运行
tools\\dxgi-info.exe
。命令行显示如下,通过分辨率Resolution可以得到虚拟屏幕的Output Name。我的虚拟屏幕的Output Name为 \\\\.\\DISPLAY30 。 -
在 Sunshine 的web配置页面中,进入 Troubleshooting(故障排除) 选项卡 ,查找 Sunshine 启动日志,找到Output Name对应的 “device_id”。进入Audio/Video选项卡,将获取的“device_id”填入”输出名称“一栏,打开”高级显示设备选项“,将设备配置改为”自动激活显示“,例如:
-
-
关闭 Sunshine 的音频串流(防止 Windows 音频被锁定):
-
在Audio/Video选项卡中,“虚拟音频输出设备”栏目,填入一个不存在的设备名
-
-
3. 在 Ubuntu 上安装 Moonlight
Moonlight 是 Nvidia 开发的远程串流客户端,我们用它来接收并显示 Windows 传输的虚拟屏幕。
🔹 安装 Moonlight
-
在 Ubuntu 终端运行:(如果sudo安装失败就用终端提示的snap命令安装)
sudo apt install moonlight -y
-
终端命令行输入moonlight,启动 Moonlight
-
连接 Sunshine 服务器:
-
在 Moonlight 界面输入windows电脑的IP地址,搜索 Windows 主机。弹出一个四位pin码。
-
在Windows电脑的Sunshine web配置侧,进行pin配对。配对成功后就可以串流连接虚拟屏幕的desktop显示。
-
-
进入 Moonlight 设置,调整合适的分辨率。
🎯 最终效果
✅ Ubuntu 电脑成功作为 Windows 的扩展屏幕 ✅ 低延迟(远优于 VNC) ✅ 画面流畅,Windows 端音频不受影响
⚡ 额外优化
-
使用有线网络(比 WiFi 更流畅)
-
Moonlight 开启 H.264 硬件加速(减少 CPU 负担)
-
调整 Windows 虚拟屏幕位置(确保鼠标能顺畅移动)
这个方案适用于开发者、设计师或需要跨设备协同工作的用户。如果你在配置过程中遇到问题,欢迎在评论区交流!🚀