Virtual Display (Linux / EDID)

Advanced display setup for Linux / KDE Plasma / Wayland.

This page is for Linux / KDE Plasma setups that need a dedicated display mode through EDID. Most users should start with the Linux server section first and only come here when the EDID has to be generated, installed, or verified manually.

The idea is simple: create an EDID file for the display mode you want, install it into /lib/firmware/edid/, bind it to the HDMI output, then verify that KDE Plasma sees the new mode.

Install tools

sudo apt update
sudo apt install -y zsh dos2unix automake edid-decode make gcc

Get the EDID generator

mkdir -p ~/dev
cd ~/dev
git clone https://github.com/akatrevorjay/edid-generator
cd edid-generator

dos2unix modeline2edid
chmod +x modeline2edid

Patch for custom square / small-display modes

Some small-display modes need a small patch in the generator. I will add more known-good display profiles here over time.

python3 - <<'PY'
from pathlib import Path
import re

p = Path("edid.S")
s = p.read_text()

s = re.sub(
    r'std_xres:\s*\.byte\s*\(XPIX/8\)-31',
    'std_xres: .byte 0x01',
    s
)

s = re.sub(
    r'std_vres:\s*\.byte\s*\(XY_RATIO<<6\)\+VFREQ-60',
    'std_vres: .byte 0x01',
    s
)

p.write_text(s)
PY

Select resolution and refresh rate

Pick the resolution and refresh rate for the display setup you want. I often use high refresh rates, for example 240 Hz, because this can reduce overall latency. If an app or hardware path does not behave correctly at high refresh rates, lower it. I recommend the highest stable value your hardware and configuration can handle.

This is an advanced topic. I cannot cover every edge case here, but a chatbot will usually be able to help if you show it this page and your exact command output.

Show current 720x720 example

This is the current example config. Later I will add more known-good configs for more supported displays.

cd ~/dev/edid-generator
rm -f sq72030.S sq72030.bin

cat > modelines.txt <<'MODEL'
Modeline "sq72030" 21.12 720 760 832 944 720 721 724 746 -hsync +vsync ratio=4:3 vfreq=30
MODEL

./modeline2edid modelines.txt
make
edid-decode sq72030.bin

Install the EDID file

Install the generated EDID file. Replace the filename when you generate a different display profile.

cd ~/dev/edid-generator
sudo install -Dm644 sq72030.bin /lib/firmware/edid/sq72030.bin
ls -lh /lib/firmware/edid/sq72030.bin

Select the HDMI output

Some Raspberry Pis expose more than one HDMI output. Check the available DRM outputs and select the one you want to bind to the display setup.

ls /sys/class/drm | grep -E 'card[0-9]+-HDMI-A-[12]'

Edit the kernel command line:

sudo nano /boot/firmware/cmdline.txt

Add the EDID binding. Example for HDMI-A-1:

drm.edid_firmware=HDMI-A-1:edid/sq72030.bin video=HDMI-A-1:e

Verify after reboot

cat /proc/cmdline | grep -o 'drm.edid_firmware=[^ ]*\|video=HDMI-A-1:e'
cat /sys/class/drm/card1-HDMI-A-1/status
cat /sys/class/drm/card1-HDMI-A-1/modes
QT_QPA_PLATFORM=wayland kscreen-doctor
QT_QPA_PLATFORM=wayland kscreen-doctor -o

A good result should show the EDID binding, connected, and the display mode you created.

Show example verify output
drm.edid_firmware=HDMI-A-1:edid/sq72030.bin
video=HDMI-A-1:e
connected
720x720

Back to Linux setup