想在 Linux 上用 Sunshine → Moonlight 做远程桌面,又不想买 HDMI/DP 欺骗器( dummy plug ),也不想一直开着物理显示器。折腾一段时间后,把流程整理成了一个开源项目:
https://github.com/mdj2812/sunshine-vdisplay
原理简述
- 在空闲的 GPU 输出口(未插线的 HDMI/DP )上,通过 自定义 EDID + 内核参数 强制启用虚拟显示器
- 核心参数:
drm.edid_firmware=<接口>:edid/virtual-display.bin video=<接口>:e(两者缺一不可) - Moonlight 连接/断开时,自动切换虚拟屏与物理屏( Sunshine
global_prep_cmd) - 支持 Arch/CachyOS/Fedora/Debian/Ubuntu 等,安装脚本会自动识别 mkinitcpio / dracut / initramfs-tools
致谢
本方案基于 Harry Ankers 的 Gist 教程( EDID 生成与 NVIDIA 虚拟屏思路)。我在此基础上做了 Sunshine 自动化、多发行版安装脚本、KDE 显示切换与亮度调节等。原帖作者 Reddit:u/hankers60。
目前已验证环境
- GPU: NVIDIA RTX 2070 SUPER (闭源驱动)
- 系统: CachyOS ( Arch 系)
- 桌面: KDE Plasma 6 Wayland
- 串流: Sunshine 2026.x ,KMS 捕获 + NVENC
- 引导: Limine (也支持 GRUB / systemd-boot )
已知限制
- 目前 仅支持 NVIDIA + KDE Wayland
- NVIDIA 强制启用的虚拟口 不支持 HDR(驱动限制,非 EDID 问题)
- 虚拟口上 4K@120 可能受驱动/带宽限制,部分环境最高 4K@60
- 修改 EDID 模式后需重建 initramfs 并重启
一键安装( NVIDIA + KDE Wayland )
curl -fsSL https://raw.githubusercontent.com/mdj2812/sunshine-vdisplay/main/scripts/install.sh | bash
安装后会改 initramfs 和 内核启动参数,建议先备份或快照,再重启测试 Moonlight 连接。
也可 clone 后本地安装(避免 curl | bash):
git clone https://github.com/mdj2812/sunshine-vdisplay.git
cd sunshine-vdisplay
./scripts/install.sh
指定虚拟口/物理口示例:
VDISPLAY=HDMI-A-1 PDISPLAY=DP-3 bash <(curl -fsSL \
https://raw.githubusercontent.com/mdj2812/sunshine-vdisplay/main/scripts/install.sh)
招募志愿者测试
后续计划见 GitHub Milestones,欢迎有对应硬件/环境的朋友帮忙验证:
| 方向 | 需要的环境 |
|---|---|
| NVIDIA + KDE Wayland | 不同显卡、发行版、引导器 — 基线验证 |
| AMD | amdgpu 虚拟显示路径(尚未实现,需硬件反馈) |
| Intel 核显 | i915 / xe |
| X11 | Plasma on X11 ,xrandr 切换 |
| 其他桌面 | GNOME 、Sway 等(非 kscreen-doctor) |
反馈方式
请在 GitHub 开 Issue,尽量附上:
- 显卡型号 + 驱动版本
- 发行版 + 桌面环境 + Wayland/X11
- 引导器( GRUB / systemd-boot / Limine )
- 失败时的 Sunshine 日志:
journalctl --user -u sunshine - 对应哪个 Milestone
