44 votes

Ouvrir le navigateur dans le système hôte à partir de Windows Subsystem pour Linux ?

J'ai un script ruby qui contient cette ligne :

system("open '#{html_path}'")

html_path est le chemin d'un fichier local .html. Ainsi, le script ouvre un navigateur où je peux normalement inspecter et afficher ce fichier.

Contrairement à un environnement MacOS, cela ne fonctionne pas dans bash de WSL. Lors de l'exécution du script, il ne se passe rien, et lorsque j'exécute l'appel à open directement dans la console, j'obtiens ceci :

sujan@LenovoX1:/mnt/c/Users/Jan/Documents/foo$ open Preview.html
Couldn't get a file descriptor referring to the console

J'ai déjà vérifié que open fait quelque chose de différent sous Ubuntu et que je devrais utiliser see ou xdg-open pour ouvrir un fichier.

Malheureusement, ceux-ci ne fonctionnent pas non plus dans WSL :

sujan@LenovoX1:/mnt/c/Users/Jan/Documents/foo$ see ./Preview.html
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /us
r/bin/see line 528.
Couldn't find a suitable web browser!
Set the BROWSER environment variable to your desired browser.
Warning: program returned non-zero exit code #1

et

sujan@LenovoX1:/mnt/c/Users/Jan/Documents/foo$ xdg-open ./Preview.html
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /us
r/bin/run-mailcap line 528.
Couldn't find a suitable web browser!
Set the BROWSER environment variable to your desired browser.
Warning: program returned non-zero exit code #1
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 771: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening './Preview.html'

En y réfléchissant, cela a du sens : il n'y a pas de navigateur disponible dans WSL.

Puis-je définir cette variable BROWSER de manière à ce que see fonctionne dans bash de WSL?


Question bonus : Si oui, comment puis-je faire en sorte que le script ruby fonctionne sans modifier ce code ? C'est une dépendance externe :/

32voto

miniman Points 317

Installez wslu et utilisez 'BROWSER=wslview'

30voto

Florian_1990 Points 409

Vous pouvez définir la variable BROWSER. Il y a un long article expliquant comment définir les variables d'environnement.

Si vous voulez définir la variable pour la session de terminal actuelle, vous pouvez utiliser :

export BROWSER='/mnt/c/Program Files/Firefox/firefox.exe'

(en supposant que vous voulez utiliser Firefox et que vous l'avez installé dans C:\Program Files\Firefox\firefox.exe)

Si vous voulez que cela soit persistant, vous pouvez ajouter la ligne ci-dessus au fichier ~/.bashrc.

16voto

Elizabeth Hou Points 161

Pour une raison quelconque, WSL peut voir l'explorateur de fichiers Windows. Si vous faites :

explorer.exe Preview.html

dans la console, cela devrait s'ouvrir dans le navigateur web Windows par défaut.

11voto

Roy Points 13839

J'ai utilisé sensible-browser http://localhost:8001/ sur Ubuntu 20.04 avec WSL2

9voto

En combinant les deux réponses ci-dessus, la solution la plus simple est de définir BROWSER sur l' explorateur de fichiers Windows afin d'utiliser le navigateur Web Windows par défaut

export BROWSER='/mnt/c/Windows/explorer.exe'

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