EDID

Extended Display Identification Data 1)

Quelle2)

Fixing Ugly DVI/HDMI Displays due to EDID bugs on nVidia drivers

The good news: nVidia finally released their much awaited 173.14.09 video driver for linux. This officially supports the 2.6.25 kernel and supports the newest line of GeForce graphics cards.

The bad news: When you install the driver your HDMI/DVI digital flatpanel display looks horrible; the text looks jagged or blurred or oversharpened. There are halos and ringing anywhere there is contrast. The colors looked washed out and over bright. However, when you use the D-SUB (VGA) plug, everything works fine.

What is going on?

What is happening: Your monitor is providing EDID information to the driver that identifies that it is actually a TV. EDID stands for „extended display identification data“ its a low level standard originally devised in 1994 that is basically a set a flags that tells the computer what the monitors capabilities are. The nVidia drivers see that you have a TV and decide to modify the signal in an attempt to make the picture look 'better' it also sometimes forces the output resolution to the standard TV resolutions (1080p/i, 720p, 480p/i).

How to fix it: You need to provide the nVidia driver with a new set of EDID flags. Specifically you need to change a single field so that the EDID does not report any extensions. Don't worry no soldering iron or hardware mods are required.

First, obtain a copy of your monitor's current EDID information. This can be done with the read-edid utility. However, it is apparently limited to x86-32. Since our network only has x86-64 systems, I had to resort to plugging the monitor into a Windows box and using Phoenix EDID Designer. Phoenix EDID Designer is both an EDID editor and a reader. You want to save the raw binary EDID information.

Update: You can use nvidia-settings to get your EDID info. Run nvidia-settings, click on DFP-0, then click „Acquire EDID…“

Now that you have your EDID information, you need to clear the extensions flag and update the checksum. If you are using the Phoenix EDID Designer, you can just change the field 'Number of extensions' in the General tab to 0. If you used read-edid or nvidia-settings to get your EDID, then you can use edid_disable_exts. It is a small utility that I wrote that does the same thing. See the page dedicated to it for more information.

Once you've created a modified EDID file, copy it to /etc/X11/something.edid

Finally, we have to tell the nVidia driver to use this EDID file instead of the one the monitor sends it. Open /etc/X11/xorg.conf.

Section "Device"
Identifier "nVidia"
Driver "nvidia"
Option "CustomEDID" "DFP-0:/etc/X11/L2410NM-modified.edid"
EndSection

Here we are using a Westinghouse L2410NM monitor, which has the EDID problems. We override the EDID with the CustomEDID option provided by the nVidia driver.

Finally, text and pictures look good again!