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!

Discussion for this utility has moved to the edid_disable_exts forum

Comments

EDID contain error in descriptor field

Hi!

Recently I've been getting this error "EDID contain error in descriptor field" three times each time my PC boots up, source is atimtag2, category DAL, ID 43037.
The picture on the monitor is OK. Can anybody help me figure out this problem?

Awesome work!

Dude,

You rock. Thanks for the great work. I'm putting together a used pile of computer stuff to quickly replace a desktop that was dying, and had major probs with a used nvidia card and a 26" tv. The display was going off the edge of the screen and I couldn't fix it until I came upon your site. Your program worked like a charm. Of course, everything looked like hell at the native resolution of 1920x1080 because the fonts were too small and smudged at that resolution. So I used the nvidia tool to set the resolution to 1280x720. Everything is better and my eyes thank you.

BTW, under windows, I had the same kind of problem, but the nvidia tools had a feature that allowed you to resize the display for the screen. The fonts are also slightly better under windows 7. But developing is much easier under linux than windows. So there. :-)

Thank you again for this article and all the work you put into it.

hello, please help me i;m

hello, please help me i;m going nuts.... how do i copy the file to /etc/X11/ ? where is the folder loccation for copying the edid file?

.......

_,I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well. In fact your creative writing abilities has inspired me to start my own blog now.

fix on SAMSUNG LED TV running on windows7 (radeon gfx card)?

Hi,
I am having a samsung 26" led tv with native resolution of 1366x768 running on radeon 4200. Is the fix u mentioned above possible on my machine? I am running windows7 ultimate(x64). I am having this weird text distortion problem on increasing resolution to 1920x1080.
Could you please suggest any fix for this?
Thanks in advance

Native Resolution

You will always get the best picture when you run at the native resolution of the tv/monitor. You cannot run a 720p device at 1080p, it forces down sampling somewhere. If it looks really bad then its probably the TV downsampling it poorly.

Unfortunately this is a different problem than the intended purpose of this tool and no amount of EDID fiddling will fix it.

Help

Hello, i'm going nuts with this EDID ...please help

i found a tutorial on how to override EDID, and applyed it the problem is as follows

i recently changed OS, to windows 7 from XP
in windows xp my CRT Philips 107E supports 1024x768@100hz, in win 7 max hz is 85, so i used pheonix to change these things and i get the following error

80k/90hz frequency out of range when i try to select 1024x768@100hz

when in pheonix under block 2, it asked me to put a PXL CLC HZ between 0 and ? and its default value dissapeared , i left it 0 now knowing it..

the thing is . i think pheonix edited my EDID in my monitor, because when i swith to different PC with different OS (xp in this case) i get the same error, where previously it worked at 100hz...

please help me, i'm going really wonkers

Phoenix EDID

The phoenix editor is super outdated and as far as I know cannot write to the EDID rom. You probably should only use it for reading/examining EDID.

Thank you, thank you, thank

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!

Same issue

Hi mate im on the same lines as you were, im currently running a GTX560 on the latest 296.10 drivers on win 7 x64 using a sonic 42" HDTV and im getting major overscan (which i can correct using the just scan feature) but im also getting unclear/pixelated text and crappy colours, i tried the windows fix in the comments how ever i couldnt get it to work as there wasnt the correct area to input the data in the inf file of my driver as stated in the fix, mate what driver were you using and how did you fix this as, im going mental???

Alteran

Awesome

I'm thrilled that this little utility is still helping people. Would you be so kind as to post the exact model number of the Sceptre HDTV?

Also I'd like to mention that I believe there is now a better way of doing it in Windows. It involves "creating" a video driver for your monitor so you don't have to update your registry every time a new video driver comes out. I havn't done this myself, but I just want you to know that this may be easier in the long run.

Still not working

I did try edid_disable_exts, but without success. I have following in xorg.conf:

Section "Device"
Identifier "Device0"
Driver "nvidia"
Option "CustomEDID" "DFP-1:/etc/X11/p2370hd-m.edid"
VendorName "NVIDIA Corporation"
BoardName "GeForce G210"
BusID "PCI:1:0:0"
Screen 0
EndSection

File does exists and I did not get any errors.

Any ides why it is not working?

Not really

But I've had some success by changing from DFP-1 to DFP-0. (Make sure to move the dvi cable too maybe)

Any Solution to keep HDMI-audio extension?

Hi,thanks for your small tool - it helped. But my problem is that this solution wipes the whole extension block - but i want to use the hdmi audio :(So, do you know a solution fixing the identification of the device without deleting the whole extension block, maybe change one flag in the edid? (disable the overscan/underscan feature or something like this?)Here's all the Information of my TV(LG 42LH3010) from switchresx, including the edid in hex and in textmode:http://www.mediafire.com/file/mimzmz1lh2m/LG TV 

Tough Problem

hmm that sucks.

the audio information is included in the extension block, so yeah that is a problem. i might dabble with it but dont expect anything from me, particularly beacause i have no way to test it.

Much Appreciated!

I have been tearing my hair out ever since I updated my myth box from Fedora 8 to Fedora 10.  Somewhere along the way, nvidia started using edid to scan my TV and it was setting up 1280x720.  The max resolution for my TV when connected to a PC should only have been 1024x768.  I followed your instructions here and got a perfect picture without the overscan.

Thanks!

Thanks!

You, sir, are brilliant. :) my monitor works lovely now.

Help me please..

I have a Samsung LN-S4092D and i'm trying to get resolution 1920x1080 without the overscan on my Debian Lenny amd64! I don't understand your directions, especially the part about running your utility....Help me please, i've saved the edid.bin file in my Misc folder. How do i use your utility to fix the overscan problem?

My assumption

I assume you are having difficulty compiling the program. I have built a static version of the program, and have included it here.

You need to do something like:

wget http://analogbit.com/sites/default/files/edid_disable_exts_amd64_static.tgz
tar xzvf edid_disable_exts_amd64_static.tgz
./edid_disable_exts_amd64_static /path/to/your/edid.input /path/to/your/edid.output

Overscan solution...

I did as u suggested, let me illustrate...

el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid* /home/el1ip3s01d/Desktop/Misc/
ERROR: Input EDID does not appear to be valid.

Here it is again!!!

el1ip3s01d@Iehovah-007:~/Desktop$ sudo ./edid_* edid.bin Samsung.dat
sudo: ./edid_*: command not found
My God, what am i doing wrong???

el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ cd edid_*
bash: cd: edid_disable_exts_amd64_static: Not a directory
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid_* /home/el1p3s01d/Desktop/edid.bin /home/el1ip3s01d/Desktop/Misc/Samsung.dat
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./static* /home/el1p3s01d/Desktop/edid.bin /home/el1ip3s01d/Desktop/Misc/Samsung.dat
sudo: ./static*: command not found
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ ./edid_* /home/el1p3s01d/Desktop/edid.bin /home/el1ip3s01d/Desktop/Misc/Samsung.dat
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ ./edid_* [/home/el1p3s01d/Desktop/edid.bin] [/home/el1ip3s01d/Desktop/Misc/Samsung.da]t
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid_* [/home/el1p3s01d/Desktop/edid.bin] [/home/el1ip3s01d/Desktop/Misc/Samsung.da]t
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid_* [edid.bin] [Samsung.dat]
Usage: ./edid_disable_exts_amd64_static [input_file] [output_file]

Look, at what happended now?

el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ ls
AdobeReader_enu-8.1.3-1.i386.deb           compizconfig-python-0.7.6.tar.gz                      glib-2.7.1.tar.gz
atk-1.0.0.tar.gz                           compiz-fusion-plugins-extra-0.7.6-cmake.tar.gz        gspcav1-20071224.tar.gz
atk_1.24.0-1_win32.zip                     compiz-fusion-plugins-extra-0.7.6.tar.gz              gtk+-2.8.0.tar.gz
atk-1.24.0.tar.bz2                         compiz-fusion-plugins-main-0.7.6-cmake.tar.gz         index.pdf
atk-dev_1.24.0-1_win32.zip                 compiz-fusion-plugins-main-0.7.6.tar.gz               lexmark
cairo-java-1.0.1.tar.gz                    compiz-fusion-plugins-unsupported-0.7.6-cmake.tar.gz  libcompizconfig-0.7.6.tar.gz
ccsm-0.7.6.tar.gz                          compiz-fusion-plugins-unsupported-0.7.6.tar.gz        NVIDIA-Linux-x86_64-180.22-pkg2.run
CJLZ35LE-CUPS-2.0-1.TAR.GZ                 compiz-switch-0.4.0~source.tar.gz                     pango-1.0.0.tar.gz
compiz-0.7.6.tar.gz                        diveintopython-pdf-5.4.zip                            perl-5.10.0
compiz-check                               edid_disable_exts_amd64_static                        perl-5.10.0.tar.gz
compizconfig-backend-gconf-0.7.6.tar.gz    edid_disable_exts_amd64_static.tgz                    simple-ccsm-0.7.6.tar.gz
compizconfig-backend-kconfig-0.7.6.tar.gz  emerald-0.7.6.tar.gz                                  uvcvideo-r104.tar.gz
el1ip3s01d@Iehovah-007:~/Desktop/Downloads$ sudo ./edid_disable_exts_amd64_static [/home/el1ip3s01d/Desktop/edid.bin] [/home/el1ip3s01d/Desktop/Misc/Samsung.dat]
ERROR: Input file "[/home/el1ip3s01d/Desktop/edid.bin]" could not be opened.

You came close

You almost got it.

When you said "My god what am i doing wrong?" you were in the wrong directory. You have to take note of which directory you are currently in and what directory the file is in.

Also your later attempts would have worked if you didnt put brackets around the file names.  The file names do not need brackets.

 

Hello again...

where did i go wrong?

Section "Device"
Identifier     "Device0"
Driver         "nvidia"
VendorName     "NVIDIA Corporation"
Option         "CustomEDID"  "DFP-1:/etc/X11/LN-S4092D-modified.edid"
EndSection

This is confusing?

I'll explain, what would my output be?

./edid_disable_exts_amd64_static /path/to/your/edid.input /path/to/your/edid.output

Tim...

What would my output be? Do you mean that i have to create a output file? And if so, how would i do that?

Output

The program only writes to the screen if there is an error, if everything is successful there should be no message.

The 1st parameter is the EDID input file, the 2nd parameter is the EDID output file. The output file is created by the program.

Will this work with Windows Vista Drivers?

I just acquired 3 Westinghouse L2610NM monitors (1920x1200 native) which I seek to run on nVIDIA 8800 GPUs with Windows Vista.  The EDID in this model monitor appears to report the monitor as a 1080p HDTV.  The nVIDIA Forceware shows HDTV, and everything works well at 1920x1080, except for the considerable 120 lines of overscan distortion.  At 1920x1200 the text is choppy, motly, barely readable hieroglyphics.  It appears that your fix applies to Linux.  Do you think it will work with Vista?

edid

EDID fix for L2610NM in Windows

Yes and no.

The same method works, but you must do it differently. I found a method that I tested and it does work.

http://forums.nvidia.com/index.php?showtopic=58483&st=0&p=330319&#entry330319

Try that out.

Resolution Problem

Hi Guys,

I am using HP ZR30w LCD Monitor at geforce 8800gt (OS: Windows Vista.)

My Nvidia Control shows all resolution upto 2550x1600px but when I'll change resolution upto 1280x800px my screen goes blank and came back after 15 seconds on same resolution.

I've updated all drivers from nvidia and hp but it didn't work.

My screen connected through Dvi-D DualLink to Dvi-D DualLink

Please help me guys

Specially Brian I've seen he solved many problems.

Thanks in advance!