ubuntu 16.04 gives "X Error of failed request: BadValue (integer parameter out of range for operation)" when running OpenGL programs

I have two two graphic card on board, one is the integrating in Intel cpu, one is the nvidia card.

I want use the integrating one to render desktop, the NV card to calculate with cuda. I switch to use the integrating one in "NVIDIA X Server settings", after I installed the "nvidia-modprobe" it's worked as i want.

but where is a issue with glx, when i run glxinfo.

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

In the xorg log it libglx.so in

[     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"

Is there a way i can get the glx runing correctly?


Solution 1:

Solved, I have setup what I want. I posted the answer shown below at GitHub.

  1. Remove all Nvidia packages and reinstall xorg packages.

    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. Install cuda8. You need to:

    Press Crtl + Alt + F1 keys.

    sudo service lightdm stop  
    sudo init 3  
    

    I use cuda8 .run file to install it, then installing it will prompt if you want to install nvidia card driver?.

    Choose yes.

    It will prompt if you want to install nvidia opengl?

    Choose no, this is a crucial choice, if you say "yes" here it will cover "mesa*" libraries.

    After this, choose the default.

    After install, reboot.

    sudo reboot
    

Solution 2:

For anyone arriving at this question trying to use OpenGL on a headless server: you might also get this message if you have NVIDIA GLX drivers installed but don't actually have an NVIDIA card in your server (e.g. if using the AWS Deep Learning Base AMI on a machine without a GPU).

To confirm, try running an X server with +iglx (which should allow glxinfo to run), and see whether glxinfo output (e.g. xvfb-run -s '-screen 0 1400x900x24 +iglx' glxinfo) reports client glx vendor string: NVIDIA Corporation. If it does, try switching to an AMI without any NVIDIA stuff.

Solution 3:

Downgrade the NVIDIA driver to 340.12

Previously was 384.11 by default.

This can be done easily from the software-properties-gtk "additional drivers" tab.

Then reboot.

Ubuntu 16.04, NVIDIA Corporation GF119 [NVS 310].

There is also a similar Steam problem at: Steam won't start on Ubuntu 16.04

The problem is reproducible with a minimal GLUT hello world:

#include <stdlib.h>

#include <GL/glut.h>

int main(int argc, char *argv[]) {
    glutInit(&argc, argv);
    glutInitWindowSize(800, 600);
    glutInitWindowPosition(200, 100);
    glutCreateWindow(argv[0]);
    glutMainLoop();
    return EXIT_SUCCESS;
}

Ubuntu 19.04: the problem does not happen anymore

Haven't had this for a while, just upgrade Ubuntu if you can. Currently on 390.116 working perfectly.

Needed some minor BIOS option changes to get it started on my Lenovo ThinkPad P51: Ubuntu 17.10 boot stuck at message "Started NVIDIA Persistence Daemon" after installing nVidia 384.90

Solution 4:

Another situation where this error can arise is when you are trying to run OpenGL windows while running in a chroot environment. This post has a suggestion to add +iglx in the xserver-command for lightdm, which solved the problem for me. Putting this answere here for visibility as the other answer did not show up prominently on google.