web-dev-qa-db-fra.com

ubuntu 16.04 donne le message "X Erreur de la requête ayant échoué: BadValue (paramètre entier non compris dans la plage de fonctionnement)" lors de l'exécution de programmes OpenGL

J'ai deux cartes graphiques à bord, l'une est l'intégration dans le processeur Intel, l'autre est la carte nvidia.

Je veux utiliser celui qui intègre pour rendre le bureau, la carte NV pour calculer avec cuda. Je change pour utiliser celui qui intègre dans les "paramètres de NVIDIA X Server", après avoir installé le "nvidia-modprobe", cela a fonctionné comme je le souhaite.

mais où est un problème avec glx, quand je lance 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

Dans le journal xorg, il libglx.so dans

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

Y at-il un moyen que je puisse obtenir le runing glx correctement?

16
hangkongwang

Résolu, j'ai configuré ce que je veux. J'ai posté la réponse ci-dessous à l'adresse GitHub .

  1. Supprimez tous les packages Nvidia et réinstallez les packages 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. Installez cuda8. Tu dois:

    Appuyez sur les touches Crtl + Alt + F1.

    Sudo service lightdm stop  
    Sudo init 3  
    

    J'utilise le fichier cuda8 .run pour l'installer, puis son installation vous sera demandé si vous souhaitez installer le pilote de la carte nvidia ?.

    Choisissez oui.

    Il vous demandera si vous voulez installer nvidia opengl?

    Choisissez non, c’est un choix crucial. Si vous dites "oui" ici, cela couvrira les bibliothèques "mesa *".

    Après cela, choisissez la valeur par défaut.

    Après l'installation, redémarrez.

    Sudo reboot
    
9
hangkongwang

Pour ceux qui arrivent à cette question en essayant d'utiliser OpenGL sur un serveur sans tête: vous pouvez également recevoir ce message si vous avez des pilotes NVIDIA GLX installés mais que vous n'avez pas de carte NVIDIA sur votre serveur (par exemple, si vous utilisez l'AMI Deep Learning Base AWS sur une machine sans GPU).

Pour confirmer, essayez d’exécuter un serveur X avec +iglx (ce qui devrait permettre à glxinfo de s’exécuter) et vérifiez si le résultat de glxinfo (par exemple, xvfb-run -s '-screen 0 1400x900x24 +iglx' glxinfo) indique client glx vendor string: NVIDIA Corporation. Si tel est le cas, essayez de passer à une AMI sans aucun élément NVIDIA.

2
Matthew Rahtz

Déclassez le pilote NVIDIA en 340.12

Auparavant, il était 384.11 par défaut.

Cela peut être fait facilement à partir de l'onglet software-properties-gtk "drivers supplémentaires".

Puis redémarrez.

Ubuntu 16.04, NVIDIA Corporation GF119 [NVS 310].

Il y a aussi un problème similaire à Steam à: Steam ne démarrera pas sous Ubuntu 16.04

Le problème est reproductible avec un monde de GLUT hello minimal:

#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;
}

Une autre situation où cette erreur peut survenir est lorsque vous essayez d'exécuter des fenêtres OpenGL lors de l'exécution dans un environnement chroot. This post a suggéré d'ajouter + iglx dans la commande xserver pour lightdm, ce qui a résolu le problème pour moi. Mettant cette réponsewwere ici pour la visibilité comme l'autre réponse ne s'est pas montré en évidence sur Google.

0
aleksk

J'avais le même message d'erreur, mais c'était causé par glutInitContextVersion (4, 0); car mon matériel ne supportait pas OpenGL 4.0, j'ai changé l'appel en glutInitContextVersion (3, 3); et les choses se sont bien passées. J'utilise un pilote propriétaire NVidia.

0
vollitwr