GLX扩展不能与xvfb一起正常工作


15

我有一个Ubuntu 14.04系统,安装了以下软件包:

libegl1-mesa:amd64
libegl1-mesa-drivers:amd64
libgl1-mesa-dri:amd64
libgl1-mesa-dri:i386
libgl1-mesa-glx:amd64
libgl1-mesa-glx:i386
libglapi-mesa:amd64
libglapi-mesa:i386
libgles2-mesa:amd64
libglu1-mesa:amd64
libopenvg1-mesa:amd64
libwayland-egl1-mesa:amd64
mesa-utils
xvfb

我想在xvfb下启动一个应用程序。我首先使用以下命令启动xvfb:

$ Xvfb :1 -screen 0 1024x768x24 +extension GLX +render -noreset >> xsession.log 2>&1 &

然后检查xvfb日志文件:

Initializing built-in extension Generic Event Extension
Initializing built-in extension SHAPE
Initializing built-in extension MIT-SHM
Initializing built-in extension XInputExtension
Initializing built-in extension XTEST
Initializing built-in extension BIG-REQUESTS
Initializing built-in extension SYNC
Initializing built-in extension XKEYBOARD
Initializing built-in extension XC-MISC
Initializing built-in extension SECURITY
Initializing built-in extension XINERAMA
Initializing built-in extension XFIXES
Initializing built-in extension RENDER
Initializing built-in extension RANDR
Initializing built-in extension COMPOSITE
Initializing built-in extension DAMAGE
Initializing built-in extension MIT-SCREEN-SAVER
Initializing built-in extension DOUBLE-BUFFER
Initializing built-in extension RECORD
Initializing built-in extension DPMS
Initializing built-in extension Present
Initializing built-in extension DRI3
Initializing built-in extension X-Resource
Initializing built-in extension XVideo
Initializing built-in extension XVideo-MotionCompensation
Initializing built-in extension SELinux
Initializing built-in extension GLX

没有任何错误。此外,似乎GLX已正确加载。现在,如果我用以下命令检查服务器

$ glxinfo -display :1

我懂了

name of display: :1
Xlib:  extension "GLX" missing on display ":1".
...
Error: couldn't find RGB GLX visual or fbconfig
Xlib:  extension "GLX" missing on display ":1".
...
Error: couldn't find RGB GLX visual or fbconfig

Xlib:  extension "GLX" missing on display ":1".
...

实际上,我要在此服务器上启动且需要GLX的应用程序无法启动。

在检查了几个文档页面和论坛之后,我不知道这里出了什么问题。如果GLX扩展名未正确加载,为什么X服务器日志文件没有显示任何错误?我应该检查些什么吗?


在Xvfb的Wiki页面[1]中说:“与真正的显示服务器不同,Xvfb不支持现代X11扩展,例如合成,Randr或GLX。Xdummy是一种较新的替代方案,它支持这些扩展并提供与Xvfb相同的功能。 。” [1] en.wikipedia.org/wiki/Xvfb
alpert 2014年

@alpertek,您应该将其发布为答案。GLX通常需要特定于芯片的驱动程序才有用。
XTL 2015年

3
以上评论不正确。我们在OpenSCAD测试套件中的Xvfb上使用GLX已有数年了。bugzilla.redhat.com/show_bug.cgi?id=904851
穿上鲜艳的

好吧,与此同时,Wiki中的注释已被删除。en.wikipedia.org/w/...
弗拉迪米尔·Čunát

Answers:


2

Xvfb(X虚拟帧缓冲区)是Xsever虚拟的,不支持真正的硬件加速。

您需要生成带有virtualGL的 openGL调用,并 通过真实的3D Xserver和2d渲染将真实的调用分叉到Xvfb或另一个2D Xserver。

$ Xvfb :1 -screen 0 1024x768x24 +extension GLX +render -noreset >> xsession.log 2>&1 &
$ env DISPLAY=:1 vglrun glxinfo 

虽然它不支持真正的硬件加速,但它很好地支持Mesa(软件GLX)-我前一段时间检查过(仍在2018年)。因此,您当然无需选择使用真正的3D Xserver。
dirkt

1

在我的日志文件中,我看到初始化内置扩展GLX一切正常,但随后出现

The XKEYBOARD keymap compiler (xkbcomp) reports:
> Internal error:   Could not resolve keysym XF86AudioMicMute
Errors from xkbcomp are not fatal to the X server

可能关键问题在于xkbcomp?


1

在Xvfb的Wiki 页面上说:“与真正的显示服务器不同,Xvfb不支持现代X11扩展,例如合成,Randr或GLX。Xdummy是一种较新的替代方案,它支持这些扩展并提供与Xvfb相同的功能。”


有关更多信息,请使用Xdummy -h(在Arch Linux上没有x11vnc 0.9.13-6版本的手册页)。
Lekensteyn

7
这个答案是不正确的。在无头的OpenSCAD测试套件中,我们在Linux的Xvfb上使用GLX已有数年。bugzilla.redhat.com/show_bug.cgi?id=904851 Wiki已更新,该行已删除。
不要亮
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.