NVIDIA Optimus is a technology that allows an Intel integrated GPU and discrete NVIDIA GPU to be built into and accessed by a laptop. Getting Optimus graphics to work on Arch Linux requires a few somewhat complicated steps, explained below. There are several method available:
- disabling one of the devices in BIOS, which may result in improved battery life if the NVIDIA device is disabled, but may not be available with all BIOSes and does not allow GPU switching
- using the PRIME functionality of the open-source nouveau driver, which allows GPU switching but offers poor performance compared to the proprietary NVIDIA driver and does not currently implement any powersaving
- using the official Optimus support included with the proprietary NVIDIA driver, which offers the best NVIDIA performance but does not allow GPU switching and can be more buggy than the open-source driver
- using the third-party Bumblebee program to implement Optimus-like functionality, which offers GPU switching and powersaving but requires extra configuration
These options are explained in detail below.
Disabling switchable graphics
If you only care to use a certain GPU without switching, check the options in your system's BIOS. There should be an option to disable one of the cards. Some laptops only allow disabling of the discrete card, or vice-versa, but it is worth checking if you only plan to use one of the cards. If you want to use both cards, or cannot disable the card you do not want, see the options below.
The open-source NVIDIA driver, allows for dynamic GPU switching using a technology called PRIME. Note that this method does not have any powersaving features.
First, install the Intel and nouveau drivers:
# pacman -S xf86-video-intel xf86-video-nouveau
Next, install, which allows setting the NVIDIA card as an offload sink of the Intel:
# pacman -S xorg-xrandr
Reboot to load the drivers. You should now be able to start X. The next step is to run the following
xrandr command while X is running:
$ xrandr --setprovideroffloadsink nouveau Intel
You can now run programs with the NVIDIA card by adding
DRI_PRIME=1 before a command; i.e.
$ DRI_PRIME=1 glxgears
To check if programs are using the NVIDIA graphics and not Intel, installand run
$ DRI_PRIME=1 glxinfo | grep nouveau
You should see a line that says
OpenGL vendor string: nouveau.
If you do not want to manually run the
xrandr command every time you start X, you can add it at the beginning of your
~/.xinitrc. If you want to run every program using the NVIDIA graphics, you can add the line
export DRI_PRIME=1 to your
For more information, look at FreeDesktop's official page on the topic here.
The proprietary NVIDIA driver does not support dynamic switching like the nouveau driver (meaning it can only use the NVIDIA device), and has several other disadvantages, but does allow use of the discrete GPU and has (as of October 2013) a marked edge in performance over the nouveau driver.
First install the modesetting and nvidia drivers:
# pacman -S xf86-video-modesetting nvidia
# pacman -S xorg-xrandr
Next, you must create a custom
xorg.conf. You will need to know the PCI address of the NVIDIA card, which you can find by issuing
$ lspci | grep VGA
The PCI address is the first 7 characters of the line that mentions NVIDIA. It will look something like
01:00.0. In the
xorg.conf, you will need to format it as
01:00.0 would be formatted as
1:0:0. Also, if the NVIDIA card has no display devices attached to it (all video goes through the Intel chip), uncomment the line that reads
Option "UseDisplayDevice" "none".
# nano /etc/X11/xorg.conf
Section "ServerLayout" Identifier "layout" Screen 0 "nvidia" Inactive "intel" EndSection Section "Device" Identifier "nvidia" Driver "nvidia" BusID "PCI:PCI address determined earlier" # e.g. BusID "PCI:1:0:0" EndSection Section "Screen" Identifier "nvidia" Device "nvidia" #Option "UseDisplayDevice" "none" EndSection Section "Device" Identifier "intel" Driver "modesetting" EndSection Section "Screen" Identifier "intel" Device "intel" EndSection
Next, add the following two lines to the beginning of your
$ nano ~/.xinitrc
xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto
Now reboot to load the drivers, and X should start.
If you get a black screen when starting X, make sure that there are no ampersands after the two
xrandr commands in
~/.xinitrc; if there are ampersands, it seems that the window manager can run before the
xrandr commands finish executing, leading to the black screen.
As with the nouveau drivers, you can check if the NVIDIA graphics are being used by installingand running
$ glxinfo | grep NVIDIA
For more information, look at NVIDIA's official page on the topic here.
If you wish to use Bumblebee, which will implement powersaving and some other useful features, see the wiki page on Bumblebee.