Fixing 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.
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!
I asked if this utility helped solve your problem, put the name of your hardware in the comments below so that others can find it. I personally used this on a Westinghouse L2410NM.
Archived Comments
Envision L26W761
Wed, 08/01/2012 - 01:40 — aceperry
Works good, got rid of the “overscan” area that went off the edges of the screen. Only problem was the fonts are too small and looked ugly under Ubuntu, so I set the resolution down to 1280x720. I know there are utilities out there to customize a stock Ubuntu Unity desktop, but they’re all haphazard and cover different things. So I’ll hold off on using one of them until the software settles down a bit. Thanks again for this utility.
LG L246WP Resounding Success!
Mon, 06/20/2011 - 01:44 — karl181
I’ve spent several hours (and a couple of dollars) trying to fix this problem under Arch Linux. While the newest Windows 7 drivers seem not to have this issue, the current Nvidia drivers do. I used the Nvidia driver to save the EDID and run your utility upon the file, and after setting up the xorg.conf.d/30-display.conf file to have load the custom EDID I was good to go.
Thanks!
P.S. Driver Version was 275.09.07
Success on a Sceptre 32"!
Wed, 09/08/2010 - 13:21 — stimoceiver
Thank you Tim!!!
This helped fix the display on a Sceptre X32BV-FullHD 32” 1080P television running Fedora 13.
I decided to use the –todvi command line switch. The TV works quite well on Radeon cards but overscans and looks terrible on Nvidia, whether windows or linux. I even bought one of those hardware EDID memories to sit between computer and monitor but still no luck. Thanks for the link to the nvidia.com forums describing how to do this on Windows, too.
Thanks again for providing this solution and writing some interesting articles too. That TCP over DNS concept is fascinating stuff. You are a 1st class hacker to conceive of tunnelling anything over DNS.
Best, stimoceiver
Thank you, thank you, thank
Thu, 03/03/2011 - 22:51 — hotspoons
Thank you, thank you, thank you! I’ve been struggling with this for over a month; my GeForce 8800 GTS always saw my 42” Sceptre HDTV as a DVI monitor, but after upgrading my PC to Sandy Bridge/i7 2600k, the 8800 started flaking out and randomly hard freezing X when it would switch power modes, likely due to too much drain on the power supply. I bought a new power supply and a 560Ti to replace the 8800, but low and behold I couldn’t do anything in my power to make Windows 7 or Ubuntu see the TV as a monitor, and everything came out all blurry, overscanned, and horrible. I even purchased a DVI doctor from monoprice tonight before reading this article. I am going to try to cancel my order first thing tomorrow.
After running your fix on Ubuntu, and the associated fix for Windows linked from the comments below, I am no longer guessing from memory where my applications, places, and system menus are in the overscan area, and everything looks like it should. I guess I was googling wrong to not come across this earlier; I kept looking for “force hdmi to dvi” and this thread never came across until I looked for “nvidia edid fix”, for which it is the number one hit.
Thanks again!