Erreur « Could not initialize GLX » au lancement du client Nextcloud (Flatpak)

Gros problème hier : impossible de lancer mon client Nextcloud sur le PC, rien ne se passe en mode graphique, aucun message d’erreur.

Il s’agit du client Nextcloud au format Flatpak, c’était d’ailleurs la raison principale pour laquelle j’avais abandonné le système des Snaps d’Ubuntu/Canonical pour passer à Flatpak, son équivalent open-source (voir cet article).

Après avoir cru à un problème graphique avec le pilote propriétaire Nvidia, il s’est avéré que le problème venait en fait d’un alignement de versions entre ce pilote Nvidia utilisé par le système, et le « runtime » OpenGL utilisé par Flatpak.

Les deux versions doivent correspondre, sinon les applications Flatpak utilisant OpenGL ne pourront se lancer. Au moins, j’aurai appris quelque chose ! 💡 Voyons tout cela en détail, comment vérifier les versions, et comment régler le problème.

Analyse

Comme rien ne se passe quand je lance Nextcloud via Gnome, j’ouvre un terminal pour le lancer en mode commande. D’abord, il me faut récupérer son « Application ID » :

pascal$ flatpak list
Name                                   Application ID                                     Version  Branch Installation
Nextcloud desktop sync client          com.nextcloud.desktopclient.nextcloud              3.2.0    stable system
...

Puis j’essaye de le lancer à la main :

pascal$ flatpak run com.nextcloud.desktopclient.nextcloud
Gtk-Message: 17:48:35.883: Failed to load module "canberra-gtk-module"
Gtk-Message: 17:48:35.884: Failed to load module "canberra-gtk-module"
qt.glx: qglx_findConfig: Failed to finding matching FBConfig for QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize -1, redBufferSize 1, greenBufferSize 1, blueBufferSize 1, alphaBufferSize -1, stencilBufferSize -1, samples -1, swapBehavior QSurfaceFormat::SingleBuffer, swapInterval 1, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::NoProfile)
qt.glx: qglx_findConfig: Failed to finding matching FBConfig for QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize -1, redBufferSize 1, greenBufferSize 1, blueBufferSize 1, alphaBufferSize -1, stencilBufferSize -1, samples -1, swapBehavior QSurfaceFormat::SingleBuffer, swapInterval 1, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::NoProfile)
Could not initialize GLX

Le dernier message « Could not initialize GLX » montre qu’il s’agit d’un problème graphique (OpenGL étant l’équivalent libre de Direct3D de Microsoft)… Une brève recherche générale sur le net avec ce message d’erreur ne m’apporte pas grand chose. Comme je viens de redémarrer après une mise à jour système, je me dis que cela vient peut-être de mon pilote Nvidia, je fais tout de suite un essai en installant le pilote libre « Nouveau » à la place :

J’installe le pilote libre « Nouveau » pour tester

Après un redémarrage, effectivement je peux à nouveau lancer le client Nextcloud. Mais le pilote « Nouveau » pose vite des problèmes (clignotement, scintillement), et je me dis que je ne peux pas rester comme ça.

Je fais alors de nouvelles recherches, en indiquant cette fois qu’il s’agit du lancement de Nextcloud en format Flatpak, et là je trouve des infos plus intéressantes, comme cet article. Ce n’est pas exactement le même problème, mais je commence à comprendre ce qui se passe. Ce sera cette page qui va tout expliquer. Je résume :

Quand on utilise un pilote Nvidia propriétaire, les applications Flatpak utilisant OpenGL ont besoin d’un « runtime » Flatpak utilisant la même version que votre pilote propriétaire.

Correction

Première chose à connaître, quelle est la version complète (majeure+mineure) de pilote Nvidia utilisée par mon Ubuntu ? Je tape la commande ci-dessous en utilisant l’information de version majeure indiquée dans la fenêtre « Pilote additionnels » vue plus haut (que j’ai entre-temps réinstallée) :

pascal$ apt-cache policy nvidia-driver-460
nvidia-driver-460:
  Installé : 460.73.01-0ubuntu0.20.04.1
  Candidat : 460.73.01-0ubuntu0.20.04.1
 Table de version :
 *** 460.73.01-0ubuntu0.20.04.1 500
...

OK, regardons maintenant ce que j’ai en Flatpak :

pascal$ flatpak list | grep nvidia
Name                                   Application ID                                     Version  Branch Installation
nvidia-455-38                          org.freedesktop.Platform.GL.nvidia-455-38                   1.4    system
nvidia-455-45-01                       org.freedesktop.Platform.GL.nvidia-455-45-01                1.4    system
nvidia-460-32-03                       org.freedesktop.Platform.GL.nvidia-460-32-03                1.4    system
nvidia-460-39                          org.freedesktop.Platform.GL.nvidia-460-39                   1.4    system

J’ai donc la version 460-39 en Flatpak, mais 460.73.01 au niveau système. D’où le problème…

Voyons voir maintenant ce que me propose Flatpak comme paquets « runtime » pour Nvidia version 460 :

pascal$ flatpak remote-ls flathub | grep nvidia | grep 460
nvidia-460-27-04	org.freedesktop.Platform.GL.nvidia-460-27-04		1.4
nvidia-460-32-03	org.freedesktop.Platform.GL.nvidia-460-32-03		1.4
nvidia-460-39	org.freedesktop.Platform.GL.nvidia-460-39		1.4
nvidia-460-56	org.freedesktop.Platform.GL.nvidia-460-56		1.4
nvidia-460-67	org.freedesktop.Platform.GL.nvidia-460-67		1.4
nvidia-460-73-01	org.freedesktop.Platform.GL.nvidia-460-73-01		1.4
nvidia-460-27-04	org.freedesktop.Platform.GL32.nvidia-460-27-04		1.4
nvidia-460-32-03	org.freedesktop.Platform.GL32.nvidia-460-32-03		1.4
nvidia-460-39	org.freedesktop.Platform.GL32.nvidia-460-39		1.4
nvidia-460-56	org.freedesktop.Platform.GL32.nvidia-460-56		1.4
nvidia-460-67	org.freedesktop.Platform.GL32.nvidia-460-67		1.4
nvidia-460-73-01	org.freedesktop.Platform.GL32.nvidia-460-73-01		1.4

La 460-73-01 est bien disponible, il ne me reste plus qu’à l’installer (attention à ne pas prendre la version GL32) :

pascal$ flatpak install org.freedesktop.Platform.GL.nvidia-460-73-01

Et voilà, j’ai maintenant les mêmes versions pour le système et pour Flatpak, et l’application Nextcloud peut enfin démarrer. Problème réglé ! 😎

Bien content d’avoir trouvé la solution assez rapidement, et en plus, j’ai appris quelque chose d’important concernant Flatpak.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *