运行OpenGL程序时,ubuntu 16.04给出“X错误请求失败:BadValue(整数参数超出操作范围)”
我在机上有两个显卡,一个是集成在Intel cpu中,一个是nvidia卡。
我想使用集成的一个渲染桌面,NV卡用cuda计算。 我在“NVIDIA X服务器设置”中切换使用集成的一个,在我安装了“nvidia-modprobe”后,它按照我想要的方式工作。
但是当我运行glxinfo时,glx的问题出在哪里。
name of display: :0 X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 154 (GLX) Minor opcode of failed request: 24 (X_GLXCreateNewContext) Value in failed request: 0x0 Serial number of failed request: 37 Current serial number in output stream: 38
在xorg日志中它是libglx.so
[ 3.597] (II) "glx" will be loaded by default. [ 3.597] (II) LoadModule: "glx" [ 3.599] (II) Loading /usr/lib/xorg/modules/extensions/libglx.so [ 3.612] (II) Module glx: vendor="X.Org Foundation"
有没有办法让glx正常运行?
解决了,我已经设置了我想要的东西。 我在GitHub上发布了如下所示的答案。
删除所有Nvidia软件包并重新安装xorg软件包。
sudo apt-get purge nvidia* sudo apt-get install --reinstall xserver-xorg-video-intel libgl1-mesa-glx libgl1-mesa-dri xserver-xorg-core sudo dpkg-reconfigure xserver-xorg
安装cuda8。 你需要:
按Crtl + Alt + F1键。
sudo service lightdm stop sudo init 3
我使用cuda8 .run文件来安装它,然后安装它会提示你是否要安装nvidia卡驱动程序?
选择是。
它会提示你是否要安装nvidia opengl?
选择否,这是一个至关重要的选择,如果你在这里说“是”它将涵盖“mesa *”库。
在此之后,选择默认值。
安装完成后,重启。
sudo reboot
将NVIDIA驱动程序降级至340.12
以前默认为384.11。
这可以通过software-properties-gtk
“附加驱动程序”选项卡轻松完成。
然后重启。
Ubuntu 16.04,NVIDIA Corporation GF119 [NVS 310]。
还有类似的Steam问题: Steam不会在Ubuntu 16.04上启动
这个问题可以通过最小的GLUT hello世界重现:
#include #include int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitWindowSize(800, 600); glutInitWindowPosition(200, 100); glutCreateWindow(argv[0]); glutMainLoop(); return EXIT_SUCCESS; }
我有相同的错误消息,但它是由glutInitContextVersion(4,0 )引起的; 因为我的硬件不支持OpenGL 4.0我改变了对glutInitContextVersion(3,3)的调用; 事情变得很好。 我使用的是专有的NVidia驱动程序。
另一种可能出现此错误的情况是,当您在chroot环境中运行时尝试运行OpenGL窗口时。 这篇文章建议在lightdm的xserver-command中添加+ iglx,这解决了我的问题。 由于另一个答案没有在谷歌上突出显示,因此将此答案放在此处以供查看。
对于任何到达此问题的人试图在无头服务器上使用OpenGL:如果您安装了NVIDIA GLX驱动程序,但在服务器中实际上没有NVIDIA卡,则可能也会收到此消息(例如,如果使用AWS Deep Learning Base AMI在没有GPU的机器上)。
要确认,尝试运行带有+iglx
的X服务器(应该允许glxinfo
运行),并查看glxinfo
输出(例如xvfb-run -s '-screen 0 1400x900x24 +iglx' glxinfo
)是否报告client glx vendor string: NVIDIA Corporation
。 如果是,请尝试切换到没有任何NVIDIA内容的AMI。