setting GLX provider in two concurrent X servers

/dev/fra devfra at
Mon Oct 22 22:48:37 BST 2018

Hi everyone,

I hope this is the correct ML to discuss this topic, if not please redirect me
to the appropriate one.

I have an Optimus laptop and I am trying to set up two different X servers, so
that the 'main' one is running on the Intel integrated graphics card and a
secondary one is running on the NVIDIA discrete graphics card (basically what
nvidia-xrun [1] does).

I succeeded so far but I would like to know if there is a way to set a
specific GLX provider per each X server, and not system wide, via
update-alternatives or other means.

About my setup:

- Debian Buster with nvidia driver (396.54-1) from the Debian Experimental

- the NVIDIA graphics card is turned on via bbswitch with:
      $ sudo tee /proc/acpi/bbswitch <<<ON

- and the nvidia kernel modules are loaded with:
      $ sudo modprobe nvidia-current-drm

- for the second X server instance a custom xorg.conf is provided, as per
  NVIDIA documentation [2]

- before starting the second X server, the GLX provider is set with
      $ update-alternatives --set glx /usr/lib/nvidia

- and then the second X server is run from a free tty with:
      $ xinit my-custom-xinitrc -- :1 vt$XDG_VTNR -nolisten tcp \
         -br -config my-custom-xorg.conf

Now, by using update-alternatives I set globally the GLX provider, but this
means that I can use the graphical acceleration capabilities only in one of
the two X servers, e.g.:

- glx set to /usr/lib/nvidia
  --> glxgears fails on the first X server with the Intel igpu
  --> glxgears works on the second X server whit the Nvidia dgpu

As an alternative way, I am trying to not set the GLX provider via
update-alternatives and instead using an additional xorg configuration snippet
for the second X server, this one:

    $ cat /etc/nvidia/nvidia-drm-outputclass.conf
    Section "Files"
        ModulePath     "/usr/lib/nvidia/current/modules"
        ModulePath     "/usr/lib/xorg/modules"

    Section "OutputClass"
        Identifier     "nvidia"
        MatchDriver    "nvidia-drm"
        Driver         "nvidia"

As is, this snippet does not work and the second X server fails to start with
it. But if I change the first ModulePath entry with "/usr/lib/nvidia" or
"/usr/lib/nvidia/current" it works, almost.

In fact, in this way I can run glxgears in the two X server instances and with
the correct drivers ("glxgears -info" say so, Mesa for the first one, NVIDIA
for second one), but in the second X server Vulkan applications do not work
and EGL is provided by MESA instead of NVIDIA.

What am I missing here?



More information about the pkg-nvidia-devel mailing list