User Tools

Site Tools


wiki:development:glx-xlib-workaround

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
wiki:development:glx-xlib-workaround [2015/03/07 02:45]
mikedep333 created
wiki:development:glx-xlib-workaround [2020/06/02 19:11]
uli42 [Matlab 2019b]
Line 1: Line 1:
-Workaround for getting GLX 1.4 working.+====== Workaround for getting GLX 1.4 working ======
  
-Applications will use libGL.so, which in turn uses the xlib interface to talk to the X server (nxagent) rather than the GLX interface.+===== Symptoms =====
  
-From the applications' perspective, they have GLX 1.4.+  * Gnome-based and other applications report messages like ''"Failed to initialize gtk+: Unable to initialize the Clutter backend: no available drivers found."'' 
 +  * ''glxinfo'' reports GLX Version is 1.2 
 +  * Disabling GLX entirely in ''/etc/x2go/x2goagent.options'' via ''-extension GLX'' does not work because the application does not have the capability to work without GLX at all. 
 + 
 +===== Approach ===== 
 + 
 +Use a wrapper/proxy library provided by Mesa. The applications will use the supplied libGL.so, which in turn uses the lib interface to talk to the X server (nxagent) rather than the GLX interface. From the applications' perspective, they have GLX 1.4. 
 + 
 + 
 +==== Mesa 19 and newer ==== 
 +Please note: the instructions below are valid for olter Mesa releases. In Mesa 19 //meson// is recommended for building. Please consult https://mesa3d.org/llvmpipe.html for a basic compilation instruction. Since those instructions will not work out of the box (Error: "gallium-xlib conflicts 
 +with any dri driver") as of Mesa 19.3.2 you need to call //meson// with some further parameters like this: 
 +<code> 
 +$ meson -D glx=gallium-xlib -D gallium-drivers=swrast -D platforms=x11 -D dri3=false -D dri-drivers="" -D vulkan-drivers="" -D buildtype=release -D optimization=3 
 +$ ninja 
 +</code> 
 + 
 +==== Debian Buster and Mesa 19.3.2 ==== 
 + 
 +<code> 
 +$ (download and extract tarball from mesa3d.org) 
 +$ cd mesa-19.3.2 
 +$ mkdir build 
 +$ cd build 
 +$ meson -D glx=gallium-xlib -D gallium-drivers=swrast -D platforms=x11 -D dri3=false -D dri-drivers="" -D vulkan-drivers="" -D buildtype=release -D optimization=3 
 +$ ninja 
 +$ LD_LIBRARY_PATH=`pwd`/src/gallium/targets/libgl-xlib/:${LD_LIBRARY_PATH} glxinfo | grep 'GLX version:' 
 +</code> 
 + 
 +If you want you can copy the libgl-xlib directory to some location of your likes and write a small wrapper "x2goglx" for starting GLX applications: 
 +<code> 
 +#!/bin/sh 
 +LD_LIBRARY_PATH=<your directory>/libgl-xlib exec "$@" 
 +</code> 
 + 
 +<code> 
 +$ chmod u+rx x2goglx 
 +$ x2goglx glxinfo 
 +</code> 
 +==== Ubuntu 14.04 ==== 
 + 
 +(with trusty-updates mesa 10.1.3-0ubuntu0.3)
  
-Ubuntu 14.04 (with trusty-updates mesa 10.1.3-0ubuntu0.3): 
 <code> <code>
 sudo aptitude build-dep mesa sudo aptitude build-dep mesa
Line 15: Line 55:
 glxinfo | grep 'GLX version:' glxinfo | grep 'GLX version:'
 </code> </code>
 +
 +==== Gentoo ====
 +
 +Ensure that some required tools are installed:
 +
 +<code>
 +emerge -1av app-portage/gentoolkit dev-util/scons dev-python/mako
 +</code>
 +
 +Create a place to store the library - adapt this path to your liking.
 +<code>
 +mkdir -p /usr/local/share/mesa-libgl-xlib
 +</code>
 +
 +Place the following line in a suitable place - either in your .bashrc or in the script that calls the individual application:
 +<code>
 +export LD_LIBRARY_PATH=/usr/local/share/mesa-libgl-xlib/:${LD_LIBRARY_PATH}
 +</code>
 +
 +Configure portage to extract and patch the Mesa package into a known location. Before doing so, ensure that the USE flags for media-libs/mesa are configured to your liking.
 +
 +<code>
 +mesa_version="$(equery -q list media-libs/mesa -F '$version')"
 +ebuild "/usr/portage/media-libs/mesa/mesa-${mesa_version}.ebuild" prepare
 +</code>
 +
 +Now compile the library and move it over to the storage location:
 +<code>
 +cd "/var/tmp/portage/media-libs/mesa-${mesa_version}/work/mesa-${mesa_version}"
 +scons libgl-xlib
 +cp -av build/linux-x86_64-debug/gallium/targets/libgl-xlib/* /usr/local/share/mesa-libgl-xlib/
 +</code>
 +
 +Cleanup:
 +
 +<code>
 +ebuild "/usr/portage/media-libs/mesa/mesa-${mesa_version}.ebuild" clean
 +</code>
 +
 +===== Matlab 2019b =====
 +
 +Compile like this:
 +```
 +meson -D glx=gallium-xlib -D gallium-drivers=swrast -D platforms=x11 -D dri3=false -D dri-drivers="" -D vulkan-drivers="" -D buildtype=release -D optimization=3 -Dprefix=/usr/local/mesa-20.1.0/
 +```
 +
 +To make Matlab load the new driver modify Matlab's lib search path:
 +cp $MATLAB_DIRECTORY/bin/.matlab7rc.sh ~
 +
 +Edit the file ~/.matlab7rc.sh, find the glnxa* section and add the path to you mesa library, e.g. /usr/local/mesa-20.1.0/lib/x86_64-linux-gnu, to LDPATH_PREFIX
 +
 +Add to your .profile: export MESA_GL_VERSION_OVERRIDE=3.0
wiki/development/glx-xlib-workaround.txt · Last modified: 2021/10/25 21:01 by uli42