Linux 虚拟显示器

📅 2026年08月21日 📂 技术
#Linux

适用环境:Ubuntu 26.04 LTS / Wayland / AMD 核显(Radeon 780M, amdgpu 驱动)

结论:软件方案完全可以实现虚拟显示器,不需要买 HDMI Dummy Plug 硬件


一、目标

无物理显示器的机器上,让系统(GNOME/mutter)认为"有显示器",从而:

  • 远程工具(rustdesk 等)能抓到有内容的画面

二、最终成功方案(一句话)

真实显示器的 EDID 文件 + 内核参数 drm.edid_firmware + video=<接口>:e 强制启用

# /etc/default/grub 中 GRUB_CMDLINE_LINUX_DEFAULT
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash \
  drm.edid_firmware=HDMI-A-1:edid/dp-edid.bin \
  video=HDMI-A-1:e"

两个参数缺一不可

  • drm.edid_firmware=<接口>:edid/<文件>:给接口加载 EDID(让它"知道"有显示器)
  • video=<接口>:e强制启用该接口(即使物理未连接)——之前失败就是漏了这个!

三、完整操作步骤

# 先插一个真实物理显示器,一会用完就可以拨了,我这里插的是LG的USB显示器
for p in /sys/class/drm/*/status; do echo "${p#*/card?-}: $(cat $p)"; done
# 输出示例: 
DP-1/status: disconnected
DP-2/status: connected  #真实物理显示器
DP-3/status: disconnected
DP-4/status: disconnected
DP-5/status: disconnected
DP-6/status: disconnected
DP-7/status: disconnected
DP-8/status: disconnected
HDMI-A-1/status: disconnected
Writeback-2/status: unknown
  
# 复制物理显示器固件
sudo cp /sys/class/drm/*-DP-2/edid /lib/firmware/edid/dp-edid.bin
 

# GRUB_CMDLINE_LINUX_DEFAULT 加参数
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash drm.edid_firmware=HDMI-A-1:edid/dp-edid.bin video=HDMI-A-1:e"

sudo update-grub
sudo reboot

四. 验证

# 接口变成 connected
cat /sys/class/drm/card1-HDMI-A-1/status   # → connected

# mutter 认到显示器(在 wl 用户会话下)
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
  gdbus call --session --dest org.gnome.Mutter.DisplayConfig \
  --object-path /org/gnome/Mutter/DisplayConfig \
  --method org.gnome.Mutter.DisplayConfig.GetCurrentState
# → 能看到 HDMI-1, 2560x1600@59.97, is-current + is-preferred
An error has occurred. This application may no longer respond until reloaded. Reload 🗙