NVIDIA
This article covers the proprietary NVIDIA graphics card driver. For the open-source driver, see Nouveau. If you have a laptop with hybrid Intel/NVIDIA graphics, see NVIDIA Optimus instead.
Installation
These instructions are for those using the stock or packages. For custom kernel setup, skip to the next subsection.
1. If you do not know what graphics card you have, find out by issuing:
2. Determine the necessary driver version for your card by:
- Finding the code name (e.g. NV50, NVC0, etc.) on Nouveau wiki's code names page or .
- Looking up the name in NVIDIA's legacy card list: if your card is not there you can use the latest driver.
- Visiting NVIDIA's driver download site.
3. Install the appropriate driver for your card:
- For the Maxwell (NV110) series and newer, including: GeForce 930~, 10-20, Quadro/Tesla/Tegra cards and newer (for a detailed list, see Official Readme), install the package (for use with the kernel) or nvidia-lts (for use with the kernel) package.
- If these packages do not work, may have a newer driver version that offers support.
- For the Kepler (NVE0) series (including GeForce 630-920) from around 2013-2014, install the package.
- For GeForce 400/500/600 series cards [NVCx and NVDx] from around 2010-2011, install the nvidia-390xx-dkmsAUR package.
- For even older cards (released in 2010 or earlier), have a look at #Unsupported drivers.
4. For 32-bit application support, also install the corresponding lib32 nvidia package from the multilib repository (e.g. ).
5. Reboot. The package contains a file which blacklists the module, so rebooting is necessary.
Once the driver has been installed, continue to #Xorg configuration or #Wayland.
Unsupported drivers
If you have a GeForce 300 series card or older (released in 2010 or earlier), Nvidia no longer supports drivers for your card. This means that these drivers do not support the current Xorg version. It thus might be easier if you use the Nouveau driver, which supports the old cards with the current Xorg.
However, Nvidia's legacy drivers are still available and might provide better 3D performance/stability.
- For GeForce 8/9, ION and 100-300 series cards [NV5x, NV8x, NV9x and NVAx], install the package.
- GeForce 7 series cards and older [NV6x, NV4x and lower] do not have a driver packaged for Arch Linux.
Custom kernel
If using a custom kernel, compilation of the Nvidia kernel modules can be automated with DKMS. Install the package (or a specific branch).
Ensure your kernel has , and if using CONFIG_DEBUG_INFO_BTF then this is needed in the PKGBUILD (since kernel 5.16):
install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids
The Nvidia module will be rebuilt after every Nvidia or kernel update thanks to the DKMS pacman hook.
DRM kernel mode setting
To enable DRM (Direct Rendering Manager) kernel mode setting, add the kernel parameter.
Early loading
For basic functionality, just adding the kernel parameter should suffice. If you want to ensure it is loaded at the earliest possible occasion, or are noticing startup issues (such as the kernel module being loaded after the display manager) you can add , , nvidia_uvm and to the initramfs.
mkinitcpio
If you use mkinitcpio initramfs, follow mkinitcpio#MODULES to add modules.
If added to the initramfs, do not forget to run mkinitcpio every time there is a driver update. See #pacman hook to automate these steps.
Booster
If you use Booster, follow Booster#Early module loading.
pacman hook
To avoid the possibility of forgetting to update initramfs after an NVIDIA driver upgrade, you may want to use a pacman hook:
Make sure the package set in this hook is the one you have installed in steps above (e.g. , , nvidia-lts or ).
Hardware accelerated video decoding
Accelerated video decoding with VDPAU is supported on GeForce 8 series cards and newer. Accelerated video decoding with NVDEC is supported on Fermi (~400 series) cards and newer. See Hardware video acceleration for details.
Hardware accelerated video encoding with NVENC
NVENC requires the nvidia_uvm module and the creation of related device nodes under .
The latest driver package provides a udev rule which creates device nodes automatically, so no further action is required.
If you are using an old driver (e.g. ), you need to create device nodes. Invoking the utility automatically creates them. You can create to run it automatically:
Xorg configuration
The proprietary NVIDIA graphics card driver does not need any Xorg server configuration file. You can start X to see if the Xorg server will function correctly without a configuration file. However, it may be required to create a configuration file (prefer over /etc/X11/xorg.conf) in order to adjust various settings. This configuration can be generated by the NVIDIA Xorg configuration tool, or it can be created manually. If created manually, it can be a minimal configuration (in the sense that it will only pass the basic options to the Xorg server), or it can include a number of settings that can bypass Xorg's auto-discovered or pre-configured options.
Automatic configuration
The NVIDIA package includes an automatic configuration tool to create an Xorg server configuration file () and can be run by:
# nvidia-xconfig
This command will auto-detect and create (or edit, if already present) the /etc/X11/xorg.conf configuration according to present hardware.
If there are instances of DRI, ensure they are commented out:
# Load "dri"
Double check your /etc/X11/xorg.conf to make sure your default depth, horizontal sync, vertical refresh, and resolutions are acceptable.
nvidia-settings
The tool lets you configure many options using either CLI or GUI. Running nvidia-settings without any options launches the GUI, for CLI options see .
You can run the CLI/GUI as a non-root user and save the settings to by using the option Save Current Configuration under nvidia-settings Configuration tab.
To load the for the current user:
$ nvidia-settings --load-config-only
See Autostarting to start this command on every boot.
Manual configuration
Several tweaks (which cannot be enabled automatically or with nvidia-settings) can be performed by editing your configuration file. The Xorg server will need to be restarted before any changes are applied.
See NVIDIA Accelerated Linux Graphics Driver README and Installation Guide for additional details and options.
Minimal configuration
A basic configuration block in (or deprecated in ) would look like this:
Disabling the logo on startup
Add the "NoLogo" option under section :
Option "NoLogo" "1"
Overriding monitor detection
The option under section allows to override monitor detection when X server starts, which may save a significant amount of time at start up. The available options are: for analog connections, for digital monitors and for televisions.
The following statement forces the NVIDIA driver to bypass startup checks and recognize the monitor as DFP:
Option "ConnectedMonitor" "DFP"
Enabling brightness control
Add to kernel paremeters:
nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1
Alternatively, add the following under section :
Option "RegistryDwords" "EnableBrightnessControl=1"
If brightness control still does not work with this option, try installing .
Enabling SLI
Taken from the NVIDIA driver's README Appendix B: This option controls the configuration of SLI rendering in supported configurations. A "supported configuration" is a computer equipped with an SLI-Certified Motherboard and 2 or 3 SLI-Certified GeForce GPUs.
Find the first GPU's PCI Bus ID using :
# lspci | grep "VGA|3D controller"
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09) 03:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1) 04:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1) 08:00.0 3D controller: NVIDIA Corporation GM108GLM [Quadro K620M / Quadro M500M] (rev a2)
Add the BusID (3 in the previous example) under section :
BusID "PCI:3:0:0"
Add the desired SLI rendering mode value under section :
Option "SLI" "AA"
The following table presents the available rendering modes.
| Value | Behavior |
|---|---|
| 0, no, off, false, Single | Use only a single GPU when rendering. |
| 1, yes, on, true, Auto | Enable SLI and allow the driver to automatically select the appropriate rendering mode. |
| AFR | Enable SLI and use the alternate frame rendering mode. |
| SFR | Enable SLI and use the split frame rendering mode. |
| AA | Enable SLI and use SLI antialiasing. Use this in conjunction with full scene antialiasing to improve visual quality. |
Alternatively, you can use the nvidia-xconfig utility to insert these changes into with a single command:
# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA
To verify that SLI mode is enabled from a shell:
If this configuration does not work, you may need to use the PCI Bus ID provided by nvidia-settings,
and comment out the PrimaryGPU option in your xorg.d configuration,
Using this configuration may also solve any graphical boot issues.
Multiple monitors
See Multihead for more general information.
Using nvidia-settings
The nvidia-settings tool can configure multiple monitors.
For CLI configuration, first get the CurrentMetaMode by running:
Save everything after the to the end of the attribute (in this case: ) and use to reconfigure your displays with .
ConnectedMonitor
If the driver does not properly detect a second monitor, you can force it to do so with ConnectedMonitor.
The duplicated device with is how you get X to use two monitors on one card without . Note that nvidia-settings will strip out any options you have added.
TwinView
You want only one big screen instead of two. Set the argument to . This option should be used if you desire compositing. TwinView only works on a per card basis, when all participating monitors are connected to the same card.
Option "TwinView" "1"
Example configuration:
If you have multiple cards that are SLI capable, it is possible to run more than one monitor attached to separate cards (for example: two cards in SLI with one monitor attached to each). The "MetaModes" option in conjunction with SLI Mosaic mode enables this. Below is a configuration which works for the aforementioned example and runs GNOME flawlessly.
/etc/X11/xorg.conf.d/10-monitor.conf
Section "Device"
Identifier "Card A"
Driver "nvidia"
BusID "PCI:1:00:0"
EndSection
Section "Device"
Identifier "Card B"
Driver "nvidia"
BusID "PCI:2:00:0"
EndSection
Section "Monitor"
Identifier "Right Monitor"
EndSection
Section "Monitor"
Identifier "Left Monitor"
EndSection
Section "Screen"
Identifier "Right Screen"
Device "Card A"
Monitor "Right Monitor"
DefaultDepth 24
Option "SLI" "Mosaic"
Option "Stereo" "0"
Option "BaseMosaic" "True"
Option "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Left Screen"
Device "Card B"
Monitor "Left Monitor"
DefaultDepth 24
Option "SLI" "Mosaic"
Option "Stereo" "0"
Option "BaseMosaic" "True"
Option "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "ServerLayout"
Identifier "Default"
Screen 0 "Right Screen" 0 0
Option "Xinerama" "0"
EndSection
Vertical sync using TwinView
If you are using TwinView and vertical sync (the "Sync to VBlank" option in nvidia-settings), you will notice that only one screen is being properly synced, unless you have two identical monitors. Although nvidia-settings does offer an option to change which screen is being synced (the "Sync to this display device" option), this does not always work. A solution is to add the following environment variables at startup, for example append in :
export __GL_SYNC_TO_VBLANK=1 export __GL_SYNC_DISPLAY_DEVICE=DFP-0 export VDPAU_NVIDIA_SYNC_DISPLAY_DEVICE=DFP-0
You can change with your preferred screen ( is the DVI port and is the VGA port). You can find the identifier for your display from nvidia-settings in the "X Server XVideoSettings" section.
Gaming using TwinView
In case you want to play fullscreen games when using TwinView, you will notice that games recognize the two screens as being one big screen. While this is technically correct (the virtual X screen really is the size of your screens combined), you probably do not want to play on both screens at the same time.
To correct this behavior for SDL, try:
export SDL_VIDEO_FULLSCREEN_HEAD=1
For OpenGL, add the appropriate Metamodes to your xorg.conf in section and restart X:
Option "Metamodes" "1680x1050,1680x1050; 1280x1024,1280x1024; 1680x1050,NULL; 1280x1024,NULL;"
Another method that may either work alone or in conjunction with those mentioned above is starting games in a separate X server.
Mosaic mode
Mosaic mode is the only way to use more than 2 monitors across multiple graphics cards with compositing. Your window manager may or may not recognize the distinction between each monitor. Mosaic mode requires a valid SLI configuration. Even if using Base mode without SLI, the GPUs must still be SLI capable/compatible.
Base Mosaic
Base Mosaic mode works on any set of Geforce 8000 series or higher GPUs. It cannot be enabled from within the nvidia-setting GUI. You must either use the nvidia-xconfig command line program or edit by hand. Metamodes must be specified. The following is an example for four DFPs in a 2x2 configuration, each running at 1920x1024, with two DFPs connected to two cards:
$ nvidia-xconfig --base-mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"
SLI Mosaic
If you have an SLI configuration and each GPU is a Quadro FX 5800, Quadro Fermi or newer then you can use SLI Mosaic mode. It can be enabled from within the nvidia-settings GUI or from the command line with:
$ nvidia-xconfig --sli=Mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"
Wayland
See Wayland#Requirements for more information.
For further configuration options, take a look at the wiki pages or documentation of the respective compositor.
Regarding XWayland take a look at Wayland#XWayland.