开源: Linux NVIDIA 虚拟显示器方案,无需 HDMI 欺骗器

MarMDJtin 2026-09-13 23:24 1

想在 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

最新回复 (13)
  • haiku 09-13 23:38
    1
    感谢分享,我之前让 claude 搓了一个虚拟显示器,不过后来重装系统,配置丢了,懒得折腾了
  • wises 09-14 02:32
    2
    拼夕夕买一个 4 块钱, 有必要这样折腾吗?
  • weyou 09-14 07:56
    3
    感谢分享,很好的创意,之前就想过为什么不能软件欺骗,原来还真可以
  • strobber16 09-14 08:21
    4
    @wises 如无必要,勿增实体
  • heyjei 09-14 08:40
    5
    你们的 Moonlight ,在用 macOS 做客户端的时候,键盘功能都正常吗?很早之前试用的时候,键盘有部分按键不好使框,就没用了
  • Tink 09-14 09:32
    6
    @wises #2 主要是思路可以借鉴到其他很多地方上
  • kapr1k0rn 09-14 09:42
    7
    现在一堆 sunshine 的分支项目全都自带这个了,apollo/vipepollo 这些
  • cluulzz 09-14 10:55
    8
    在个人服务器上折腾过这个,用 sunshine 串流 retroarch,跑着个不关机的 gba 模拟器
  • MarMDJtin 楼主 09-14 11:14
    9
    @haiku 那个的限制在于不能自定义分辨率和比例,比如我的笔记本的屏幕是 16:10 的,可以通过定制 EDID 让 server 的虚拟显示 16:10 输出。否则就都是 16:9 的,效果就不完美了。我后面计划要在脚本里加一步来选择 EDID 的可用输出格式,包括分辨率,刷新率,HDR 这些
  • MarMDJtin 楼主 09-14 11:18
    10
    @Tink 是的,这个就是配合 sunshine on linux 。因为本身 Sunshine 不想原生支持虚拟显示器才诞生了 Apollo 这些 fork
  • MarMDJtin 楼主 09-14 11:21
    11
    @cluulzz 那是 4:3 的输出?我得记一笔,还有这样制式的需求。
  • TheNine 09-14 16:05
    12
    我之前用 pve 虚拟机安装 steamos 也是用 EDID 的
    后来发现 Bazzite 原生就自带这个功能
  • TheNine 09-14 16:06
    13
    @TheNine 对了我是用的 amd 的 9070xtx
* 帖子来源V2EX
返回