xpra icon
Bug tracker and wiki

Version 24 (modified by mviereck, 5 weeks ago) (diff)

--

http://xpra.org/icons/opengl.png

OpenGL Applications

You can run OpenGL applications in an xpra session in a number of ways:

  • by default the wiki/Xdummy display server supports software opengl - but proprietary graphics drivers may interfere with this (glvnd should eventually solve this issue), and it will not use any GPU acceleration
  • by using VirtualGL, which delegates OpenGL acceleration to a real GPU - see below
  • by running the xpra session directly on a "real" X11 server using a standard accelerated display driver - this is hard to setup and undocumented: you need to use the xvfb switch to start an accelerated X11 server (modified xorg.conf), or use the --use-display switch to bind to an existing one
  • by shadowing an existing accelerated X11 server (sub-optimal, slow)
  • Using Xwayland and a wayland compositor. In X11 you can use weston as compositor. Start weston, open terminal in it, and start xpra server with xvfb switch to use Xwayland:
    xpra start :20 --xvfb "/usr/bin/Xwayland -rootless -noreset"
    
    To run this setup in a script, you can either look for wayland socket in XDG_RUNTIME_DIR or specify a custom one and set environment variable WAYLAND_DISPLAY:
    weston --socket=/tmp/mycustomsocket  &
    export WAYLAND_DISPLAY=/tmp/mycustomsocket 
    xpra start :20 --xvfb "/usr/bin/Xwayland -rootless -noreset"
    


This is not related at all to the OpenGL client rendering: you can connect with any client you want, accelerated or not.

VirtualGL setup

Usually, you can just vglrun your application and things will "just work". That is the case for simple applications like glxgears / glxspheres.

You can also ensure that all your client applications are launched using vglrun by using the exec-wrapper option in your configuration file.

Note: applications launched in this way are tied to two displays: the one they run on which started by xpra and the one that provides the opengl acceleration, if either one of those displays is stopped then the application will crash.


Other applications may require more complicated workarounds, see the extensive VirtualGL documentation for details, in particular 12: Using VirtualGL with setuid/setgid Executables.

Caveat: for some unknown reason, you may need to use /etc/ld.so.preload instead of LD_PRELOAD to make some suid applications work through xpra. (#898) Temporary solution:

$ mv /etc/ld.so.preload /etc/ld.so.preload.saved >& null
$ echo "/usr/lib64/VirtualGL/libdlfaker.so /usr/lib64/VirtualGL/libgefaker.so /usr/lib64/VirtualGL/librrfaker.so" > /etc/ld.so.preload
$ vglrun yourapp
$ rm /etc/ld.so.preload
$ mv /etc/ld.so.preload.saved /etc/ld.so.preload >& null

If you application is suid, you may also need to chmod it.

OpenGL Performance

Some performance measurements can be found here: wiki/Usage/OpenGL/Performance.