我正在尝试使用 Xvfb,但由于某种原因它甚至无法运行 glxgears,而且我不知道如何调试它,也许我错过了一些东西。这是我正在使用的命令:
Xvfb :99 +extension GLX -screen 0 640x480x24
DISPLAY=:99 glxgears
glxgears 失败并显示以下错误消息:
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 151 (GLX)
Minor opcode of failed request: 3 (X_GLXCreateContext)
Value in failed request: 0x0
Serial number of failed request: 23
Current serial number in output stream: 24
编辑:我刚刚要求一位朋友运行相同的命令,它在他的电脑上运行,但由于某种原因在我的电脑上运行失败。有什么办法可以调试X吗?
答案1
对于尝试在无头服务器上使用 OpenGL 时遇到此问题的任何人:如果您安装了 NVIDIA GLX 驱动程序,但服务器中实际上没有 NVIDIA 卡,您可能会收到此消息(例如,如果在无头服务器上使用 AWS Deep Learning Base AMI没有 GPU 的机器)。
要确认,请尝试运行 X 服务器+iglx
(应该允许glxinfo
运行),并查看glxinfo
输出(例如xvfb-run -s '-screen 0 1400x900x24 +iglx' glxinfo
)是否报告client glx vendor string: NVIDIA Corporation
.如果是这样,请尝试切换到没有任何 NVIDIA 东西的 AMI。
答案2
您应该为客户端 (glxinfo) 和服务器 (xvfb) 使用 mesa(带 swrast 引擎)libgl。
在安装了 NVIDIA 和 mesa 的 Debian 9 上:
# LD_LIBRARY_PATH=/usr/lib/mesa-diverted/x86_64-linux-gnu Xvfb :99 +extension GLX -screen 0 640x480x24 &
[1] 16936
# LD_LIBRARY_PATH=/usr/lib/mesa-diverted/x86_64-linux-gnu DISPLAY=:99 glxgears
6374 frames in 5.0 seconds = 1274.743 FPS
^C
如果您没有nvidia卡,只需卸载nvidia驱动程序即可。如果您希望默认使用 mesa 并保持安装 nvidia,您可以使用glx-diversions