How to get virtual display outputs on Linux without using a dummy plug
Source: Dev.to
Note: This guide focuses on Xorg. On Wayland there are easier ways to achieve the same result, e.g. KDE’s virtual‑monitor implementation in Krfb:
Method #1 – Sacrificing One of Your Existing Outputs
-
Check for free outputs
xrandr -
Follow the first part of
How to Create a Virtual Display for Sunshine on Arch Linux – Anton Ždanov ()
Stop before the Sunshine‑specific section.Tip: EDID files can be added later with
xrandr, so you don’t need to pick one that exactly matches your desired specs.
Step 1 – Get an EDID File
An EDID (Extended Display Identification Data) file simulates a monitor.
Download a pre‑made file from the v4l‑utils repository and choose one that matches the resolution and features you need (e.g. 4K, HDR).
Step 2 – Place the EDID File
sudo mkdir -p /usr/lib/firmware/edid
sudo cp samsung-q800t-hdmi2.1 /usr/lib/firmware/edid/
(Replace samsung-q800t-hdmi2.1 with the name of the file you downloaded.)
Step 3 – Configure Kernel Parameters
-
Identify a free HDMI or DP output
for p in /sys/class/drm/*/status; do con=${p%/status} echo -n "${con#*/card?-}: " cat "$p" doneNote the output name (e.g.
HDMI‑A‑1). -
Add kernel parameters (see the Arch Wiki and EndeavourOS guide for details)
drm.edid_firmware=HDMI-A-1:edid/samsung-q800t-hdmi2.1 video=HDMI-A-1:eReplace
HDMI-A-1with the output you identified. -
Update
mkinitcpio.confFILES=(/usr/lib/firmware/edid/samsung-q800t-hdmi2.1) -
Regenerate the initramfs
sudo mkinitcpio -P -
Reboot
After rebooting, you may need to enable the new display in your desktop’s Display Settings.
Method #2 – Using the EVDI Linux Driver (before adding kernel parameters)
EVDI – Extensible Virtual Display Interface – is a kernel module that lets user‑space programs manage virtual screens. It is primarily used for DisplayLink devices but can be repurposed to create virtual outputs without any hardware.
Background
- ArchWiki: Extreme Multihead – Using a virtual output
- Stack‑Exchange discussion: Unable to add a VIRTUAL display to Xorg
- Etam Software – Virtual screen (clear step‑by‑step guide)
Caveat: The pure EVDI solution does not integrate well with desktop‑environment screen managers (e.g., KDE’s KScreen2). You may need to disable such services manually.
Install the EVDI Kernel Module
git clone https://github.com/DisplayLink/evdi.git
cd evdi/module
make && sudo make install # or
sudo make install_dkms
Load the Module at Boot
# /etc/modules-load.d/local.conf
evdi
Set the Desired Number of Virtual Outputs
# /etc/modprobe.d/local.conf
options evdi initial_device_count=1 # change the number as needed
Activate the Module
Warning: Running the next command will freeze your current Xorg session.
It is safer to reboot after editing the files, or to switch to a virtual console (Ctrl+Alt+F3) and run the command there.
sudo modprobe evdi
After a reboot, xrandr should list new DVI outputs (e.g. DVI‑1).
If they have no modes, add them manually with xrandr --newmode / --addmode.
You can now follow the steps from Method #1 to attach an EDID file and enable the virtual display.
Using Your Newly Created Virtual Outputs
- Screen‑sharing – VNC, RDP, or any other remote‑desktop solution can now expose the virtual monitor. Remember that VNC traffic is unencrypted by default.
- Android devices – Consider using ADB reverse for lower latency and to avoid configuring a static IP address.
adb reverse tcp:5900 tcp:5900 # example for VNC on port 5900
References
- Krfb virtual monitor –
- Anton Ždanov article –
- v4l‑utils EDID repository –
- Arch Wiki – Kernel parameters –
- EndeavourOS systemd‑boot guide –
- EVDI GitHub –
- Etam Software – Virtual screen –
Happy virtual‑display hacking!
[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`.