How to get virtual display outputs on Linux without using a dummy plug

Published: (January 9, 2026 at 04:53 PM EST)
3 min read
Source: Dev.to

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

  1. Check for free outputs

    xrandr
  2. 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

  1. Identify a free HDMI or DP output

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

    Note the output name (e.g. HDMI‑A‑1).

  2. 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:e

    Replace HDMI-A-1 with the output you identified.

  3. Update mkinitcpio.conf

    FILES=(/usr/lib/firmware/edid/samsung-q800t-hdmi2.1)
  4. Regenerate the initramfs

    sudo mkinitcpio -P
  5. 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`.
Back to Blog

Related posts

Read more »

Can I start using Wayland in 2026?

Article URL: https://michael.stapelberg.ch/posts/2026-01-04-wayland-sway-in-2026/ Comments URL: https://news.ycombinator.com/item?id=46485989 Points: 11 Comment...

An erratic Xfce4 Black Screen (WIP)

Erratic Black Screen Issues on Linux Xfce4 !Cover image for “An erratic Xfce4 Black Screen WIP”https://media2.dev.to/dynamic/image/width=1000,height=420,fit=co...