Custom EDID not working with dummy plug

Hi there,

I’m trying to setup a dummy video plug (tried with both HDMI and DP) to mimic my main screen which is an Alienware with 3440x1440@165Hz with HDR.

My goal is to be able to stream games via Sunshine while not keeping the actual monitor powered.

The problem is that these dummy plugs usually come with very simple EDIDs embedded, which only allow standard definitions/frequencies and no HDR.

So i tried dumping my real monitor EDID file by copying /sys/class/dr/card1-DP-1/edid. Reading the copied file with edid-decode seems fine, it show all the right information about screen definitions, HDR, you name it.

Then i tried applying this file to my dummy plug following this archlinux tutorial : Kernel mode setting - ArchWiki

After unplugging and re-plugging the dummy plug, it now shows in KDE config panel with the same name/model as my main monitor, seemingly indicating that the edid file is correctly loaded by the kernel. diff /sys/class/drm/card1-HDMI-A-1/edid /sys/class/drm/card1-DP-1/edid shows that the two files are perfectly identical.

However, i can only select standard definitions/frequencies up to 1920x1080@60Hz. Higher definitions or frequencies present in the edid file (2560x1440, 3440x1440, 120Hz, 165Hz…) are not there HDR shows as unsupported either. This can clearly be seen in the output of kscreen-doctor -o:

kscreen-doctor output

Output: 1 DP-2
enabled
connected
priority 1
DisplayPort
Modes:  0:3440x1440@60!  1:3440x1440@165*  2:3440x1440@120  3:3440x1440@100  4:3440x1440@96  5:3440x1440@72  6:3440x1440@60  7:3440x1440@50  8:3440x1440@48  9:2560x1440@144  10:2560x1440@120  11:2560x1440@60  12:1920x1200@60  13:1920x1080@144  14:1920x1080@120  15:1920x1080@120  16:1920x1080@60  17:1920x1080@60  18:1920x1080@60 19:1920x1080@50  20:1920x1080@30  21:1920x1080@30  22:1920x1080@25  23:1920x1080@24  24:1920x1080@24  25:1600x1200@60  26:1680x1050@60  27:1600x900@60  28:1280x1024@75 29:1280x1024@60  30:1440x900@60  31:1280x800@60  32:1152x864@75  33:1280x720@60  34:1280x720@60  35:1280x720@50  36:1024x768@75  37:1024x768@60  38:800x600@75  39:800x600@60  40:720x576@50  41:720x480@60  42:720x480@60  43:720x480@60  44:720x480@60  45:640x480@75  46:640x480@60  47:640x480@60  48:640x480@60  49:720x400@70  50:1600x1200@60  51:1280x1024@60  52:1024x768@60  53:1920x1200@60  54:1280x800@60  55:2560x1440@60  56:1920x1080@60  57:1600x900@60  58:1368x768@60  59:1280x720@60
Geometry: 0,0 3440x1440
Scale: 1
Rotation: 1
Overscan: 0
Vrr: Automatic
RgbRange: unknown
HDR: enabled
SDR brightness: 150 nits
SDR gamut wideness: 0%
Peak brightness: 465 nits
Max average brightness: 277 nits
Min brightness: 0.0003 nits
Wide Color Gamut: enabled
ICC profile: none
Output: 2 HDMI-A-1
enabled
connected
priority 2
HDMI
Modes:  0:1920x1080@60*  1:1920x1080@60!  2:1920x1080@60  3:1920x1080@50  4:1920x1080@30  5:1920x1080@30  6:1920x1080@25  7:1920x1080@24  8:1920x1080@24  9:1600x900@60  10:1280x1024@75  11:1280x1024@60  12:1152x864@75  13:1280x720@60  14:1280x720@60  15:1280x720@50  16:1024x768@75  17:1024x768@60  18:800x600@75  19:800x600@60  20:720x576@50  21:720x480@60  22:720x480@60  23:720x480@60  24:720x480@60  25:640x480@75  26:640x480@60  27:640x480@60  28:640x480@60  29:720x400@70  30:1280x1024@60  31:1024x768@60  32:1280x800@60  33:1920x1080@60  34:1600x900@60  35:1368x768@60  36:1280x720@60
Geometry: 3440,0 1920x1080
Scale: 1
Rotation: 1
Overscan: 0
Vrr: incapable
RgbRange: unknown
HDR: disabled
Wide Color Gamut: disabled
ICC profile: none

Thanks a lot for any help…

garuda-inxi

System:
Kernel: 6.8.9-zen1-2-zen arch: x86_64 bits: 64 compiler: gcc v: 14.1.1
clocksource: tsc avail: hpet,acpi_pm
parameters: BOOT_IMAGE=/@/boot/vmlinuz-linux-zen
root=UUID=81917e19-1ef7-4f5d-adb2-efa1f1cc34fe rw rootflags=subvol=@
quiet quiet rd.udev.log_priority=3 vt.global_cursor_default=0
resume=UUID=b5f5224c-7f0c-4f99-b519-7c88d92f1a1a loglevel=3
acpi_enforce_resources=lax splash video=DP-2:3440x1440@60 ibt=off
Desktop: KDE Plasma v: 6.0.4 tk: Qt v: N/A wm: kwin_wayland dm: SDDM
Distro: Garuda base: Arch Linux
Machine:
Type: Desktop Mobo: Gigabyte model: B550 AORUS ELITE V2 v: x.x serial: N/A
uuid: 03560274-043c-0564-8c06-020700080009 UEFI: American Megatrends LLC.
v: FC date: 03/24/2023
CPU:
Info: model: AMD Ryzen 7 5800X3D socket: AM4 bits: 64 type: MT MCP
arch: Zen 3+ gen: 4 level: v3 note: check built: 2022 process: TSMC n6 (7nm)
family: 0x19 (25) model-id: 0x21 (33) stepping: 2 microcode: 0xA20120A
Topology: cpus: 1x cores: 8 tpc: 2 threads: 16 smt: enabled cache:
L1: 512 KiB desc: d-8x32 KiB; i-8x32 KiB L2: 4 MiB desc: 8x512 KiB
L3: 96 MiB desc: 1x96 MiB
Speed (MHz): avg: 3400 min/max: 2200/4549 boost: enabled
base/boost: 3400/3400 scaling: driver: acpi-cpufreq governor: performance
volts: 1.1 V ext-clock: 100 MHz cores: 1: 3400 2: 3400 3: 3400 4: 3400
5: 3400 6: 3400 7: 3400 8: 3400 9: 3400 10: 3400 11: 3400 12: 3400
13: 3400 14: 3400 15: 3400 16: 3400 bogomips: 108592
Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm
Vulnerabilities: <filter>
Graphics:
Device-1: AMD Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
vendor: XFX Speedster MERC 319 driver: amdgpu v: kernel arch: RDNA-2
code: Navi-2x process: TSMC n7 (7nm) built: 2020-22 pcie: gen: 4
speed: 16 GT/s lanes: 16 ports: active: DP-2 empty: DP-1, DP-3, HDMI-A-1,
Writeback-1 bus-ID: 09:00.0 chip-ID: 1002:73bf class-ID: 0300
Device-2: Huawei HiCamera driver: snd-usb-audio,uvcvideo type: USB
rev: 2.0 speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 3-1.2.1:13
chip-ID: 12d1:4321 class-ID: 0102 serial: <filter>
Display: server: X.Org v: 23.2.6 with: Xwayland v: 23.2.6
compositor: kwin_wayland driver: X: loaded: amdgpu
unloaded: modesetting,radeon alternate: fbdev,vesa dri: radeonsi
gpu: amdgpu display-ID: :0 screens: 1
Screen-1: 0 s-res: 3440x1440 s-dpi: 96 s-size: 910x381mm (35.83x15.00")
s-diag: 987mm (38.84")
Monitor-1: DP-2 model: Dell AW3423DWF serial: <filter> built: 2022
res: 3440x1440 hz: 165 dpi: 109 gamma: 1.2 size: 800x340mm (31.5x13.39")
diag: 868mm (34.2") modes: max: 3440x1440 min: 720x400
API: EGL v: 1.5 hw: drv: amd radeonsi platforms: device: 0 drv: radeonsi
device: 1 drv: swrast surfaceless: drv: radeonsi x11: drv: radeonsi
inactive: gbm,wayland
API: OpenGL v: 4.6 compat-v: 4.5 vendor: amd mesa v: 24.0.7-arch1.3
glx-v: 1.4 direct-render: yes renderer: AMD Radeon RX 6900 XT (radeonsi
navi21 LLVM 17.0.6 DRM 3.57 6.8.9-zen1-2-zen) device-ID: 1002:73bf
memory: 15.62 GiB unified: no
API: Vulkan v: 1.3.279 layers: 6 device: 0 type: discrete-gpu name: AMD
Radeon RX 6900 XT (RADV NAVI21) driver: mesa radv v: 24.0.7-arch1.3
device-ID: 1002:73bf surfaces: xcb,xlib device: 1 type: cpu name: llvmpipe
(LLVM 17.0.6 256 bits) driver: mesa llvmpipe v: 24.0.7-arch1.3 (LLVM
17.0.6) device-ID: 10005:0000 surfaces: xcb,xlib
Audio:
Device-1: AMD Navi 21/23 HDMI/DP Audio driver: snd_hda_intel v: kernel pcie:
gen: 4 speed: 16 GT/s lanes: 16 bus-ID: 09:00.1 chip-ID: 1002:ab28
class-ID: 0403
Device-2: AMD Starship/Matisse HD Audio vendor: Gigabyte
driver: snd_hda_intel v: kernel pcie: gen: 4 speed: 16 GT/s lanes: 16
bus-ID: 0b:00.4 chip-ID: 1022:1487 class-ID: 0403
Device-3: C-Media USB Audio Device
driver: hid-generic,snd-usb-audio,usbhid type: USB rev: 1.1 speed: 12 Mb/s
lanes: 1 mode: 1.1 bus-ID: 1-9:5 chip-ID: 0d8c:0012 class-ID: 0300
Device-4: Huawei HiCamera driver: snd-usb-audio,uvcvideo type: USB
rev: 2.0 speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 3-1.2.1:13
chip-ID: 12d1:4321 class-ID: 0102 serial: <filter>
API: ALSA v: k6.8.9-zen1-2-zen status: kernel-api tools: N/A
Server-1: PipeWire v: 1.0.6 status: n/a (root, process) with:
1: pipewire-pulse status: active 2: wireplumber status: active
3: pipewire-alsa type: plugin 4: pw-jack type: plugin
tools: pactl,pw-cat,pw-cli,wpctl
Network:
Device-1: Qualcomm Atheros QCA9377 802.11ac Wireless Network Adapter
vendor: AzureWave driver: ath10k_pci v: kernel pcie: gen: 1 speed: 2.5 GT/s
lanes: 1 bus-ID: 04:00.0 chip-ID: 168c:0042 class-ID: 0280
IF: wlp4s0 state: down mac: <filter>
Device-2: Realtek RTL8125 2.5GbE vendor: Gigabyte driver: r8169 v: kernel
pcie: gen: 2 speed: 5 GT/s lanes: 1 port: f000 bus-ID: 06:00.0
chip-ID: 10ec:8125 class-ID: 0200
IF: eno1 state: up speed: 1000 Mbps duplex: full mac: <filter>
Info: services: NetworkManager, systemd-timesyncd, wpa_supplicant
Bluetooth:
Device-1: IMC Networks driver: btusb v: 0.8 type: USB rev: 1.1
speed: 12 Mb/s lanes: 1 mode: 1.1 bus-ID: 1-6.3:4 chip-ID: 13d3:3501
class-ID: e001
Report: btmgmt ID: hci0 rfk-id: 0 state: up address: <filter> bt-v: 4.2
lmp-v: 8 status: discoverable: no pairing: no class-ID: 6c0104
Drives:
Local Storage: total: 1.83 TiB used: 1.04 TiB (56.7%)
ID-1: /dev/nvme0n1 maj-min: 259:0 vendor: Kingston model: SNV2S500G
size: 465.76 GiB block-size: physical: 512 B logical: 512 B speed: 63.2 Gb/s
lanes: 4 tech: SSD serial: <filter> fw-rev: ELFK0S.6 temp: 45.9 C
scheme: GPT
SMART: yes health: PASSED on: 79 hrs cycles: 549
read-units: 11,414,421 [5.84 TB] written-units: 6,086,446 [3.11 TB]
ID-2: /dev/nvme1n1 maj-min: 259:1 vendor: Crucial model: CT1000P3SSD8
size: 931.51 GiB block-size: physical: 512 B logical: 512 B speed: 31.6 Gb/s
lanes: 4 tech: SSD serial: <filter> fw-rev: P9CR30A temp: 44.9 C
scheme: GPT
SMART: yes health: PASSED on: 38d 16h cycles: 171
read-units: 15,045,190 [7.70 TB] written-units: 2,862,373 [1.46 TB]
ID-3: /dev/sda maj-min: 8:0 vendor: Samsung model: SSD 840 PRO Series
family: based SSDs size: 238.47 GiB block-size: physical: 512 B
logical: 512 B sata: 3.1 speed: 6.0 Gb/s tech: SSD serial: <filter>
fw-rev: 6B0Q temp: 26 C
SMART: yes state: enabled health: PASSED on: 4y 78d 8h cycles: 5096
written: 15.4 TiB
ID-4: /dev/sdb maj-min: 8:16 vendor: Crucial model: CT256MX100SSD1
family: Micron Client SSDs size: 238.47 GiB block-size: physical: 4096 B
logical: 512 B sata: 3.1 speed: 6.0 Gb/s tech: SSD serial: <filter>
fw-rev: MU02 temp: 29 C
SMART: yes state: enabled health: PASSED on: 1y 81d 14h cycles: 7360
written: 14.03 TiB Old-Age: UDMA CRC errors: 205
Partition:
ID-1: / raw-size: 431.07 GiB size: 431.07 GiB (100.00%)
used: 264.29 GiB (61.3%) fs: btrfs block-size: 4096 B dev: /dev/nvme0n1p2
maj-min: 259:3
ID-2: /boot/efi raw-size: 300 MiB size: 299.4 MiB (99.80%)
used: 584 KiB (0.2%) fs: vfat block-size: 512 B dev: /dev/nvme0n1p1
maj-min: 259:2
ID-3: /home raw-size: 431.07 GiB size: 431.07 GiB (100.00%)
used: 264.29 GiB (61.3%) fs: btrfs block-size: 4096 B dev: /dev/nvme0n1p2
maj-min: 259:3
ID-4: /var/log raw-size: 431.07 GiB size: 431.07 GiB (100.00%)
used: 264.29 GiB (61.3%) fs: btrfs block-size: 4096 B dev: /dev/nvme0n1p2
maj-min: 259:3
ID-5: /var/tmp raw-size: 431.07 GiB size: 431.07 GiB (100.00%)
used: 264.29 GiB (61.3%) fs: btrfs block-size: 4096 B dev: /dev/nvme0n1p2
maj-min: 259:3
Swap:
Kernel: swappiness: 133 (default 60) cache-pressure: 100 (default) zswap: no
ID-1: swap-1 type: zram size: 31.26 GiB used: 221.8 MiB (0.7%)
priority: 100 comp: zstd avail: lzo,lzo-rle,lz4,lz4hc,842 max-streams: 16
dev: /dev/zram0
ID-2: swap-2 type: partition size: 34.39 GiB used: 0 KiB (0.0%)
priority: -2 dev: /dev/nvme0n1p3 maj-min: 259:4
Sensors:
System Temperatures: cpu: 53.6 C mobo: 29.0 C gpu: amdgpu temp: 52.0 C
mem: 50.0 C
Fan Speeds (rpm): N/A gpu: amdgpu fan: 0
Info:
Memory: total: 32 GiB available: 31.26 GiB used: 7.18 GiB (23.0%)
Processes: 448 Power: uptime: 6h 26m states: freeze,mem,disk suspend: deep
avail: s2idle wakeups: 0 hibernate: platform avail: shutdown, reboot,
suspend, test_resume image: 12.48 GiB services: org_kde_powerdevil,
power-profiles-daemon, upowerd Init: systemd v: 255 default: graphical
tool: systemctl
Packages: pm: pacman pkgs: 1718 libs: 444 tools: octopi,pamac,paru
Compilers: gcc: 14.1.1 Shell: garuda-inxi (sudo) default: Zsh v: 5.9
running-in: konsole inxi: 3.3.34
Garuda (2.6.26-1):
System install date:     2023-05-03
Last full system update: 2024-05-15 ↻
Is partially upgraded:   No
Relevant software:       snapper NetworkManager dracut
Windows dual boot:       No/Undetected
Failed units:

Have you checked the kde forum? For such a “special” case you are more likely to find/get an answer there.

I have no idea if this will help, but some EDID bugs will be fixed in the upcoming Plasma 6.1.

1 Like

Which of the methods did you choose?

After having prepared your EDID, place it in a directory, e.g. called edid under /usr/lib/firmware/ and copy your binary into it.

Did you do this step?

To load it at boot, specify the following in the kernel command line:

drm.edid_firmware=edid/your_edid.bin

It looks like you did not set the kernel parameter, unless you printed your inxi before adding it.

Since kernel 3.15, to load an EDID after boot, you can use debugfs instead of a kernel command line parameter if the kernel is not in lockdown mode. This is very useful if you swap the monitors on a connector or just for testing. Once you have an EDID file as above, run:

# cat correct-edid.bin > /sys/kernel/debug/dri/0/HDMI-A-2/edid_override

Did you try this? At least to test if it works, if you are having trouble getting the other method working.

This parameter appears to be from the “this doesn’t really work” section:

Warning: The method described below is somehow incomplete because e.g. Xorg does not take into account the resolution specified, so users are encouraged to use the method described above. However, specifying resolution with video= command line may be useful in some scenarios.

I would just scrap that and focus on getting the EDID binary to be picked up by the kernel.

2 Likes