On my older laptop or desktop, NVidia drivers won't work properly?
Solution 1:
Problem: You have to manually manage driver versions on Linux
In a Windows environment, you would install drivers using nvidia's own tools, or let windows handle things, which generally automatically selects the right version. In Linux, the package maintainer has created packages where various versions of the Nvidia driver are integrated into the Kernel (the driver is a kernel module). So here you need to select the right version yourself. Most distributions have a non-free
repository that contains pre-compiled nvidia driver blobs for use in their kernels, which is what this nvidia
package is.
So, you installed the wrong driver. First, we have to rescue the desktop. If it won't run properly in a desktop, your machine will likely still run VGA mode, so let's change the runlevel of the system to 3.
How to change runlevel and uninstall
When you get to the "grub" screen as part of the boot process, hit one of the arrow keys to stop at the select screen. If you have a system that boots very fast this may flash by. In that case you can hold down SHIFT
to get here. Hit e
to edit the commands. Scroll down to the command that starts the linux kernel. Usually this is a line starting with
linux vmlinuz-
It is usually followed up by a line starting initramfs
. Scroll to the end of the linux line by hitting End
, then add a space followed by the number 3
to it. This should boot you to a console. Deinstall the package you installed from this command line using the package manager cli. Examples;
sudo apt-get remove <package-name> && sudo apt-get autoremove
sudo yum remove <package-name>
sudo pacman -Rs <package-name>
Or consult the package manager Rosetta.
How to install the proper version
You will need to know your GPU version. If you already know this, skip this step. Otherwise, execute
lspci -v | grep -i 'vga\|3d\|2d'
in a terminal. It should output a string containing the GPU model. If it's not helpful enough, you can note down the numbers at the start of the output (the PCI address) and manually query that using
lspci -v -s 02:00.0
(The numbers will vary based on the exact motherboard in the computer and how things are wired up).
Next, look up the version you need on Nvidia's legacy list. The table below also lists some common gpu versions (roughly, some generations contain rebrands which are actually part of the previous generation so may require an older driver). Then check, for that version, if it's still supported. As of now (sept. 2020), the 390.xx
series is the latest supported driver. If your gpu needs an earlier version, you also need to have an older kernel and X.org version for things to work. Why? Because the kernel changes with each new release and NVidia essentially patches the kernel code. Hence to keep their proprietary drivers functioning NVidia has to continuously update these drivers.
Consult the following table below. Note: the entries with ?
marks are guesses based on release dates, official documentation is unavailable so newer versions may work. Research would be needed to check which versions will run.
+----------------+----------------+---------------+-------------------------+
| Nvidia version | Kernel version | X.Org version | GPUs |
+----------------+----------------+---------------+-------------------------+
| 390.xx | all | all | 3xx/4xx/5xx/6xx/7xx |
| 340.xx | 5.4 | 1.20 | 8xxx/9xxx/2xx/3xxM/405M |
| 304.xx | 4.13 | 1.19 | 6xxx/7xxx |
| 173.14.xx | 4.2? | 1.15 | 5xxx |
| 96.43.xx | 2.6? | 1.12 | 2MX/3/4 |
| 71.86.xx | 2.6? | 1.12? | Riva TNT/Geforce 1 |
+----------------+----------------+---------------+-------------------------+
You can also look up the release dates here. Try using a kernel that is older than this date, but as new as possible within the restriction. So if a graphics driver released the latest version in december 2013, try to use a kernel from a few months earlier in 2013.
If you found the right kernel version, now we want to downgrade the distribution: install the correct version of your distribution that matches this kernel version. Or, some distributions allow installing / holding back packages. You want to hold back X.org and the linux kernel to the version listed. Quite often packages are also provided for specific X.org and kernel versions. E.g. an X-1.19
package, which keeps the latest 1.19
release.
These are called different based on your package manager. Finally, install the correct version of the nvidia driver package using the package manager.
Installing the driver directly
- Download the driver version you need directly from NVidia.
Make sure the version matches. Also make sure the architecture matches (if you use 32-bit linux, download the version without 64
in it). Check the "Supported Products" tab on the download splash page and make sure your GPU is listed.
- Install the
dkms
package. - Install the kernel header files package for your distribution.
- Disable
nouveau
manually.
Edit the grub configuration (typical location: /etc/default/grub
), change the value of GRUB_CMDLINE_LINUX
and append nouveau.modeset=0
to the quoted variable. Then execute:
BIOS system
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI system
The output file location varies by distribution. (In arch, it's even completely arbitrary). Usually found under /boot/efi
, and usually called grub.cfg
. You can find out where to look by running
efibootmgr -v
and examining the output. This output uses DOS notation, so inverts directory path slashes. Then run, assuming the output entry contained File(\EFI\boot\bootx64.efi)
sudo grub2-mkconfig -o /EFI/boot/bootx64.efi
- Reboot to runlevel 3. (Instructions are above)
- Execute the downloaded file
Run the following command, assuming you downloaded the Nvidia driver to a downloads
directory in your $HOME
:
sudo bash /home/<username>/downloads/NVIDIA-linux-x86_64-<VERSION>
Note: On a 32-bit system, you would have downloaded the 32-bit version of the library
On a 64-bit system, it will ask you about 32-bit compatibility libraries. Answer YES
. Also answer YES
when it asks to automatically update your X config file.
- Reboot the system (into regular mode now).
- Optionally run
nvidia-settings
to tweak the performance.