This document explains how to make use of NVIDIA video hardware on a ["Debian"] GNU/Linux system. The [#free following section] shortly describes the free drivers while the [#non-free rest of the document] covers the non-free but 3D-accelerated drivers.



free drivers

Debian has two free drivers that support NVIDIA cards. The vesa driver is a generic video driver. The nv driver usually gives better results. You can see which one is in use by looking at the output of

$ grep Driver /etc/X11/xorg.conf 2>&1|grep 'nv\|vesa'

You can simply [:ConfigureX:configure X] to change the free driver to use.

However, both of these drivers do not support 3D acceleration. Only the non-free nvidia drivers support this. If you are willing to use these drivers despite the fact that they are non-free, read the following section. If you do, keep in mind that using the non-free drivers is considerably more complex and X is much more likely to break. If this happens and you have trouble getting X to work again due to the nvidia drivers, remember that simply switching back to one of the free drivers should let you run X again until you find a way to get 3D acceleration working again.


non-free drivers

Why use a Debian-specific method?

To install the NVIDIA drivers, you can use either NVIDIA's official installer or the Debian driver packages. Each method has its advantages, described below. NVIDIA's installer used to be easier to use; but with the advent of module-assistant, the Debian way is probably easier. Even when building a driver module manually, in the long run the Debian way will probably save labor. The Debian way is of course the most reliable.

Unless you had issues with the Debian way, you probably just want to [#Installation skip to the Installation section]. NVIDIA's installer is already documented at other places (such as [:NvidiaGraphicsDriversNvidiaWay:this one]), so the Installation section of this HOWTO only describes the Debian way.

Whichever installation method, the [#Troubleshooting troubleshooting section] may help.

Comparison of nvidia-installer and the Debian way

Advantages of "the Debian way":

Advantages of NVIDIA's official installer:



Here are the instructions for installing the NVIDIA 3D drivers, the Debian way.


The NVIDIA 3D drivers consist of two parts: a kernel module, and a collection of user-space libraries. The libraries (sometimes called the "binary driver" or GLX libraries) are distributed in binary form by NVIDIA, and packaged for Debian in the nvidia-glx packages. Since NVIDIA's 3D drivers are not open source, you will need non-free APT sources to be able to install them. The kernel module (aka the "kernel interface to the binary driver") is distributed in source form (though with one binary component), and packaged for Debian in the nvidia-kernel-source packages. The version of the kernel module has to match the version of the libraries. The user libraries only have to be installed once, but the kernel module must be recompiled every time the kernel is changed. Here's what to do:

Steps 3 and 4 have to be performed only once. Step 2 has to be repeated every time the kernel is changed. With the help of module-assistant and APT, it is easy.



Choose a driver version

The current drivers do not support some legacy NVIDIA cards. Up to now, the NVIDIA drivers dropped support for some legacy cards 3 times. However, NVIDIA maintains the last driver version released before a legacy cards support drop. This means there are currently 4 drivers series maintained by NVIDIA. The first support drop happened in 2005, so the oldest legacy drivers series (71xx) should support cards released before 2005 but not those released after 2005. The second support drop happened in 2006, leading to the 96xx legacy drivers series. The third support drop happened in 2008, leading to the 173.14 legacy drivers series.

Both Debian Etch and Debian Lenny only contain 2 drivers series from the 4 available. Due to the lacking versions, both suites do not officially support all NVIDIA cards, although it is possible to install unofficial packages if your card requires a drivers series not available in your suite. Lenny contains the second oldest drivers series, 96.43. Etch contains a previous version of the drivers, 1.0.8776, which supports the same cards as 96.43. Additionally, Etch contains the oldest drivers series, 71xx. Lenny contains the newest legacy series, 173.14. This means that Etch lacks support for new card, while Lenny lacks support for the newest and oldest cards. The current version of the drivers is only available in Debian experimental.

The 71xx version is the only one to support RIVA TNT, RIVA TNT2/TNT2 Pro, RIVA TNT2 Ultra, Vanta/Vanta LT, RIVA TNT2 Model 64/Model 64 Pro, Aladdin TNT2, ?GeForce 256, ?GeForce DDR, Quadro, ?GeForce2 GTS/GeForce2 Pro, ?GeForce2 Ti, ?GeForce2 Ultra and Quadro2 Pro. The current version - which is ulterior to the latest version available in Etch - does not support ?GeForce2 and ?GeForce4 card.

Debian distributes several versions of the drivers using several packages with different names. For example, user-space libraries from the current series are in the nvidia-glx package. In Etch, the older drivers are in the nvidia-glx-legacy package. However, with time, the current drivers become legacy drivers, so the nvidia-glx package in Etch is not current anymore.

Use current drivers if possible. Supported cards in Etch are listed in [ Appendix A of NVIDIA's 1.0-8776 driver README] by NVIDIA chip name and Device PCI ID. If you do not use Etch, you can determine which cards are supported by consulting [ Appendix A of NVIDIA's 173.14.09 driver README].

Set a VERSION variable, which the rest of the instructions will refer to, to "-legacy", "-legacy-96xx", "-legacy-71xx" or an empty string. If you want to install the default version from your suite, there is no need to set VERSION to the empty string. To find the name of a card, you can try lspci. To determine which version you should use, you can run [ this script], which will propose to set VERSION.

Install the kernel module

Stock or custom kernel?

Some of the installation methods below depend on whether you're running a stock kernel, i.e. a prebuilt kernel from the Debian distribution. If you know which kind of kernel you have, you can skip to the [#Methods following section].

By default, Debian comes with a stock kernel. If you don't know what kind of kernel you're running, then it's probably a stock kernel. If you're not sure, run

$ uname -r

and check if the output looks like 2.*.*-small number-architecture (e.g. or 2.6.18-6-486). If it does, you're most likely running a stock kernel.



There are four different methods for installing the kernel module.


Use module-assistant

This method is easy, and should work with most stock or custom kernels. For a custom kernel, you need to have its Linux headers installed.

It needs module-assistant and nvidia-kernel-common. To install them with apt-get:

# apt-get install module-assistant nvidia-kernel-common

Run the following command:

# m-a auto-install nvidia-kernel${VERSION}-source

And that's it. If all went well, your nvidia kernel module is now built and installed; you may [#Libraries proceed to step 3]. If not, read the rest of this section.

You must use the same version of gcc to build your nvidia kernel module as was used to build your kernel. This might be a problem if you are running a stock kernel. If module-assistant fails, read its log output and look for messages suggesting that you need, for example, gcc-4.0 instead of gcc-4.1. Then install the corresponding package and retry auto-install.

The auto-install step is the biggest step of the procedure, and is the most likely to fail. auto-install can be divided in smaller module-assistant steps, which can help debugging:

If # m-a get nvidia; fails, try installing the nvidia-kernel-source package. If APT fails to install nvidia-kernel-source, you should go back to step 0 and make sure you didn't miss something.

If you are unable to install the module using module-assistant, try [#Method2 installing a pre-built module] if you use a stock kernel or try to [#Method3 build manually, with a custom kernel].


Install a pre-built module

This method is easy if you're running a recent stock kernel for which a pre-built module is available; it will not work at all if you're running a custom kernel or Debian 4 with Linux 2.6.24. There are pre-built modules available for all the kernels installed by default by Debian Etch and Lenny. If the module-assistant method doesn't work for you and there are pre-built modules available for your kernel, use this method.

If you don't know your kernel version, run

$ uname -r

If there is a pre-built module for your kernel, install its package. The name starts with "nvidia-kernel-". This is followed by an indication of the drivers series you want (this string is empty for the default drivers series). The name ends by the identifier of your Linux image. For example, with apt-get:

# apt-get install nvidia-kernel${VERSION}-$(uname -r)

If this step succeeds, you may now [#Libraries proceed to step 3]. If there are no pre-built modules for your kernel, and [#Method1 method 1] fails, you may want to try [#Method4 method 4].


Build manually, with a custom kernel

Use this method if you're configuring and building a custom kernel. This method is known to be possibly inexact or incomplete.

1. Install the kernel module source. For example, with apt-get:

# apt-get install nvidia-kernel${VERSION}-source

This will install a source tarball in /usr/src/. Unpack it in /usr/src:

$ cd /usr/src
# tar -xf nvidia-kernel-*.tar.gz

This will unpack the kernel module sources into /usr/src/modules/nvidia-kernel[something].

2. Configure your kernel. This step isn't documented here; if you need to learn how, see the kernel-package documentation. But in summary, what you have to do is

$ cd /usr/src/linux
# make xconfig

and then choose the options you want. Note, however, that each of the following kernel options has been reported to cause trouble with the nvidia driver:

It is therefore recommended that you disable all of the above options in your kernel configuration. If for some reason you don't disable them, and then your X display doesn't work properly with the nvidia driver, you should suspect these options as the likely cause of the trouble. For more details, see the Troubleshooting section.

3. Build the kernel and the nvidia kernel module:

# make-kpkg clean
# make-kpkg kernel_image modules_image

For an introduction to using make-kpkg to build kernel packages, see [ Creating custom kernels with Debian's kernel-package system], or [ Compiling Kernels the Debian Way]. See also the make-kpkg man page, for a description of other options and targets that you can use in this command.

The result of the above command will be two Debian package files, linux-image-*.deb and nvidia-kernel-*.deb, both in /usr/src or /usr/src/modules. The first file contains your kernel, and the second contains your nvidia kernel module.

At the same time, if you have sources for any other add-on kernel modules in /usr/src/modules, then the "modules_image" target will cause make-kpkg to build Debian package files for them, too. For example, if you install the fuse-source package you'll get a source archive /usr/src/fuse.tar.gz, which you can unpack to get fuse module sources in /usr/src/modules/fuse. If you've done this, then this same invocation of make-kpkg will also build a fuse module package file, /usr/src/fuse-*.deb, that's specific to your new kernel.

4. Install the new kernel and kernel module:

$ cd /usr/src
# dpkg -i /path/linux-image-*.deb /path/nvidia-kernel-*.deb

Use the fileglobs as above if you want, but watch out that you don't have more than one Linux image or nvidia-kernel package file lying around in /usr/src. If you do you'll get a blizzard of error messages. It's probably better to explicitly type all of the version information rendered as * above.

5. Boot your new kernel. Before trying to get the NVIDIA 3D drivers to work, make sure that the new kernel boots and that X starts well using a free X driver.

[#Libraries Proceed to step 3].


Build manually, with a stock kernel

Use this method if you're running a stock kernel and the two first methods failed. module-assistant should automate this process. In other words, if the first method failed but this one works, you should probably submit a bug report against module-assistant.

The following procedure is adapted from the instructions in /usr/share/doc/nvidia-kernel-source/README.Debian and is known to be potentially inexact.

  1. Save the release number of your kernel (e.g. 2.4.27-2-k7 or 2.6.8-1-686) in a couple of environment variables:

                export KVERS=$(uname -r)
                export KSRC=/usr/src/linux-headers-$KVERS

                apt-get install nvidia-kernel-source nvidia-kernel-common

                cd /usr/src
                tar -zxf nvidia-kernel-source.tar.gz

                apt-get install linux-headers-$KVERS

                apt-cache policy kernel-image-$KVERS linux-headers-$KVERS

                cd /usr/src/modules/nvidia-kernel
                debian/rules binary_modules

                dpkg -i /usr/src/nvidia-kernel-*.deb


Install the NVIDIA user-space libraries

Install the user-space libraries package. For example, with apt-get:

# apt-get install nvidia-glx${VERSION}

Note: The reason this step has to come after step 2 is that nvidia-glx depends on a virtual package called 'nvidia-kernel-$NVVERSION', where $NVVERSION is the upstream part of the version of the nvidia-glx package. This virtual package should be provided by the kernel module package that you installed in step 2; so you have to complete that step first. If the installation of nvidia-glx fails because the 'nvidia-kernel-$NVVERSION' isn't satisfied, you should probably make sure that step 2 went OK.

Configure X to use the nvidia driver

There are two ways to do this. If you don't use Debian 4, use the manual way. Otherwise, the one you should use depends on whether you manually edited your X configuration file. If you don't know if you did, you probably didn't. If you choose the debconf way but you did edit your X config file, the manual changes you did will be ignored in the new xorg.conf. To make sure, run the following command:

$ md5sum /etc/X11/xorg.conf|diff -sq /var/lib/x11/xorg.conf.md5sum -

If the files differ, choose the second way (the manual way).

The debconf way


# dpkg-reconfigure xserver-xorg

This will ask you questions, some of which you should have already seen when you installed Debian. You only need to change your answer to 2 of those questions. When asked to choose an X server driver, choose nvidia. Then, when asked to select X server modules, deselect (uncheck) dri, and select (check) glx.

Your previous configuration will be backed up.

The manual way

Consider backing up your current X config file:

# cp -p /etc/X11/xorg.conf /etc/X11/xorg.conf.bak

Watch out for typos, and check your X log if things go wrong.

Edit /etc/X11/xorg.conf:

Restart X

This is the easiest but probably most crucial step. If it doesn't work for some reason, and you want to get back to X before fixing the problem, you'll have to revert step 4 (by choosing a free X driver again). When you think you fixed the problem, you can do step 4 again and retry starting X. Remember that even if it works you'll want to read the [#Upgrades next section] to avoid future trouble. And if it doesn't...check the Troubleshooting section.

If you don't use a display manager, simply close your session. That should bring to a console. If it doesn't, you must be using a display manager (such as gdm, kdm or xdm). First identify which one you're using. If you don't know, it's probably gdm. You can know by checking whether a process ending with "dm" is running. Once you determined which one you use, close your session and go run the appropriate init script in a console. Here's an example for gdm:

# invoke-rc.d gdm restart

Alternatively, you can simply press Alt+E at the login screen if you use kdm. If you can't figure out how to restart X with those instructions, you can simply reboot your system. Otherwise, the keyboard shortcut Ctrl+Alt+Backspace should be reliable, despite being somewhat "unfriendly".

Check that it worked

To check that the acceleration is working, glxinfo can be used. This program is in the mesa-utils package. If

$ glxinfo |grep rendering

returns "direct rendering: Yes", acceleration is working. If it returns No, [#nodri see section "Hardware acceleration, aka direct rendering, doesn't work"]. If it returns Yes, 3D acceleration (in games such as PlanetPenguin Racer and Neverball) should work. If it works in these games but not in a particular application you expected to be able to use, [#oldgame check section "Some old game doesn't start"].


How to deal with kernel changes and driver upgrades

Steps 3 and 4 are done for good. However, you'll have to repeat step 2 in certain situations. If you don't realize such a situation happens, X will fail to start. You can take two approaches with this: either remember when this will happen and try to prevent it, or remember to come back here when your X fails to start. Either way, you're not done for life. If X fails to start because of this, you can again revert step 4 (by choosing a free X driver again) and redo it when you want to retry using the nvidia driver for X.


Step 2 installs an nvidia kernel module for a specific kernel and NVIDIA driver version. You'll have to do it for each kernel, and you'll have to redo it for each new driver version. If you don't know what this means, read on.

...will the NVIDIA driver version change

If you're using Debian stable, this won't happen until you upgrade to the next Debian release, but it will happen then.

In all cases, this will happen when the nvidia-glx package is upgraded. All versions of nvidia-glx depend on an nvidia-kernel-version virtual package. When you followed step 2, you installed a package providing this virtual package. However, if you upgrade nvidia-glx before doing step 2 again, APT will attempt to satisfy the virtual package by installing a basically randomly chosen prebuilt kernel module. You'll notice some new nvidia-kernel-something package being installed (or upgraded if you already had it). Instead of letting it do, do step 2 again to get an appropriate kernel module. Then, the virtual package will be satisfied and you can upgrade nvidia-glx safely and without installing a useless package.

...will your kernel change

If you build other modules using module-assistant, you have to redo step 2 everytime you'd have to run module-assistant for other modules, that is for every new kernel ABI. If you don't know what that means, read on.

If you install a kernel with a new ABI, a new Linux image package will be installed. For example, if the Linux 2.6.18 gets a new ABI and you currently use linux-image-2.6.18-4-486, you will have to install the kernel-image-2.6.18-5-486 package to get the new kernel (the "-4" and "-5" part of the package names indicate respectively that these packages contain the fourth and fifth ABI of Debian's 2.6.18 i386 stock kernels). This may happen without your intervention when upgrading your system if the linux-image-2.6-486 meta package is installed. This can also happen if you install a different kernel. For example, you can have both 2.6.18 and 2.6.24 in Etch. If you did step 2 for 2.6.18 only, you'll need to do it for 2.6.24 too. You'll notice that a new kernel is installed when a new linux-image-something package is installed. X will fail to start after you booted a new kernel until you perform step 2 for that kernel.


X doesn't start

Lost Your Console

This may only apply to the nvidia packages in etch.

If you happen to lose your virtual terminals (Ctrl+Alt+F1) [i.e. the console is displaying garbage] after xorg starts, this might be a fix (it was for me):

# apt-get install nvidia-settings
$ nvidia-settings
click OpenGL Settings and check "Sync to VBlanc".

It should work now.

X (or the complete machine when running X) is unstable


Hardware acceleration, aka direct rendering, doesn't work

We've covered how to check that the installation worked in section "Check that it worked". If it doesn't, check that you adjusted your X configuration properly. You can do so by checking that

$ grep Driver /etc/X11/xorg.conf 2>&1|grep nvidia

returns something. If this is the case and X was restarted since the configuration was changed, you may be affected by [ Debian bug #208198]. You can check if this is the case by running

$ glxinfo | egrep "glx (vendor|version)"

If you see different vendors or versions for the client and server, this is your problem. In that case you can run

# NVVER=`dpkg -s nvidia-glx|grep Version|cut -d ' ' -f2|cut -d '-' -f1`
# ln -fs /usr/lib/$NVVER /usr/X11R6/lib/
# ln -fs /usr/lib/$NVVER /usr/X11R6/lib/
# ln -fs$NVVER /usr/lib/

to fix the problem.

If that's not your problem but you get an error when trying to use OpenGL apps like glxinfo that looks like this one:

Error: Could not open /dev/nvidiactl because the permissions
are too resticitive.  Please see the FREQUENTLY ASKED QUESTIONS
section of /usr/share/doc/NVIDIA_GLX-1.0/README for steps
to correct.
Fatal signal: Segmentation Fault

you should make sure that the user running the application is in the video group.

Various problems with X

Look in your X log file (/var/log/Xorg.0.log). The X server writes a lot of information there about what configuration files it's reading, what display modes it's trying, and errors (EE) it encounters along the way. You can very often find hints there to the source of whatever problem you're having.


Some old game doesn't start

If some software (probably old games) complains about missing, try installing nvidia-glx-dev. If this doesn't help, this application is probably buggy or doesn't support your system. This document probably can't help you with these problems.

"nvidia license taints kernel"

If you get such a warning message on your console or in your syslog, don't worry. Your kernel is fine...or at least as fine as a kernel that can run NVIDIA's 3D driver can be. All this message means is that because your driver isn't open source, you won't get any support from the Linux maintainers if anything goes wrong with your kernel while the module is loaded. See the [ LKML FAQ] for more.

Last resort

You can check [ the NVIDIA Linux Forum at] for issues not related to Debian packaging. For Debian-specific issues, you may look at the bug tracking system or ask a question on Debian help resources, such as the debian-user mailing list and #debian on If you still have a problem that you can't solve, you can write and [ tell the author] about it. He'll do what he can to help, subject to his knowledge and time constraints.

More information

About this document

This wiki page was created by Filipus Klutiero to publish an update to Andrew's Debian-nVidia HOWTO. You are free to modify this page as long as you agree to let copyright of your changes to the author. For problems, comments, or questions about the information in this document, you can [ write to the maintainer]. He's no expert, but he'll do his best to make the document useful.


Thanks to Andrew Schulman for publishing his HOWTO, agreeing to share his rights on it, and making the HOWTO link to this page since it stopped being maintained.


This document is Copyright 2005, by Andrew E. Schulman. Permission is hereby granted to freely copy, distribute, and/or modify any of the contents of this document in any way and for any purpose.