Nvidia-xrun - ArchWiki

# Nvidia-xrun

From ArchWiki
Jump to navigation Jump to search

Nvidia-xrun is a utility to allow Nvidia optimus enabled laptops run X server with discrete nvidia graphics on demand. This solution offers full GPU utilization, compatibility and better performance than Bumblebee.

X server can only be used with integrated graphics or discrete Nvidia graphics, but not both, so user might want to switch to separate virtual console and start another X server using different graphics from what was used for the first X server.

## Installation

This article or section is out of date.

Reason: As of nvidia-xrun release 0.4, the PM fork has been merged and bbswitch is no longer used. There may be changes to AUR packages and bbswitch configuration (Discuss in Talk:Nvidia-xrun#)

Install:

- nvidia
- bbswitch
- nvidia-xrunAUR, nvidia-xrun-gitAUR,
  - or nvidia-xrun-pmAUR if bbswitch doesn't support your hardware (see [1])
- a Window manager, such as openbox or xfce4-session，because running apps directly with `nvidia-xrun <application>` does not work well.

## Configuration

### Setting the right bus id

Note: If you installed package from AUR, the bus id has been automatically set in `/etc/X11/nvidia-xorg.conf`. Make sure the bus ID has been correctly set, otherwise change it (you can find correct bus ID using `lspci` command). In some cases you need to convert the hex output from `lspci` to decimal for nvidia-xorg.conf, e.g. 3b:00.0 becomes "PCI:59:0:0"

Find your display device bus id:

     $ lspci | grep -i nvidia | awk '{print $1}'

It might return something similar to `01:00.0`. Then create a file (for example `/etc/X11/nvidia-xorg.conf.d/30-nvidia.conf`) to set the proper bus id:

    /etc/X11/nvidia-xorg.conf.d/30-nvidia.conf

    Section "Device"
        Identifier "nvidia"
        Driver "nvidia"
        BusID "PCI:1:0:0"
    EndSection

Also this way you can adjust some nvidia settings if you encounter issues:

    /etc/X11/nvidia-xorg.conf.d/30-nvidia.conf

    Section "Screen"
        Identifier "nvidia"
        Device "nvidia"
        #  Option "AllowEmptyInitialConfiguration" "Yes"
        #  Option "UseDisplayDevice" "none"
    EndSection

### eGPU setup

You can also use this in an eGPU setup. Make sure to load the nvidia-modeset and nvidia-drm modules and add the option `Option "AllowExternalGpus" "true"` to the "Device" section.

Change the auto-generated configuration to use the internal display on devices with multiple NVIDIA cards:

    /etc/X11/nvidia-xorg.conf.d/30-nvidia.conf

    Section "ServerLayout"
      Identifier "layout"
      Screen 0 "nvidia" 0 0
      Inactive "intel"
      Option  "AutoAddGPU" "false"
    EndSection

    Section "Device"
      Identifier "nvidia"
      Driver "nvidia"
      BusID "PCI:9:0:0"
      Option "AllowExternalGpus" "true"
      Option "ProbeAllGpus" "false"
      Option "HardDPMS" "false"
      Option "NoLogo" "true"
      Option "UseEDID" "false"
    #    Option "UseDisplayDevice" "none"
    EndSection

    Section "Screen"
      Identifier "nvidia"
      Device "nvidia"
      Option "AllowEmptyInitialConfiguration" "Yes"
    #  Option "UseDisplayDevice" "None"
    EndSection

Remember to set the bus id to the correct graphics card.

### Automatically run window manager

For convenience you can create an `$XDG_CONFIG_HOME/X11/nvidia-xinitrc` file with your favourite window manager.

    if [ $# -gt 0 ]; then
      $*
    else
      openbox-session
      # Alternatively, you can also use xfce4:
      # xfce4-session
    fi

With it you do not need to specify the app and can simply execute:

    $ nvidia-xrun

### Use bbswitch to manage nvidia

When the nvidia card is not needed, bbswitch can be used to turn it off. The nvidia-xrun script will automatically take care of running a window manager and waking up the nvidia card. To achieve that, you need to:

- Load bbswitch module on boot

     # echo 'bbswitch ' > /etc/modules-load.d/bbswitch.conf

- Disable the nvidia module on boot:

     # echo 'options bbswitch load_state=0 unload_state=1' > /etc/modprobe.d/bbswitch.conf

After a reboot, the nvidia card will be off. This can be seen by querying bbswitch's status:

     $ cat /proc/acpi/bbswitch

To force the card to turn on/off respectively run:

     # tee /proc/acpi/bbswitch <<<OFF
     # tee /proc/acpi/bbswitch <<<ON

For more about bbswitch see Bumblebee-Project/bbswitch.

## Usage

Once the system boots, from the virtual console, login to your user, and run `nvidia-xrun <application>`.

If above does not work, switch to unused virtual console and try again.

As mentioned before, running apps directly with `nvidia-xrun <application>` does not work well, so it is best to create an `$XDG_CONFIG_HOME/X11/nvidia-xinitrc` as outlined earlier, and use `nvidia-xrun` to launch your window manager.

## Troubleshooting

### NVIDIA GPU fails to switch off or is set to be default

See #Use bbswitch to manage nvidia.

If Nvidia GPU still fails to switch off, or is somehow set to be default whenever you use or not `nvidia-xrun`, then you might likely need to blacklist specific modules (which were previously blacklisted by Bumblebee). Create this file and restart your system:

    /usr/lib/modprobe.d/nvidia-xrun.conf

    blacklist nvidia
    blacklist nvidia-drm
    blacklist nvidia-modeset
    blacklist nvidia-uvm
    blacklist nouveau

Make sure DRM kernel mode setting is disabled see NVIDIA#DRM kernel mode setting

Category:

- Graphics

Hidden category:

- Pages or sections flagged with Template:Out of date