Re: Headless OpenGL Rendering using SSH and X11 forwarding

Mario Kleiner <[email protected]>
Newsgroups gmane.comp.video.mesa3d.devel
Message-ID <CAEsyxyiiAO71fJiYCiOyw=4MDdP3S2mz4kgi8fn=fKBqU8W1ow@mail.gmail.com>
I think this might be because indirect GLX support is disabled by default
on X-Servers shipping in Ubuntu, so if your remotely executing client tries
to use your local X-Server over the network via the x forwarding, it will
fail. I guess without x forwarding Mesa just renders locally on the remote
machine with a software renderer. See "man xorg.conf", the section about
Option "IndirectGLX" "boolean".


On Wed, Mar 8, 2023 at 2:17 AM Richard Haney <[email protected]> wrote:

> Please help,
>
> I have been going around and around with this problem but cannot seem to
> make any headway. I hope that one of you OpenGL EGL experts can help. [image:
> :slight_smile:]
>
> I have created a program that uses OpenGL EGL (version 1.5) with OpenGL 3
> that successfully renders an offscreen triangle and saves it to an image
> file (PNG) when I ssh *without* X11 forwarding on my Linux (Ubuntu 22.04)
> machine.
>
> However when I try the same thing using ssh *with* X11 forwarding enabled
> I get the following EGL error when I call eglInitialize(…): 12290 (I
> *think* is EGL_BAD_ACCESS).
>
> This seems really weird and I hope it is something simple that I am just
> not currently seeing.
>
> I really like using OpenGL with EGL but need a way to remedy this
> situation if possible. Is there a way for EGL to determine if X11
> forwarding is being employed and to ignore it or some other solution?
>
> The snippet of relevant C++ code follows, with area where error occurs
> marked:
>
> #include <iostream> #include <cstdlib> #include <EGL/egl.h> #define
> EGL_EGLEXT_PROTOTYPES #define GL_GLEXT_PROTOTYPES #include <EGL/eglext.h>
> #include <GL/gl.h> ... EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
> if(display == EGL_NO_DISPLAY) { std::cerr << "Failed to get EGL display: "
> << eglGetError() << std::endl; exit(EXIT_FAILURE); } EGLint major; EGLint
> minor; if(eglInitialize(display, &major, &minor) == EGL_FALSE) { // ERROR
> 12290 is generated here std::cerr << "Failed to initialize EGL: " <<
> eglGetError() << std::endl; exit(EXIT_FAILURE); } ...
>
>
> Any help would be greatly appreciated.
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.