如何在 Linux 上获取虚拟显示输出而无需使用 dummy plug

发布: (2026年1月10日 GMT+8 05:53)
5 min read
原文: Dev.to

Source: Dev.to

Note: 本指南侧重于 Xorg。在 Wayland 上有更简单的方法实现相同的结果,例如 KDE 在 Krfb 中的虚拟显示器实现:

方法 #1 – 牺牲现有的一个输出

  1. 检查可用的输出

    xrandr
  2. 按照以下内容的前半部分操作
    How to Create a Virtual Display for Sunshine on Arch Linux – Anton Ždanov ()
    在 Sunshine‑specific 部分之前停止。

    提示: EDID 文件可以稍后使用 xrandr 添加,因此不必挑选完全符合你期望规格的文件。

步骤 1 – 获取 EDID 文件

EDID(Extended Display Identification Data)文件用于模拟显示器。
v4l‑utils 仓库下载已有的文件,并选择分辨率和功能符合需求的文件(例如 4K、HDR)。

步骤 2 – 放置 EDID 文件

sudo mkdir -p /usr/lib/firmware/edid
sudo cp samsung-q800t-hdmi2.1 /usr/lib/firmware/edid/

(将 samsung-q800t-hdmi2.1 替换为你下载的文件名。)

步骤 3 – 配置内核参数

  1. 识别一个空闲的 HDMI 或 DP 输出

    for p in /sys/class/drm/*/status; do
        con=${p%/status}
        echo -n "${con#*/card?-}: "
        cat "$p"
    done

    记录输出名称(例如 HDMI‑A‑1)。

  2. 添加内核参数(详细信息请参阅 Arch Wiki 和 EndeavourOS 指南)

    drm.edid_firmware=HDMI-A-1:edid/samsung-q800t-hdmi2.1 video=HDMI-A-1:e

    HDMI-A-1 替换为你识别的输出。

  3. 更新 mkinitcpio.conf

    FILES=(/usr/lib/firmware/edid/samsung-q800t-hdmi2.1)
  4. 重新生成 initramfs

    sudo mkinitcpio -P
  5. 重启

    重启后,可能需要在桌面环境的 显示设置 中启用新显示器。

Source:

方法 #2 – 使用 EVDI Linux 驱动(在添加内核参数之前)

EVDI – 可扩展虚拟显示接口 – 是一个内核模块,允许用户空间程序管理虚拟屏幕。它主要用于 DisplayLink 设备,但也可以重新用于在没有任何硬件的情况下创建虚拟输出。

背景

  • ArchWiki: Extreme Multihead – Using a virtual output
  • Stack‑Exchange 讨论: Unable to add a VIRTUAL display to Xorg
  • Etam Software – Virtual screen(详细的逐步指南)

注意: 纯 EVDI 方案与桌面环境的屏幕管理器(例如 KDE 的 KScreen2)兼容性不佳。可能需要手动禁用这些服务。

安装 EVDI 内核模块

git clone https://github.com/DisplayLink/evdi.git
cd evdi/module
make && sudo make install          # or
sudo make install_dkms

在启动时加载模块

# /etc/modules-load.d/local.conf
evdi

设置所需的虚拟输出数量

# /etc/modprobe.d/local.conf
options evdi initial_device_count=1   # 根据需要更改数字

激活模块

警告: 运行下面的命令会冻结当前的 Xorg 会话。
最安全的做法是编辑完文件后重启,或切换到虚拟终端(Ctrl+Alt+F3)后再执行该命令。

sudo modprobe evdi

重启后,xrandr 应该会列出新的 DVI 输出(例如 DVI‑1)。
如果它们没有模式,可使用 xrandr --newmode / --addmode 手动添加。

现在可以按照 方法 #1 的步骤为虚拟显示附加 EDID 文件并启用它。

使用您新创建的虚拟输出

  • 屏幕共享 – 现在可以使用 VNC、RDP 或任何其他远程桌面解决方案来暴露虚拟显示器。请记住,VNC 流量默认未加密。
  • Android 设备 – 考虑使用 ADB reverse 以降低延迟并避免配置静态 IP 地址。
adb reverse tcp:5900 tcp:5900   # example for VNC on port 5900

参考文献

  • Krfb virtual monitor
  • Anton Ždanov 文章
  • v4l‑utils EDID 仓库
  • Arch Wiki – 内核参数
  • EndeavourOS systemd‑boot 指南
  • EVDI GitHub
  • Etam Software – 虚拟屏幕

祝你虚拟显示黑客玩得开心!

[Virtual screen](https://etam-software.eu/blog/2021-01-09-virtual-screen.html):

4) (optional) Attach Android device through USB cable

    adb reverse tcp:5900 tcp:5900

Now you can point your VNC client application, such as [MultiVNC](https://f-droid.org/packages/com.coboltforge.dontmind.multivnc/), to `localhost:5900`.
Back to Blog

相关文章

阅读更多 »

不稳定的 Xfce4 黑屏 (WIP)

Linux Xfce4 上的间歇性黑屏问题!封面图:“An erratic Xfce4 Black Screen WIP” https://media2.dev.to/dynamic/image/width=1000,height=420,fit=co...