运行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上发布了如下所示的答案。

  1. 删除所有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 
  2. 安装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。