glx: failed to create drisw screen

glx: failed to create drisw screen

Vous venez de passer trois heures à configurer un serveur distant pour faire tourner une application de simulation ou un nœud de rendu. Tout semble parfait, les dépendances sont installées, mais dès que vous lancez l'exécutable, le terminal vous renvoie cette ligne laconique : Glx: Failed To Create Drisw Screen. J'ai vu des administrateurs système chevronnés perdre des nuits entières sur ce message, pensant qu'il s'agissait d'un simple pilote manquant, alors que le problème est bien plus profond. Ce crash vous coûte du temps de déploiement et, si vous travaillez sur des instances cloud facturées à l'heure comme celles d'AWS ou de GCP, il brûle votre budget pour littéralement rien. Ce n'est pas un petit bug de configuration, c'est le signe que votre pile logicielle tente d'accéder à une interface graphique qui n'existe pas ou qui est mal émulée.

L'illusion de l'accélération matérielle sur un serveur sans écran

L'erreur la plus fréquente que je vois, c'est de croire qu'il suffit d'installer les pilotes officiels Nvidia ou AMD sur un serveur headless pour que la magie opère. Vous téléchargez le dernier driver, vous l'installez, et vous pensez que votre application va trouver le chemin vers le processeur graphique tout seule. Ça ne marche jamais comme ça dans un environnement de centre de données.

Le système cherche souvent à initialiser un écran virtuel via le pilote logiciel simple (drisw), et quand il échoue, il s'arrête net. J'ai vu une équipe de développement dépenser 4 000 euros en instances GPU sur une semaine sans réussir à sortir une seule image, simplement parce qu'ils s'obstinaient à vouloir utiliser un serveur X standard là où il fallait une approche sans affichage. Ils pensaient que le matériel ferait le travail ingrat à leur place. La réalité, c'est que sans une couche de médiation comme EGL ou un serveur X virtuel correctement configuré (Xvfb), le système ne sait pas où envoyer les données de rendu.

Pour corriger ça, arrêtez de vous battre avec les pilotes propriétaires dans un premier temps. Vérifiez si votre application peut fonctionner avec EGL au lieu de GLX. EGL est conçu pour le rendu hors écran, sans avoir besoin d'un serveur d'affichage complexe qui finit inévitablement par déclencher l'erreur Glx: Failed To Create Drisw Screen si la chaîne de liaison est rompue.

Le piège des bibliothèques Mesa mal compilées

Souvent, le problème vient d'un conflit entre les versions de Mesa installées par votre gestionnaire de paquets et celles exigées par votre logiciel. Si vous avez des restes de vieilles bibliothèques dans /usr/local/lib, votre application va charger un mélange incohérent de symboles. J'ai déjà passé une journée entière à tracer des appels système avec strace pour réaliser que le binaire chargeait une version de libGL.so qui datait de trois ans, cachée dans un dossier oublié.

Glx: Failed To Create Drisw Screen et la mauvaise gestion des variables d'environnement

On ne compte plus le nombre de scripts de déploiement qui oublient de définir correctement les variables de rendu. Vous lancez votre processus via SSH, et boum, le crash survient. Pourquoi ? Parce que votre session SSH n'a pas de variable DISPLAY valide, ou pire, elle essaie d'utiliser le déport d'affichage SSH (X11 forwarding) qui est d'une lenteur atroce et souvent incompatible avec les extensions GLX modernes.

Comparaison concrète : l'approche naïve contre la méthode professionnelle

Imaginez un ingénieur, appelons-le Marc. Marc veut lancer un rendu 3D sur un serveur Ubuntu.

L'approche de Marc (l'échec) : Marc installe libgl1-mesa-glx et tente de lancer son programme avec la commande ./mon_app. Le système cherche un serveur X, n'en trouve pas, essaie de se rabattre sur le rendu logiciel via drisw, échoue car les permissions sur /dev/dri/ sont mal réglées ou le module est absent, et finit par afficher l'erreur fatale. Marc passe alors deux heures à réinstaller ses pilotes, ce qui ne change strictement rien car le problème est structurel.

L'approche professionnelle (le succès) : L'ingénieur expérimenté sait qu'il ne doit pas compter sur l'affichage local. Il installe xvfb (X Virtual Framebuffer). Il lance son application ainsi : xvfb-run -s "-screen 0 1024x768x24" ./mon_app. En créant cet écran virtuel en mémoire, il donne au système l'illusion d'un affichage physique. Le rendu se fait alors soit sur le CPU (via libosmesa), soit sur le GPU s'il a configuré les bons accès. Pas d'erreur, pas de temps perdu, les fichiers de sortie sont générés en quelques secondes.

La différence ici se chiffre en heures de frustration économisées. Marc a perdu sa matinée ; le pro a terminé avant son premier café.

Le problème invisible des permissions sur les périphériques de rendu

Même avec la bonne configuration logicielle, vous allez heurter un mur si vos permissions Unix sont celles par défaut. Par défaut, l'accès aux nœuds de rendu dans /dev/dri/renderD128 est restreint. Si votre application tourne sous un utilisateur spécifique (ce qui est la norme pour la sécurité), elle n'aura pas le droit de parler au matériel.

Le système essaie de se rabattre sur le pilote logiciel par dépit. C'est là que le message Glx: Failed To Create Drisw Screen apparaît, car même le pilote de secours n'arrive pas à initialiser le tampon de rendu. J'ai vu des déploiements Kubernetes échouer en boucle parce que le conteneur n'avait pas les privilèges nécessaires pour accéder au groupe video ou render.

Pour régler ça proprement :

  1. Identifiez le groupe propriétaire de /dev/dri/renderD128 (souvent le groupe render).
  2. Ajoutez votre utilisateur à ce groupe : sudo usermod -aG render votre_utilisateur.
  3. Redémarrez votre session ou le service.

C'est une solution qui prend dix secondes mais que beaucoup ignorent, préférant lancer leurs applications en root, ce qui est une aberration monumentale en termes de sécurité informatique.

👉 Voir aussi : node js installation on

L'incompatibilité flagrante entre Wayland et les vieilles applications GLX

Nous sommes dans une période de transition. Beaucoup de distributions modernes comme Fedora ou les dernières versions d'Ubuntu utilisent Wayland par défaut. Si vous essayez de faire tourner une vieille application qui s'attend à un protocole X11 pur, la couche de compatibilité XWayland peut parfois bégayer.

Dans certains contextes de virtualisation, XWayland ne parvient pas à établir le pont vers le pilote DRI (Direct Rendering Infrastructure). Le résultat est prévisible. Pour savoir si c'est votre cas, forcez l'utilisation de X11 pour tester. Désactivez Wayland dans votre fichier de configuration GDM ou changez de session au démarrage. Si l'erreur disparaît, vous savez que le coupable est votre compositeur Wayland qui ne gère pas correctement les requêtes de votre application héritée.

La confusion entre rendu logiciel et rendu matériel

Il faut arrêter de penser que "logiciel" veut dire "ça marchera partout". Le pilote drisw est justement le pilote de rendu logiciel de Mesa. S'il échoue, c'est que même votre processeur n'arrive pas à simuler une carte graphique. Cela arrive souvent dans les environnements de conteneurs (Docker) où les bibliothèques internes du conteneur ne correspondent pas à la version du noyau de l'hôte.

J'ai travaillé sur un projet où l'on devait traiter des milliers de vidéos par jour. Les conteneurs étaient basés sur une image Alpine Linux pour gagner de la place (environ 50 Mo). C'était une erreur coûteuse. Alpine utilise musl au lieu de glibc, et les pilotes Mesa pour le rendu logiciel y sont capricieux. On a perdu trois jours de production parce que les rendus plantaient aléatoirement. En repassant sur une image de base Debian Slim, plus lourde de 100 Mo mais bien mieux supportée pour les calculs graphiques, le problème a disparu instantanément. Ne sacrifiez jamais la stabilité de la pile graphique pour quelques mégaoctets de stockage.

Debugger avec les bons outils au lieu de deviner

Si vous voyez ce message, votre premier réflexe ne doit pas être de chercher sur Google, mais de demander au système ce qu'il voit. Utilisez glxinfo -B. Si cette commande vous renvoie la même erreur, le problème est global au système. Si elle vous renvoie des informations valides mais que votre application plante, le problème vient de la manière dont votre application est liée aux bibliothèques.

Voici les variables que j'utilise systématiquement pour forcer le système à être bavard :

  • LIBGL_DEBUG=verbose : Cela va vous dire exactement quel fichier .so le système essaie d'ouvrir et pourquoi il échoue.
  • MESA_DEBUG=1 : Utile pour voir les erreurs internes de la bibliothèque Mesa.

En activant LIBGL_DEBUG, vous verrez peut-être qu'il manque simplement libgallium_dri.so. C'est une information que le message d'erreur standard vous cache soigneusement. Dans un cas réel, cela m'a permis de voir qu'une mise à jour système avait supprimé un paquet de transition nécessaire, rendant tout le parc de machines inutilisable pour le calcul graphique pendant une matinée.

Vérification de la réalité : ce qu'il faut pour que ça marche

On ne va pas se mentir : faire du rendu graphique stable sous Linux, surtout en mode serveur ou conteneur, c'est l'un des aspects les plus ingrats du métier. Il n'y a pas de solution miracle qui fonctionne à tous les coups car la pile graphique Linux est un empilement de couches héritées des années 90 sur lesquelles on a greffé des technologies modernes.

📖 Article connexe : ce billet

Pour réussir, vous devez accepter que :

  1. Le matériel ne suffit pas. Avoir une carte à 2 000 euros ne sert à rien si votre chaîne de liaison logicielle est brisée.
  2. La virtualisation complique tout. Faire passer un GPU à travers une VM ou un conteneur demande une précision chirurgicale sur les versions de pilotes hôte/invité.
  3. Le rendu logiciel est un dernier recours, pas une solution de confort. Si vous comptez sur drisw pour de la production, vous allez souffrir de performances catastrophiques et de bugs de stabilité.

Si vous n'êtes pas prêt à passer du temps dans les fichiers de configuration de X11, à compiler parfois vos propres versions de Mesa pour garantir la compatibilité, ou à auditer vos permissions de groupes, vous continuerez à voir cette erreur. La stabilité s'achète au prix de la rigueur technique, pas en copiant-collant des commandes trouvées sur des forums obscurs. Assurez-vous que votre environnement est cohérent, que vos variables LD_LIBRARY_PATH pointent au bon endroit, et surtout, testez toujours votre pipeline avec des outils simples comme glxgears avant de lancer votre application complexe. C'est la seule façon de savoir si votre fondation est solide ou si vous construisez sur du sable.

NF

Nathalie Faure

Nathalie Faure a collaboré avec plusieurs rédactions numériques et défend un journalisme de fond.