Chapter 33. Offloading Graphics Display with RandR 1.4

Version 1.4 of the X Resize, Rotate, and Reflect Extension (RandR 1.4 for short) adds a way for drivers to work together so that one graphics device can display images rendered by another. This can be used on Optimus-based laptops to display a desktop rendered by an NVIDIA GPU on a screen connected to another graphics device, such as an Intel integrated graphics device or a USB-to-VGA adapter.

System Requirements

Using the NVIDIA Driver as a RandR 1.4 Output Source Provider

To use the NVIDIA driver as an RandR 1.4 output source provider, the X server needs to be configured to use the NVIDIA driver for its primary screen and to use the “modesetting” driver for the other graphics device. This can be achieved by placing the following in /etc/X11/xorg.conf:

Section "ServerLayout"
    Identifier "layout"
    Screen 0 "nvidia"
    Inactive "intel"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID "<BusID for NVIDIA device here>"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration"
EndSection

Section "Device"
    Identifier "intel"
    Driver "modesetting"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

See “What is the format of a PCI Bus ID?” for information on determining the appropriate BusID string for your graphics card.

The X server does not automatically enable displays attached to the non-NVIDIA graphics device in this configuration. To do that, use the xrandr command line tool:

$ xrandr --setprovideroutputsource modesetting NVIDIA-0
$ xrandr --auto

This pair of commands can be added to your X session startup scripts, for example by putting them in $HOME/.xinitrc before running startx.

Use the

$ xrandr --listproviders

command to query the capabilities of the graphics devices. If the system requirements are met and the X server is configured correctly, there should be a provider named NVIDIA-0 with the Source Output capability and one named modesetting with the Sink Output capability. If either provider is missing or doesn't have the expected capability, check your system configuration.

Caveats