在无头服务器或虚拟控制台上使用EGL

时间:2017-01-17 23:26:44

标签: linux egl

我正在尝试在没有X服务器的环境中使用EGL。出于测试目的,我创建了一个试图获得EGL版本的简单程序:

$ cat version.c
#include <stdio.h>

#include <EGL/egl.h>

int main() {
  EGLDisplay eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);

  EGLint major;
  EGLint minor;

  EGLBoolean eglInitialized = eglInitialize(eglDisplay, &major, &minor);

  printf("%d %d %d\n", major, minor, eglInitialized);


  return 0;
}

$ gcc version.c -lEGL

当我在标准的Ubuntu机器上运行它时,它运行得很好并打印1 4 1,这意味着EGL是版本1.4并且显示已成功初始化。

要模拟我最终想要运行的服务器环境,我切换到Ctrl + Alt + F1的虚拟控制台,但现在它失败了:

$ ./a.out
libEGL warning: DRI3: xcb_connect failed
libEGL warning: DRI2: xcb_connect failed
libEGL warning: DRI2: xcb_connect failed
0 4196000 0

远程服务器上也发生了同样的事情。

1 个答案:

答案 0 :(得分:0)

我不是这里的专家,但我认为我足够充分地回答这个问题(虽然现在你很久以前就已经解决了)。您正在尝试使用默认显示,即系统上的X11。对于无头你可能想要使用gbm,假设你使用的是一个使用相对较新的Mesa GL库和支持它的内核(Linux或其他)的系统。

有关示例,请参阅Mesa eglinfo演示[1],有关渲染的示例,请参阅eglkms [2]。您可能希望省略设置模式的位并创建并显示帧缓冲区,您可能需要使用/ dev / dri / renderD128而不是/ dev / dri / card0。

[1] https://cgit.freedesktop.org/mesa/demos/tree/src/egl/opengl/eglinfo.c [2] https://cgit.freedesktop.org/mesa/demos/tree/src/egl/opengl/eglkms.c