1 votes

Comment le WSL gère-t-il les applications GUI ? Pourquoi certaines fonctionnent-elles et d'autres pas ?

J'ai installé WSL + Ubuntu sur ma machine Windows, avec quelques utilitaires installés.

Les commandes suivantes ouvrent une interface graphique lorsqu'elles sont exécutées à partir de mon terminal Ubuntu :

  • code . (ouvre une instance de vscode dans le répertoire de travail actuel)
  • jupyter notebook (ouvre une instance de chrome sur l'hôte local)

Les commandes suivantes ne parviennent pas à ouvrir une interface graphique lorsqu'elles sont exécutées à partir de mon terminal Ubuntu.

  • gvim test.txt
  • matplotlib.pyplot.show() (lorsqu'il est exécuté à partir d'un interpréteur Python)

Je suis conscient de la solutions de contournement pour l'exportation de la DISPLAY pour permettre l'ouverture d'interfaces graphiques à partir de la ligne de commande. Pourquoi certaines commandes ( code , jupyter notebook ) dans WSL+Ubuntu ouvrent avec succès une interface graphique dans l'hôte Windows, lorsque ( gvim , matplotlib ) d'autres requièrent l'exportation de l DISPLAY variable et utilisation d'un XServer ?

1voto

NotTheDr01ds Points 5135

Pour comprendre ce qui se passe, il faut faire la distinction entre les "applications Windows GUI" et les "applications Linux (X) GUI". Tout ce que vous mentionnez et qui s'ouvre est une application Windows.

Il est important de noter que cette réponse ne concerne que la version actuelle de WSL. Dans le courant de l'année, la version WSLg devrait être publiée avec la mise à jour 21H2 de Windows 10. Celle-ci ajoutera la possibilité d'exécuter des applications GUI Linux. Comme vous mentionnez une "solution de contournement" dans votre question, vous savez déjà que WSL ne permet pas d'exécuter des applications Linux. actuellement inclut cette fonctionnalité, sauf si vous exécutez une version Windows Insider/Preview ou si vous avez installé manuellement un serveur X distinct et l'avez configuré (comme indiqué dans la "solution de contournement").

Alors que l'on s'attendrait normalement à devoir lancer une application Windows dans WSL à l'aide de la commande .exe (et vous auriez raison), il y a quelques exceptions.

Pour le code . exemple que vous mentionnez, Microsoft inclut spécifiquement un Shell Shell dans le téléchargement du VSCode et le place dans le PATH de Windows. Comme vous appelez code 代わりに code.exe ce Shell Shell est en cours d'exécution. Vous pouvez y jeter un coup d'oeil avec view "$(which code)" . Ce script, entre autres choses, finit par appeler le programme Windows .exe version.

Si vous êtes curieux de savoir pourquoi les exécutables de Windows ( .exe ) dans le domaine du WSL, veuillez consulter le site suivant cette très bonne réponse sur le sujet.

Quant aux carnets Jupyter, il s'agit spécifiquement de lancer une URL. Python inclut un webbrowser qui lui permet de lancer un navigateur avec une URL. Vous pouvez l'essayer en lançant python3 et ensuite entrer les commandes suivantes :

>> import webbrowser
>> webbrowser.open("https://superuser.com/q/1654716/1210833")
true

Notez que cela ne fonctionne que sur la distribution Ubuntu de WSL, et peut-être d'autres qui ont fourni les hooks appropriés. Par exemple, dans OpenSuse, cela ne fonctionne pas par défaut :

>> import webbrowser
>> webbrowser.open("https://superuser.com/q/1654716/1210833")
false

Cependant, sur d'autres distributions, vous pouvez simplement exporter le fichier BROWSER variable d'environnement. Par exemple, j'utilise le navigateur Vivaldi sous Windows :

export BROWSER="/mnt/c/Program Files/Vivaldi/Application/vivaldi.exe"

Après cela, OpenSuse fonctionne de la même manière qu'Ubuntu avec la fonction webbrowser.open appeler.

Ubuntu fournit le wslu par défaut sur WSL. Il comprend wslview pour ouvrir l'application par défaut pour un fichier (par ex. wslview payroll.pdf ) et aussi le www-browser hook qui est probablement ce que Python utilise lorsque vous lancez votre notebook Jupyer.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X