Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
MarMDJtin
V2EX  ›  Linux

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

  •  
  •   MarMDJtin · 1 day ago · 2073 views

    想在 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 replies    2026-09-14 16:06:13 +08:00
    haiku
        1
    haiku  
       1 day ago   ❤️ 1
    感谢分享,我之前让 claude 搓了一个虚拟显示器,不过后来重装系统,配置丢了,懒得折腾了
    wises
        2
    wises  
       22h 1m ago
    拼夕夕买一个 4 块钱, 有必要这样折腾吗?
    weyou
        3
    weyou  
       16h 37m ago via Android
    感谢分享,很好的创意,之前就想过为什么不能软件欺骗,原来还真可以
    strobber16
        4
    strobber16  
       16h 12m ago via Android
    @wises 如无必要,勿增实体
    heyjei
        5
    heyjei  
       15h 53m ago
    你们的 Moonlight ,在用 macOS 做客户端的时候,键盘功能都正常吗?很早之前试用的时候,键盘有部分按键不好使框,就没用了
    Tink
        6
    Tink  
       15h 1m ago
    @wises #2 主要是思路可以借鉴到其他很多地方上
    kapr1k0rn
        7
    kapr1k0rn  
       14h 51m ago via iPhone
    现在一堆 sunshine 的分支项目全都自带这个了,apollo/vipepollo 这些
    cluulzz
        8
    cluulzz  
       13h 37m ago   ❤️ 1
    在个人服务器上折腾过这个,用 sunshine 串流 retroarch,跑着个不关机的 gba 模拟器
    MarMDJtin
        9
    MarMDJtin  
    OP
       13h 19m ago via Android
    @haiku 那个的限制在于不能自定义分辨率和比例,比如我的笔记本的屏幕是 16:10 的,可以通过定制 EDID 让 server 的虚拟显示 16:10 输出。否则就都是 16:9 的,效果就不完美了。我后面计划要在脚本里加一步来选择 EDID 的可用输出格式,包括分辨率,刷新率,HDR 这些
    MarMDJtin
        10
    MarMDJtin  
    OP
       13h 15m ago via Android
    @Tink 是的,这个就是配合 sunshine on linux 。因为本身 Sunshine 不想原生支持虚拟显示器才诞生了 Apollo 这些 fork
    MarMDJtin
        11
    MarMDJtin  
    OP
       13h 12m ago via Android
    @cluulzz 那是 4:3 的输出?我得记一笔,还有这样制式的需求。
    TheNine
        12
    TheNine  
       8h 28m ago
    我之前用 pve 虚拟机安装 steamos 也是用 EDID 的
    后来发现 Bazzite 原生就自带这个功能
    TheNine
        13
    TheNine  
       8h 27m ago
    @TheNine 对了我是用的 amd 的 9070xtx
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1549 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 16:33 · PVG 00:33 · LAX 09:33 · JFK 12:33
    ♥ Do have faith in what you're doing.