Saturday, April 25, 2009

NVidia driver not working after upgrading to Ubuntu 9.04

Ubuntu 9.04 has been released this week and I upgraded my machines to the latest version (download it here).

If you are using dual boot (GRUB) , NVidia drivers, and answered yes to keep your existing version of menu.lst, then you might have the same problem as me.

After I upgraded to Ubuntu 9.04, I get the following error message when restarting the machine:
Ubuntu is running in low-graphics mode

The following error was encountered. You may need
to update your configuration to solve this.

(EE) NVIDIA(0): Failed to load the NVIDIA kernel module!
(EE) NVIDIA(0): *** Aborting ***
(EE) Screen(s) found, but none have a usable configuration.
Although I have restricted drivers enabled, I tried to activate the NVidia driver on System/Administration/Hardware Drivers and nothing happens.



If I open a terminal window and run the following commands below, and then try to reactivate again, you will be able to see some error message displayed on the terminal window:
sudo killall jockey-backend
sudo /usr/share/jockey/jockey-backend --debug -l /tmp/jockey.log
In my case, I got the following error message:
FATAL: Module nvidia not found.
The NVidia module cannot be found because I am running an old version of the Kernel (remember that I said to keep my existing menu.lst version!!) and the NVidia driver is compiled to the latest version.

To check the kernel version I am running I just use the command "uname -r", and it returns 2.6.27-11-generic, but Ubuntu 9.07 comes with 2.6.28-11. So, I need to manually update my menu.lst file to be able to boot to the latest kernel version.

Warning: Only update your menu.lst file if you have done this before. This is not recommended for users that are not experienced with changing menu.lst file. If you are not an experienced Linux user, it is better to not proceed with these changes.


First, run the following commands to see that you have vmlinuz-2.6.28-11-generic:
ls /boot/*2.6.28*
You should be able to see vmlinuz-2.6.28-11-generic and initrd.img-2.6.28-11-generic. Then, backup and edit your menu.lst file:
sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.bak
sudo gedit /boot/grub/menu.lst
The safest way is to duplicate your first boot menu entry, then change only this new entry to use the latest kernel version. In my case, I changed it from 2.6.27-11 to 2.6.28-11. I also changed the title to 9.04. This way you still have your previous entries in case you have any problems rebooting and need to restore your previous menu.lst from the backup copy (menu.lst.bak).

Next time you reboot your machine, you can select the first boot entry and then you will see the following:
* Running DKMS auto installation service for kernel
* nvidia (173.14.16)...
And then your Ubuntu will be loaded with the proper video resolution!!

If you have any problems rebooting your machine with the new entry, you can reboot it using an existing entry (or Ubuntu CD) and revert the changes you made by restoring the backup copy: menu.lst.bak (manually created) or menu.lst~ (created by gedit).

5 comments:

jsacks said...

I got exactly the same problem and followed your instructions which were quite clear.

But no when starting up it says the following:

usplash: Setting mode 1280x1024 failed
usplace: Setting mode 1152x864 failed
usplash: Using mode 1024x768
Gave up waiting for root device. Common problems:
-Boot args (cat /proc/cmdline)
--check rootdelay= (did the system wait long enough?)
--Check root= (did the system wait for the right device?)
-Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/disk/by-uuid/2936ao27-09cb-4555bbf1-50274b66feb1 does not exist. Dropping to a shell!

BusyBox v1.10.2 (Ubuntu 1:1.10.2-2ubuntu7) built-in shell (ash)
Enter 'help for a list of built-in commands.



Now it won't even boot and I have no idea what to do. think u can help?

chmac said...

For any readers following these instructions, do *not* copy this blindly into your menu.lst file.

The uuid entries are unique to each physical computer, they should not be copied. You can keep whatever is in your existing menu.lst file.

I'm not 100% sure of how to use the information in this post to restore your machine, I think there is probably an easier way to set grub to use the same kernel. However, a friend has just copied the uuid and now cannot boot his machine, so I'd don't do that. :-)

Here endeth the warning!

Luis Rocha said...

@jsacks

I think you replaced your boot entry with mine, but you should have just updated your existing entries with the new kernel version and change the title from 8.10 to 9.04. I updated the blog post to make this more clear.

The problem you are having is that you are using the UUID of my boot partition (2936a027-09cb-4555-bbf1-50274b66feb1), which does not exist in your system.

To restore your menu.lst, you will need to boot using the Ubuntu CD, then select "Try Ubuntu without any change to your computer".

* Open a terminal window and mount the Ubuntu partition if not already mounted.

* Assuming your partition is mounted to /media/mysystem, then goto to grub directory: cd /media/mysystem/boot/grub

* Backup your current menu.lst file: cp menu.lst menu.lst.bak

You have two options here:

1. Restore the backup version saved by gedit: sudo cp menu.lst~ menu.lst

2. Edit your menu.lst file and use the correct UUID. To determine the proper UUID, first you need to run the command
sudo vol_id -u [your device]
In my case, I ran:
sudo vol_id -u /dev/sda5
If you do not know what is the device of your Ubuntu partition, then just run:
sudo fdisk -l
It will display all partitions.
Edit your menu.lst file and use the UUID returned by the vol_id command.

I updated the post and removed my menu.lst entry so that readers do not blindly copy it.

Luis Rocha said...

@chmac

Thanks for the warning! The post has been updated, I removed the lines of my menu.lst so that readers do not blindly copy them and also add a warning that only users that are experienced with changing menu.lst should be doing this, since this is not recommended for non experienced users.

See my comment above to restore your menu.lst.

Thanks.

CharlieHorse said...

Thank you, your fix worked like a charm. I had no problems at all following your instructions. Just remember to edit the first section of you menu.lst at all three places where you see a reference to the old kernel.