NVIDIA GeForce4 420 Go on Ubuntu 8.04 (Hardy Heron)

Preamble

This is a guide to installing NVIDIA drivers for a GeForce4 420 Go graphics card on Ubuntu. This guide was tested on a Toshiba Satellite Pro 2100 running Ubuntu 8.04 but should work for other laptops with GeForce4 420 Go graphics cards and other versions of Ubuntu.

Introduction

On a laptop with a GeForce4 420 Go, Ubuntu will recognise there is an NVIDIA card and offer to install the restricted driver. Installing this driver will cause two problems.

  1. On rebooting the screen will be blank
  2. This is because the driver is causing the graphics card to output on the VGA port rather than to the laptop screen.

  3. The correct resolution is not available once driver is working.
  4. This is because the EDID data being supplied to the driver is not correct.

Requirements

  • laptop with a GeForce4 420 Go graphics card.
  • Ubuntu (assumed to be a clean install)
  • the correct maximum resolution of your display (e.g. 1024×768)

Installation

The first stage is to check the correct repositories are enabled.

  • Go to: “System -> Administration -> Software Sources”
  • Under the “Ubuntu Software” tab ensure the first three boxes are ticked (main, universe and restricted).

Next the restricted NVIDIA driver must be enabled.

  • Go to: “System -> Administration -> Hardware Drivers”
  • Tick the box next to “NVIDIA accelerated graphics driver”.
  • Close the window and confirm the changes.

You should be informed that a restart of the computer is required before the changes will take effect. Do this now. Do not be alarmed if the computer has a blank screen after the restart; this is expected.

Now we will change the “xorg.conf” file to tell the driver to output to the laptop screen rather than the VGA port.

  • Press “Ctrl + Alt + F1″ to open a terminal.
  • Login
  • As root, open “/etc/X11/xorg.conf” for editing.
    sudo vim /etc/X11/xorg.conf
    (you can use the editor you are most comfortable with in place of “vim” e.g. nano)
  • Find the “Device” section (look for the line Section "Device") and insert as the last line of that section (before the EndSection)
    Option "UseDisplayDevice" "DFP-0"
  • Now save and close the file.
  • Restart the X server by typing
  • $ sudo /etc/init.d/gdm restart

You should now see the login window but it will likely be at the wrong resolution. First check that the desired resolution really is not available. For example on the Toshiba Laptop the screen resolution should be 1024×768.

  • Go to: “System -> Preferences -> Screen Resolution” and see if the correct resolution is available.

If the correct resolution is available then select it and everything should now be working. If the correct resolution is not available then you have encountered the EDID problem. This requires some additional packages to fix. First we must install “nvidia-settings, ghex and read-edid”

  • Open a terminal “Applications -> Accessories -> Terminal”
  • Run:
  • $ sudo apt-get install nvidia-settings ghex read-edid

We now need to obtain the EDID data.

  • Go to: “System -> Administration -> NVIDIA X Server Setting”
  • From the left hand list choose: “DFP-0 – (Nvidia Default Flat Panel)”
  • Click the “Aquire EDID” button.
  • Save “edid.bin” to the desktop. (click “Desktop” then click “OK”)
  • Close “NVIDIA X Server Settings” window.

Now we need to check the EDID data.

  • In the terminal change directory to the Desktop (or where the EDID data was saved to).
  • $ cd ~/Desktop

  • Check the resolution mode in the EDID data.
  • $ parse-edid edid.bin | grep "Mode "

The output should look something like this:
parse-edid: parse-edid version 1.4.1
parse-edid: EDID checksum passed.
Mode "969x768" # vfreq 60.004Hz, hfreq 48.363kHz

Here you can see that the EDID data has an incorrect resolution of “969×768″. The resolution is stored in the EDID file as a hexadecimal value. We need to correct the value. To do this we have to edit “ebid.bin” with a hexadecimal editor. We will keep the terminal window open while we do this.

  • Go to: “Applications  -> Programming -> Hex Editor”
  • Click: “File -> Open -> Desktop -> edid.bin -> Open”

You should now be looking at the “ebid.bin” in hexadecimal format. The data is represented as pairs of hexadecimal characters. Each pair correspodes to one byte. Notice that there are 17 bytes in a row. The bytes are indexed from zero so the last byte on the first line is the sixteenth byte.

We need to change the horizontal resolution. This is slightly confusingly split across two bytes. When converted to a hexadecimal value,  the first digit of the value is stored in the first charater of the 58th byte and the last two digits of the value are stored in the 56th byte. In our example the resolution in the EDID file is 969. We can use the calculator to convert this to hexadecimal.

  • Go to:  “Applications -> Accessories -> Calculator -> View -> Scientific”
  • Click “Dec” to put the calculator into decimal mode.
  • Then enter the number “969″
  • Click “Hex” to convert the number to hexadecimal.

You should get the answer 3C9 (hex). The 56th and 58th bytes are show on the forth line of the hex editor. This is the forth line from my file with the releveant characters in bold:

01 01 01 64 19 C9 77 31 00 26 30 4F 88 36 00 42 FF

Notice how the value is written with the last two digits then the first digit.

In my example the desired resolution is 1024. Converted to hexadecimal this is 400 (hex). Hence the 56th byte of my EDID file should be “00″ and the first character of the 58th byte should be “4″. The new line in the file is:

01 01 01 64 19 00 77 41 00 26 30 4F 88 36 00 42 FF

Save the file and re-run parse-edid. (You can go to the terminal and press the up arrow and enter). The output should now look like this:
parse-edid: parse-edid version 1.4.1
parse-edid: EDID checksum failed - data is corrupt. Continuing anyway.
Mode "1024x768" # vfreq 57.645Hz, hfreq 46.462kHz

Don’t worry about the fact the checksum failed. This is not important. We now need to copy the “edid.bin” in to the X configuration directory and set it to override the real EDID data.

  • Copy the “edid.bin” to /etc/X11/
  • $ sudo cp edid.bin /etc/X11/

  • Edit “xorg.conf” to override EDID.
  • $ vim /etc/X11/xorg.conf

  • In the “Screen” section, insert the line:
  • Option "CustomEDID" "DFP-0:/etc/X11/edid.bin"

  • Save the file and restart the computer.

The computer should now start at the correct resolution with the NVIDIA driver enabled.

References

The following references were used when compiling this guide.

22 Responses to “NVIDIA GeForce4 420 Go on Ubuntu 8.04 (Hardy Heron)”

  1. fabb says:

    Wonderful, thank you! I remember doing a similar thing some years ago with RedHat Linux 7.3 to get rid of this black devil’s stripe. But I didn’t need to hex-edid then. So maybe there’s an even easier solution?

    One concerning thing: everything works fine when I follow your steps. But at “Screen Resolution” settings, I can choose between 50Hz and 51Hz??? And both work fine… Should be 60Hz… any ideas?

  2. fabb says:

    I found the page. It’s a bit outdated, but maybe it still works.
    http://www.thorstenhaas.de/toshiba2410/
    Just some additional lines in XF86Config (which should be xorg.conf now).

  3. Daniel says:

    I admit that the method presented here is a bit of a hack. If you manage to work out a simpler solution then thats great. Please post about how you found your solution.

    If I’m honest I had not though about the refresh rate. After checking my laptop, I found that the options I had were 50Hz and 54Hz. Mine was on 50 so I upped it to 54. You seem to think that it should be on 60Hz though. Personally I am not too concerned about fixing this (if indeed it is possible) as the laptop works. My goal was to find the simplest solution that made the laptop usable, so I’m not going to delve to far in to solving this right now. “If it ain’t broke don’t fix it” as they say., however, if you do find a solution though please say.

    I’m very glad this tutorial was of some use to you.

  4. Elisabeth says:

    Thank you ever so much for this HowTo, i’ve been trying to get my old toshiba to show me 3D goodness for 1 year now, but never managed!! You guide worked flawless, plus i learned something new…. :-*

  5. I guess the easiest option would be to download a ready-made edid.bin, or simply download one from somewhere. I found one a while back, but the beauty of the guide is that you’re not dependent on google :)

  6. Andrey says:

    Hi Daniel! Thanks so much for the how-to, it worked great! Funny thing though, the native resolution of my Toshiba was 1600*1200, and then it got reduced to… I don’t know… 800*600 or something. Well, that was to be expected. But when I parsed the EDID before tweaking it with the hex editor it showed a resolution of 1588*1200. Apparently, it was the reason why the driver limited me to 800*600: it had a problem with 1588 in resolution settings. After I reset the edid.bin to 1600*1200 everything worked just fine.

    Thanks again!

  7. Abe says:

    Yeah, works fine on my TE2100 too. I already gave it up fixing the problem with SuSE 11.0 but now I’m back in the game ;)

  8. Sadnem says:

    yeah it works very well with ubuntu,kubuntu,and linux mint thanks men!

  9. Struan Robertson says:

    Thanks a bunch for this, it sorted things out beautifully for myToshiba Satellite GeForce 440 Go setup.

  10. Jason says:

    You qualify for legendary status in my universe. I’ve been going in circles researching and reinstalling for months. I love my TE2100 but didn’t want to go back to WinXP just for dual display. Kudos to you man.

  11. Pablo says:

    I’m jumping of happiness!!

    As many of the people here, I struggled for a long time with the nvidia driver in Linux (first Debian and now Ubuntu). My laptop has a non standard display size (1400×1050). After following your steps, I found out the the EDID info X was getting out of my display was 1372×1050. As a result I had a annoying black bar at the right side of my screen.

    Now is perfect, the fonts looks amazing! Thanks a lot.

    (Toshiba Satellite, GeForce4 440 Go, Ubuntu 8.10)

  12. Daren says:

    Hi
    I was just about to give up on Linux until I found this site. Brilliant!
    Well laid out and easy to follow.

    Many thanks

    Daren

  13. oisa says:

    thankyou so much, drove me crazy for a year. worrked great on ubuntu 9.04.

    thankyou so much. seriously.

  14. Rob says:

    You are my hero!!! Ditto that on 904. Thank you SO much for your truly excellent instructions.

    LOL. feeling exactly the same way olsa and many others do. Only been driving me crazy for the evening, but it *is* 3am. Now I can sleep.

    seriously. :o D

    peace!

  15. Blake says:

    I have the same problem with my Toshiba Satellite TE2100, however the steps above didn’t fix the problem. If i use the custom edid, the screen goes black and flickers, indicating what i think is the wrong refresh rate. I think i need to alter the EDID even more for it to go back to normal… extremely frustrating, have reported the bug on launchpad.net but since theyre not the nvidia developers i ought to take it to nvidia instead.

  16. Blake says:

    I’ve managed to get it to work now, I used another person’s hacked EDID which had the correct values (whatever they were, as i know i did the 1024×768 properly).

    I uploaded it to launchpad.net:

    https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-96/+bug/348905

  17. Michael says:

    Dude, thanks. I tried searching the ends of the Internet for an answer to that with my Toshiba S-Pro. I assume everyone is stuck with the v96 driver on Ubuntu?

  18. vera says:

    just wanted to say thanks for the info now to start all this is what scares me im not a tech just a common user self taught. hopefully i can do this without wiping out my whole system. i will let u know if it works for me as well when i get up the nerve

  19. Neil says:

    Thank you SO much. This is well hardcore but the way you explained it I could manage and now my Toshiba TE2100 works with Ubuntu 9.10

  20. Joachim says:

    Many thanks for these information. Now I’m able to use the right NVIDIA-driver with the whole function; my system: Ubuntu 9.10
    But one little problem: after each restart the logon-screen shows the resolution 1024×768; after the logon the system change to 800×600. In the NVIDIA-settings I’m able to choose and apply 1024×768 again. How can I save the resolution in the XORG.CONF?
    Thanks for any help

  21. Tank you so much!!! I’m from Germany and I started with this (http://www.r3uk.com/index.php/home/36-useful-information/14-geforce4-420-go-graphics-card-installation-in-ubuntu-710-gutsy) tutorial and when I had problems with the hex editor i found yours and my problem was solved!!!!
    This tutorial is great!

  22. I just tried this on a fresh install of Ubuntu 10.04 LTS (Lucid Lynx) from the ISO “ubuntu-10.04.3-desktop-i386.iso” and it worked great!
    I couldn’t use Ghex at all, everytime I clicked on the window, it would move around as if trying to fit into the desktop while the resolution was 969×768. I ended up copying the file onto a USB stick and editing the file on my Windows workstation.
    Besides that, this important thing is, IT WORKS!

    Thanks a lot.

Leave a Reply