I'm interested in forwarding an X11 session over SSH, in order to launch a remote process that utilizes OpenGL (specifically, gazebo for anyone familiar.)

The problem that I seem to be running into is that gazebo crashes due to a mismatch in the graphics cards; it can't find "NV-GLX" extensions. The exact error output:

Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
X Error of failed request:  GLXUnsupportedPrivateRequest
  Major opcode of failed request:  149 (GLX)
  Minor opcode of failed request:  16 (X_GLXVendorPrivate)
  Serial number of failed request:  24
  Current serial number in output stream:  25

The remote machine is running with an NVIDIA card, and my local machine is using an AMD card.

I've tested X11 forwarding of gazebo between two machines with NVIDIA cards. It works just fine.

As near as I can tell, it seems that one of three things are happening:

  1. I'm doing something wrong,
  2. What I want to do is impossible,
  3. Gazebo doesn't build in an agnostic manner with branching codepaths for different hardware; whatever your system looks like when it builds is what you get.

The remote machine is running Ubuntu and my local machine is a Mac running 10.8.2; I already know that I have x11 forwarding set up properly for normal use as I can get things like xclock to open up in XQuartz just fine. The solution (if it exists) would also preferably work for other OS's including Windows over WinSCP.

1 Answer 1


A few notes from the GLX Wikipedia article:

GLX [is] An extension of the X protocol, which allows the client (the OpenGL application) to send 3D rendering commands to the X server (the software responsible for the display). The client and server software may run on different computers.


If client and server are running on the same computer and an accelerated 3D graphics card using a suitable driver is available, the former two components can be bypassed by DRI. In this case, the client application is then allowed to directly access the video hardware through several API layers.

I believe the fist point answers your question about whether this is possible or not: it should certainly be possible. The second may provide an explanation for why your client program insists on using features of its local X server (the NV GLX driver) -- perhaps it thinks that localhost:10.0 is the same computer, and so attempted a direction connection.

Things to try:

  1. Instead of gazebo, try glxdemo.
  2. If possible, get the two computers on the same network, and take ssh out of the picture
  3. The big gun: strace your gazebo invocation, and figure out why it's loading nv-glx

Good luck!

  • The computers are already on the same network, but we'd like to move all of our gazebo machines in to a server closet at some point but still have the software's visuals available to us which is why I'm looking in to SSH tunneling. Unless you're saying that having them on the same network allows for a different configuration that makes SSH not necessary (I'm guessing setting up some crazy xhost/client setup, I don't know much about X11). May 16, 2013 at 12:06
  • No need for ssh - if this all your private network of trusted systems, try xhost + on your local machine and set your DISPLAY on the remote system to 'ip-or-name-of-local:0`
    – ckhan
    May 16, 2013 at 13:27
  • 1
    I was unable to get gazebo to work, but I'm marking this as the accepted answer because your suggestions were technically correct. I am able to tunnel glxdemo using all of the suggestions you made (ssh and xserver/xclient over the network) but Gazebo itself just seems to not build branching code paths and it assumes that it own't be run in this weird configuration. Thanks!. May 20, 2013 at 12:57
  • There is gazebo web and it is really amazing, you can start a gazebo server on a remote machine (even WAN), tunnel with ssh and open your browser to see gazebo there. Best solution ever.
    – Mehdi
    Nov 22, 2019 at 14:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .