This page describes how to identify, configure and troubleshoot NVIDIA Optimus enabled systems for Debian. NVIDIA Optimus is a technology that enables dynamic, switchable graphics between the central processing unit's (CPU) embedded graphics capability and the discrete graphics processing unit (GPU) card. Due to the nature of this technology, various software components must be aware of, and configured for, the proper output of the display based on the user's desired configuration.
NVIDIA has recently laid the groundwork for easy switchable graphics in the proprietary driver without most of the fiddling that has traditionally been required. This needs, at minimum, NVIDIA 435.17 or newer, and X.Org Server 1.21 or newer. This driver version is currently packaged in the Debian Experimental repo, while X.Org 1.21 is unreleased and unpackaged. You can find more information on this bleeding-edge functionality on the NVIDIA website in their official driver documentation. Until these are available, or if you're on an older version of Debian that doesn't yet have the necessary versions, the rest of this page may be very useful.
The instructions on this page apply to Debian Wheezy and newer.
* NVIDIA Optimus - http://www.nvidia.com/object/optimus_technology.html
Installation of Proprietary Graphics Driver Required
The instructions on this page assume that your system has already had the NVIDIA proprietary graphics drivers installed using the instructions, here: Driver Installation.
- See also
The quickest method to determine if your device uses an Optimus card is to search against the documented list on NVIDIA's website. Obtain the NVIDIA GPU identifier of your card with:
$ lspci | grep 3D
Compare the identifier (i.e. GeForce 7XXM, 8XXM, 9XXM) with the list, here: http://www.geforce.com/hardware/technology/optimus/supported-gpus
Also note the PCI identifier of the card, which is the 5-digit ID at the beginning of the previous command's output, XX:XX.X.
Configuration of an NVIDIA Optimus enabled system can be somewhat complex, depending upon the desired end state. This section mentions and details a few of the more common configuration scenarios and how to adjust your Debian installation, accordingly.
Dynamic Graphics Disabled - BIOS
Rather than enabling the power saving features of dynamic, "switchable" graphics, one can simply configure the system to output to the local display using only a single graphics provider.
The simplest method of setting the graphics provider, if your hardware supports it, is to manually select the embedded CPU or NVIDIA GPU as the display provider in the system's BIOS. Of course, this is vendor specific and you must consult your hardware manufacturer's documentation for further detail.
Dynamic Graphics Disabled - xrandr and Display Manager Scripts
If your system does not support or provide a BIOS switch, an alternative is to configure X to output through the desired source to the system's attached screen. While this configuration does not take advantage of Optimus' power saving features, it can ensure a consistent desktop graphics experience for 3D applications.
1. Ensure xrandr is installed and available
# apt-get install x11-xserver-utils
2. Modify or create (if one doesn't exist) an xorg.conf under /etc/X11/xorg.conf; add the following:
Section "Module" Load "modesetting" EndSection Section "Device" Identifier "nvidia" Driver "nvidia" BusID "PCI:X:Y:Z" Option "AllowEmptyInitialConfiguration" EndSection # Insert any additional custom configurations, below:
Where "BusID" X:Y:Z are the shortened/truncated numbers from the ID gathered above. For example, if the output of lspci displayed a PCI ID of 09:00.0, the BusID entry would read: BusID "9:0:0"
3. Add/create a custom script, /usr/local/bin/switch_nvidia.sh:
xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto xrandr --dpi 96
The DPI setting, (--dpi) should be fine for most screens; however, this may need to be adjusted for newer high density pixel screens. Systems with HiDPI screens likely will want to set this to 192. Consult your hardware manufacturer's specification for the appropriate setting.
4. Make the script executable:
# chmod +x /usr/local/bin/switch_nvidia.sh
5. Configure your desired display manager to use a setup script during display setup.
1. Modify lightdm's configuration and add (if one doesn't already exist) a SeatDefaults section & script config:
On default Jessie installations, this section will not exist and will need to be added in by hand.
2. Restart lightdm to apply the new configuration and allow lightdm to start X sessions with the NVIDIA card as the source:
Jessie and newer:
# systemctl restart lightdm.service
# service lightdm restart
Configure Simple Desktop Display Manager (SDDM)
1. Add call of switch_nvidia.sh script to file /usr/share/sddm/scripts/Xsetup :
# Xsetup - run as root before the login dialog appears /usr/local/bin/switch_nvidia.sh
2. Restart SDDM:
# systemctl restart sddm
Configure GNOME Display Manager (GDM)
1. Create a two new .desktop files - /usr/share/gdm/greeter/autostart/optimus.desktop and /etc/xdg/autostart/optimus.desktop about following content:
[Desktop Entry] Type=Application Name=Optimus Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto" NoDisplay=true X-GNOME-Autostart-Phase=DisplayServer
2. Restart GNOME Display Manager (GDM):
Jessie and newer:
# systemctl restart gdm3.service
# service gdm3 restart
3. If NVIDIA driver still won't working, you can try use GNOME on Wayland display manager.
Content based on https://wiki.archlinux.org/index.php/NVIDIA_Optimus#GDM.
Dynamic Graphics with Bumblebee
The proprietary NVIDIA graphics driver can also be used to enable dynamic graphics switching between the embedded and discrete graphics providers through the use of Bumblebee. This method takes advantage of Optimus' power saving features, but can be more complex to successfully enable offloaded 3D applications.
You can check if installed drivers support 3D OpenGL graphics by executing following command:
$ glxinfo | grep OpenGL
If you have a hybrid GPU and installed bumblebee driver you can check it for Intel:
$ glxinfo | grep OpenGL
And for NVIDIA:
$ optirun glxinfo | grep OpenGL
Also very recommended is checking displaying 3D OpenGL graphics by running glxgears program.