NVIDIA graphics card accessible by one user but not another

I have a workstation with an nVidia graphics card (Quadro K2200) and have installed the latest drivers from the nVidia repository:


nvidia-computeG04        
nvidia-gfxG04-kmp-default
nvidia-glG04             
x11-video-nvidiaG04      

When executing glxinfo from user1 I receive the proper information regarding the graphics driver:


$ glxinfo | grep -i opengl
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: Quadro K2200/PCIe/SSE2
OpenGL core profile version string: 4.5.0 NVIDIA 390.25
OpenGL core profile shading language version string: 4.50 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6.0 NVIDIA 390.25
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 390.25
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

When I execute the same command from user2, I get the following error:


$ glxinfo | grep -i opengl
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  153 (GLX)
  Minor opcode of failed request:  24 (X_GLXCreateNewContext)
  Value in failed request:  0x0
  Serial number of failed request:  76
  Current serial number in output stream:  77

From what I can gather about library paths, they look identical:

User 1:


$ ldd `which glxinfo`                             
    linux-vdso.so.1 (0x00007ffc918b8000)
    libGL.so.1 => /usr/X11R6/lib64/libGL.so.1 (0x00007f25a639e000)
    libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f25a6060000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f25a5cbb000)
    libnvidia-tls.so.390.25 => /usr/lib64/tls/libnvidia-tls.so.390.25 (0x00007f25a5ab7000)
    libnvidia-glcore.so.390.25 => /usr/lib64/libnvidia-glcore.so.390.25 (0x00007f25a3cf4000)
    libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f25a3ae2000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f25a38de000)
    libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f25a36be000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f25a66db000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f25a33c1000)
    libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f25a31bd000)

User 2:


$ ldd `which glxinfo`
    linux-vdso.so.1 (0x00007ffe0a5c5000)
    libGL.so.1 => /usr/X11R6/lib64/libGL.so.1 (0x00007f7b3dd34000)
    libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f7b3d9f6000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f7b3d651000)
    libnvidia-tls.so.390.25 => /usr/lib64/tls/libnvidia-tls.so.390.25 (0x00007f7b3d44d000)
    libnvidia-glcore.so.390.25 => /usr/lib64/libnvidia-glcore.so.390.25 (0x00007f7b3b68a000)
    libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f7b3b478000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f7b3b274000)
    libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f7b3b054000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7b3e071000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f7b3ad57000)
    libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f7b3ab53000)

The two users both have similar permissions, except for the fact that user1 is in the wheel group, which I set to allow sudo.

Can anyone give me a clue about what may be wrong here?

For the curious, here is a link to my Xorg log file: https://gist.github.com/cbcoutinho/377dfcf7735c337874919a8e819881ad

Ok I think I determined what the issue is, but I’m still confused with how a graphics driver works.

I was testing user1 and user2 by being logged into an xsession with user1, and switching to user2 within the terminal (ie. su - user2)

When I logged out of user1 and into an xsession with user2, glxinfo worked as expected and I was no longer able to able to use switch to user1 and execute glxinfo.

What I want to do is access this workstation remotely using the Visualization tool ‘ParaView’. ParaView can start data and render server remotely via ssh, and I’ve been successful in doing this when the server is logged in as the user I want to start the server as. I would like to be able to start a server remotely without needed to be logged into the remote machine with the same user.

When you login to a graphical session, your user is given full access rights to the hardware by logind, which is necessary for hardware OpenGL support e.g.

But this doesn’t happen if you just use su to switch to a different user.

As a workaround, you probably could add the users to the “video” group, so they always have full access to the graphics card.

I see a different possible problem with ssh though, AFAIK nvidia doesn’t support indirect rendering since quite some time.
So it might still not work via ssh, but I’m not sure…

Hi @wolfi323,

Thanks for your tip, adding both users to the video group allows me remote access to the GPU.

Cheers!