I’m trying to access Slicer installed on a server through tigervnc client. But I get the following error
[user@server ~]$ vglrun glxgears
No protocol specified
Error: couldn't open display :0
[user@server ~]$ vncserver -list
TigerVNC server sessions:
X DISPLAY # PROCESS ID
:1 10902
:5 14662
[user@server ~]$ export DISPLAY=:1
[user@server ~]$ cd Slicer-4.11.0-2020-05-19-linux-amd64/
[user@server Slicer-4.11.0-2020-05-19-linux-amd64]$ vglrun ./Slicer
No protocol specified
[VGL] ERROR: Could not open display :0.
vtkDebugLeaks has found no leaks.
I’ve used export DISPLAY=:1 and I still get [VGL] ERROR: Could not open display :0.
Any help?
Particularly did you run the vglserver_config after installtin the VGL? If so, did you restricted the framebuffer access to vglusers (which is default). You may have to add your user to vglusers groups.
I didn’t add the display flag last time. After adding the display flag I get,
I think the issue that currently occurs is due to the above reason that you mentioned
vglrun -d :1 glxgears
[VGL] NOTICE: Automatically setting VGL_CLIENT environment variable to
[VGL] xx.x.x.xx, the IP address of your SSH client.
failed to create drawable
[VGL] ERROR: in OGLDrawable–
[VGL] 82: Could not create Pbuffer
If you are remoting into your session via vnc directly, you really don’t need to set the display parameter.
To me error still tell me that the user is not part of the vglusers group, and VGL doesn’t have permission to access the framebuffer.
if you say
> id $USER
do you see vglusers group listed in the output, otherwise it won’t work.
Good to hear. We have been using VGL for a while, almost never had any installation/configuration issues for vanilla centos or ubuntu. Love to hear your use case.
eglinfo accesses the DRI devices in the same way that VirtualGL does, so if eglinfo egl works, that suggests that VGL_DEVICE=egl should work. As to why the specific DRI devices don’t work, I have no idea. Perhaps the user account does not have appropriate permissions for the matching /dev/dri/render * devices? Did you run vglserver_config in the container?
The key here is that VGL_DEVICE=egl should work.
That means setting the option -d egl on vglrun according to its help-text.
So our corrected command is: DISPLAY=$VNCDISPLAY sh /opt/VirtualGL/bin/vglrun -d egl path/to/slicer/Slicer