Fix Broken EDID Guide
This guide outlines replacement of the broken EDID metadata file for the device in Linux Operating Systems.
• • •
Last-Modified: Sunday, April 11, 2021
- BenQ G2000W case
- EDID From scratch
- EDID Editing
- See also
If your Linux Operating System can't configure expected display resolution one of the issues is probably corrupted EDID metadata file that your system fetch from display controller board every time it's connected.
Diagnostics may show EDID doesn't match specs of the display devices specified by the manufacturer. That's exactly the issue we are going to solve here.
This guide assumes you are working under Linux Operating System. The chances are that there is a editor for your EDID metadata so you can try to find one and edit your EDID file. (note that the EDID file format is a crossplatform one).
$ sudo apt-get install read-edid
get-edid command to get actual information about EDID monitor output:
$ sudo get-edid -b XYZ | edid-decode
XYZ is digit specifying bus name e.g. 0,1....
BenQ G2000W case
In this case we have the BenQ G2000W monitor with broken EDID metadata. Step by step we will fix its display resolution modes.
In order to spot wrong EDID you have to match original specs of your display with
get-edid command output. If your resolution listings don't match, then probably you have incorrect EDID.
$ edid-decode < /sys/class/drm/card0-DVI-D-1/edid`
... 720x400 70.082 Hz 9:5 31.467 kHz 28.320 MHz (IBM) 640x480 59.940 Hz 4:3 31.469 kHz 25.175 MHz (DMT) 640x480 75.000 Hz 4:3 37.500 kHz 31.500 MHz (DMT) .. 1280x1024 60.020 Hz 5:4 63.981 kHz 108.000 MHz (DMT) 1280x960 60.000 Hz 4:3 60.000 kHz 108.000 MHz (DMT) ...
As you can see, the max resolution is capped at
1280x1024 value meanwhile according to the BenQ G2000W specs it can up to
|Native Resolution||1680 x 1050|
|Horizontal Refresh Rate||76 kHz|
|Video Bandwidth||135 MHz|
|Vertical Refresh Rate||83 Hz|
|Max V-Sync Rate||83 Hz|
|Max H-Sync Rate||76 KHz|
That's where we have problem.
You can also checkout your own EDID files outputs by the following command (star char is a wildcard):
$ edid-decode < /sys/class/drm/*/edid
So what we do now? We need a Correct EDID binary file. We have options how to get it:
Find Correct EDID binary
- Follow to to the github repo: https://github.com/linuxhw/EDID
- Find an appropriate monitor by using model name by checking out
- Once found, take an
IDfield value (the last one to the right) and copy it
- Find respective EDID file by matching the
IDagainst file name (
ctrl + f) in the
digital/sub-folders of the repo above
- Once found generate binary file from the hexadecimal strings which may look like the following (excerpt):
00 ff ff ff ff ff ff 00 09 d1 07 78 45 54 00 00\ ....
HEX string to EDID binary
The following bash script demonstrates how to produce binary file (you can replace
HEXSTR= value with your own hex string for instance):
# Don't forget to place `\` after EOLs HEXSTR="\ 00 ff ff ff ff ff ff 00 09 d1 07 78 45 54 00 00\ 03 12 01 03 a0 2b 1b 78 22 c4 f6 a3 57 4a 9c 23\ 11 4f 54 a5 6b 80 71 00 81 00 00 00 00 00 81 80\ 81 40 00 00 01 01 02 3a 80 18 71 38 2d 40 58 2c\ 45 00 a0 5a 00 00 00 1e 00 00 00 ff 00 52 31 38\ 31 32 34 34 31 53 4c 30 0a 20 00 00 00 fd 00 37\ 4c 1f 53 0f 00 0a 20 20 20 20 20 20 00 00 00 fc\ 00 42 65 6e 51 20 47 32 30 30 30 57 0a 0a 00 89"; echo -en $(echo "$HEXSTR" | sed -E 's/([0-9abcdef][0-9abcdef])[[:space:]]?/\\x\1/g') > BENQ-GW2000-BNQ7807-09AFF.edid.bin
Now you can check the output:
$ edid-decode BENQ-GW2000-BNQ7807-09AFF.edid.bin
Force EDID for display device
/lib/firmware/edid folder and copy the working EDID:
$ sudo mkdir /lib/firmware/edid $ sudo cp ./BENQ-GW2000-BNQ7807-09AFF.edid.bin
Now we have to find at which port our display gets output from the Vidoe Card:
$ xrandr | grep connected VGA-0 connected 1920+1080+0 ... DVI-D-0 connected 1280x1024+0+0 ... HDMI-0 connected primary 1920x1080+1280+0 ...
First words on every line is the Output ID.
In order to force Operating System X-systme display manager (like SDDM) system and Video Card Drivers to use our newly obtained edid file we can use the following features:
- X System Xorg.conf - The preffered way.
- GNU Linux Kernel Parameters - The hard way. Cnfiguration is dependent on kind of bootloader (GRUB, system-boot, Syslinux, LILO etc) you use.
This is simple way. It can be easily reused. We will follow the same steps as in the xorg.conf guide. Add the following options to the
"Device" section of the
/etc/X11/xorg.conf.d/20-vendor.conf file, so it looks like this (ensure right Output ID and vendor name):
Section "Device" Identifier "Device0" # Your vendor may be different! Driver "nvidia" VendorName "NVIDIA Corporation" Option "ConnectedMonitor" "DVI-D-0" Option "CustomEDID" "DVI-D-0:/lib/firmware/edid/BENQ-GW2000-BNQ7807-09AFF.edid.bin" Option "IgnoreEDID" "false" Option "UseEDID" "true" EndSection
For multiple displays you may want to specify a comma-separated list of connected monitors in the
"ConnectedMonitor" option, like so:
Option "ConnectedMonitor" "DVI-D-0, HDMI-0, VGA-0"
NOTE: If you don't have
/etc/X11/xorg.conffile, you can generate it by using tools such as
Via Kernel Parameters
This is hard way. It would be hard to reuse from system to system. Just set up the following kernel parameters in your favorite boot-loader:
Follow kernel mode setting to learn more about kernel parameter settings.
EDID from scratch
- It's certainly possible to generate EDID file from scratch on Linux systems but for now we won't follow this Venue. You may still google it though. You can find examples of generated EDID here: https://github.com/akatrevorjay/edid-generator
As of 2021 you can use EDID-spefic editors.
- Debian - Repair EDID
- EDID Repository - A repo dedicated to decoded EDIDs from various digital and analog monitors collected by Linux users at https://linux-hardware.org.
- Forcing modes and EDID
- EDID — The Linux Kernel documentation
- Nvidia: Configuring Multiple Display Devices on One X Screen
- Nvidia: Appendix B. X Config Options
- Hot-patching a buggy TV's EDID under Linux
- Why do xrandr errors “BadMatch”, “BadName”, “Gamma Failed” happen?
Copyright (C) 2021- Alex A. Davronov firstname.lastname@example.org