I am a reluctant sysadmin who inherited the responsibility for configuring a RHEL 6.7 server (operating inside a VMware virtual machine) to replace an old physical server.

On this new server, certain X11 applications do not work correctly when the user is logged in to this server remotely via ssh and tunneling X protocol. Specifically, the FreeSurfer suite of neuroscience applications do not work remotely through ssh. However, if the user runs the same program with the same options as the same user in a local session on the server (accessed remotely via NoMachine instead of ssh), it runs just fine.

For example, the following command displays the right hemisphere of the brain from MRI data contained in the mySubject folder using the brain region colors designated in the aparc.annot file:

tksurfer mySubject rh pial -annotation aparc.annot

In a local session on the server, it runs without error. If the user logs in remotely via ssh -Y user@hostname (tunneling the X display to their CentOS 6 PC), the user gets the following error:

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

I did some digging on the net and found that these error messages are typically associated with an application that requires Nvidia drivers to be installed. I have been reluctant to install Nvidia drivers for fear of potentially screwing up the X server.

Is anyone out there running RHEL inside a VMware environment successfully with Nvidia drivers installed? If so, what was your procedure for installing the drivers in a way that maintains compatibility with the virtual machine environment?

When I run lspci | grep VGA on this server, I get the following output:

00:0f.0 VGA compatible controller: VMware SVGA II Adapter
  • which X11 server are your remote users running when they to tunnel through SSH? – nagu Apr 4 '16 at 11:52
  • @nagu The user is running the Xorg X server, from the xorg-x11-server-Xorg-1.15.0-36.el6.centos.x86_64 package. The user has kmod-nvidia driver packages installed locally on their Linux PC (these are not installed on the server, which is inside a VM). – Matt Apr 4 '16 at 21:08

You want to render the app remotely, and just stream the result to your node.
One solution would be to use virtualgl (possibly with turbovnc for simplicity): https://cdn.rawgit.com/VirtualGL/virtualgl/2.5/doc/index.html https://cdn.rawgit.com/TurboVNC/turbovnc/2.0.x/doc/index.html

Basically you would want to install virtualgl, install turbovnc, and follow the procedure in https://cdn.rawgit.com/TurboVNC/turbovnc/2.0.x/doc/index.html#hd009 :


Follow the procedure described in Chapter 6 for starting a TurboVNC session and connecting to it.
Open a new terminal inside the TurboVNC desktop.
In the same terminal window, open a Secure Shell (SSH) session into the VirtualGL server:

/opt/VirtualGL/bin/vglconnect {user}@{server}

Replace {user} with your username on the VirtualGL server and {server} with the hostname or IP address of that server. Refer to the VirtualGL User’s Guide for additional vglconnect options.
In the SSH session, set the VGL_COMPRESS environment variable to rgb

Passing an argument of -c rgb to vglrun achieves the same effect.
In the SSH session, start a 3D application using VirtualGL:

/opt/VirtualGL/bin/vglrun [vglrun options] {application_executable_or_script} {arguments}

A completely different approach would be to pass the nvidia pci device through to the vm using GPU-PASSTHROUGH. This requires support from both the bios and the host OS IIRC, but would allow you to use the nvidia drivers directly inside the VM.
Please note vmware support for nvidia passthrough seems to be only for grid products, not their consumer-grade geforce products.
A few links to such solutions:



There are others, I'm just not sure your use case is appropriate for this approach.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.