Les applications graphiques WSL 2 ne démarrent pas depuis la barre des tâches (ou un raccourci), mais démarrent uniquement après avoir été lancées depuis un wsl ouvert d'abord depuis cmd

Voici le comportement étrange. J’ai créé des raccourcis WSL dans ma barre des tâches pour pouvoir ouvrir par exemple l’application graphique Linux gnome-terminal depuis le raccourci CTRL+ALT+T. Le raccourci a fonctionné le jour où je l’ai créé, mais il ne fonctionne plus.

Voici la commande du raccourci situé dans le fichier C:\Users\guill\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Ubuntu : wslg ~ gnome-terminal

L’application s’ouvrira ou non dans ces situations selon que j’ai déjà ou non ouvert l’application une première fois depuis le cmd wsl :

  • Une fois que je suis connecté à Windows et que mon ordinateur a eu suffisamment de temps pour démarrer et ouvrir les applications de démarrage, l’application ne s’ouvre pas à ce moment avec le raccourci.

  • Ensuite, si j’ouvre d’abord cmd.exe puis que je tape wsl pour accéder à wsl, alors j’ai wsl ouvert en arrière-plan. À ce moment, essayer le raccourci ne fonctionne toujours pas.

  • Ensuite, si je tape gnome-terminal dans la session de ligne de commande wsl ouverte depuis le cmd, le terminal gnome s’ouvre correctement. Si j’utilise ensuite le raccourci clavier, le terminal gnome s’ouvre.

Notez que dans le texte ci-dessus, chaque fois que je dis avoir appuyé sur le raccourci clavier, le résultat est le même que si j’essayais d’ouvrir l’application depuis l’icône épinglée dans la barre des tâches, et vice-versa. Celle avec la commande wslg ~ gnome-terminal dans le dossier du menu Démarrer.

Alors qu’est-ce qui se passe ? Il semble que les applications graphiques doivent être ouvertes au moins une fois avant que je puisse les ouvrir depuis le menu Démarrer ou le raccourci clavier. J’aimerais que WSL soit toujours ouvert au démarrage. J’aimerais également que WSL soit toujours prêt à ouvrir des applications depuis des raccourcis. Je ne sais pas quoi faire à ce stade.

J’envisage de réinstaller Linux sur cet ordinateur. WSL ne répond pas à mes attentes en ce moment. Je suis sous Windows 11.

Merci !

Réponse courte :

Essayez :

wslg ~ dbus-launch gnome-terminal

Explication :

Cela ne semble pas être un problème avec les “applications graphiques” en général, mais plutôt avec des applications spécifiques.

Par exemple, si vous installez xterm et le configurez comme raccourci de la même manière, je pense que vous constaterez que le raccourci fonctionne comme vous pourriez l’attendre sans avoir préalablement lancé l’application depuis la ligne de commande.

Gnome Terminal, en revanche, est (pour énoncer l’évidence) une application Gnome. La plupart des applications Gnome nécessitent au moins le support D-Bus, et beaucoup nécessitent Systemd. Heureusement, Gnome Terminal nécessite uniquement D-Bus.

Si vous le lancez depuis la ligne de commande dans une nouvelle instance WSL, vous verrez avec un ps -efH qu’il a démarré une instance D-Bus de session utilisateur pour vous. Si vous avez gvfs installé (ce qui n’est pas le cas par défaut, bien que peut-être il a été installé comme dépendance de Gnome Terminal), vous verrez également que son daemon a été démarré (via D-Bus).

Donc quand vous lancez ensuite, ultérieurement, wslg ~ gnome-terminal, D-Bus est déjà en cours d’exécution et Gnome Terminal se lance correctement. (Note : C’est en fait un peu plus compliqué que cela, car Gnome Terminal se lance réellement dans le cadre d’une application client-serveur et c’est le serveur qui ne démarre pas dans ce cas.)

Mais quand vous essayez de le lancer directement via :

  • wslg ~ gnome-terminal

  • Ou même simplement wsl ~ gnome-terminal

… alors il me semble qu’un bug WSL assez obscur entre en jeu. Il est possible que ce soit “attendu” dans la façon dont WSL démarre, mais j’ai rencontré cela par le passé, et il me semble que le processus init de WSL est trop agressif pour récupérer et terminer les processus orphelins lancés par un autre processus pendant le démarrage.

Donc dans ce cas, d’après ce que je peux en dire (et je n’ai pas encore fait de strace pour confirmer), Gnome Terminal tente de démarrer D-Bus, mais init le récupère et le ferme (incorrectement, je pense). En conséquence, sans D-Bus en cours d’exécution, Gnome Terminal (en fait le serveur, je pense) ne démarre pas.

Le contournement ci-dessus, cependant, lance explicitement Gnome Terminal à l’intérieur d’une session D-Bus, donc les choses fonctionnent comme prévu.