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 :/

6voto

George Duckett Points 1448

Voici un open "à la manière d'un pauvre" de macOS pour WSL :

alias open="powershell.exe /c start"

Ajoutez cela à votre ~/.profile ou ~/.bashrc selon le cas, ou exécutez-le dans votre shell WSL, puis les choses suivantes fonctionneront :

open . # ouvre le dossier actuel dans l'Explorateur sous forme de p. ex. \\wsl$\Ubuntu\home\john\myapp
open foobar.txt # ouvre dans notepad.exe
open README.md # ouvre dans VSCode dans Windows, par exemple
open http://example.com # ouvre dans votre navigateur web par défaut dans Windows
open Preview.html # ouvre dans votre navigateur web par défaut dans Windows, en tant que file://wsl%24/Ubuntu/home/john/Preview.html

Inconvénient : cela semble uniquement fonctionner avec des chemins relatifs, pas des chemins absolus

Il serait bien que quelqu'un crée un script shell pour émuler la version macOS, comme -a pour l'application, -e pour l'éditeur, -R pour révéler dans explorer.exe, etc... et le rendre compatible avec les chemins absolus

5voto

Xarses Points 151

Se basant sur les réponses précédentes

export BROWSER=/some/path/to/chrome.exe est probablement la solution que vous recherchez, cependant le chemin par défaut de chrome est /mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe (un chemin avec des espaces et des parenthèses pour échapper au shell). Cela fonctionne bien si l'application utilise une version entre guillemets de la variable "${BROWSER}" ouvrira correctement chrome. Cependant, si vous utilisez la variable sans guillemets $BROWSER, bash la considérera comme des variables individuelles. Cela ne fonctionne pas dans certains outils, tels que xdg-open.

Contourner cela est simple, vous pouvez faire un lien symbolique vers un chemin sans espaces.

ln -s "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe" ~/.local/bin/chrome
export BROWSER=~/.local/bin/chrome

Alternativement, vous pouvez utiliser update-alternatives comme Brett l'a souligné. En fin de compte, il s'agit également d'un lien symbolique, mais avec légèrement plus de visibilité si jamais vous devez mettre à jour vers où pointe le lien.

update-alternatives --install "bin/host_chrome" "chrome" "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe" 1
export BROWSER=host_chrome

0voto

ixe013 Points 858

Sous WSL2, vous n'avez besoin d'installer que xdg-utils:

sudo apt-get update -y
sudo apt-get install -y xdg-utils

Ensuite, ouvrez n'importe quelle page que vous voulez avec:

xdg-open https://superuser.com/

0voto

Aditya Points 125

Il y a un moyen de faire cela sans rien installer.

Ouvrez d'abord votre navigateur et ouvrez file://wsl.localhost/ et disons que vous voulez ouvrir Ubuntu-20.04 alors vous pouvez changer cette URL en file://wsl.localhost/Ubuntu-20.04/

vous pouvez obtenir une liste de ce à quoi vous pouvez accéder avec file://wsl.localhost/ et son nom sur powershell ou cmd avec la commande wslconfig /l.

0voto

smiron Points 72

Vous pouvez définir le navigateur par défaut sur wsl de cette manière :

$ sudo update-alternatives --config x-www-browser
Il y a 3 choix pour l'alternative x-www-browser (fournissant /usr/bin/x-www-browser).

  Sélection   Chemin                         Priorité   Statut
------------------------------------------------------------
  0            /usr/bin/google-chrome-stable   200       mode automatique
  1            /usr/bin/firefox                40        mode manuel
  2            /usr/bin/google-chrome-stable   200       mode manuel
* 3            /usr/bin/wslview                30        mode manuel

Appuyez sur  pour conserver le choix actuel[*], ou tapez le numéro de sélection : 

Source : https://askubuntu.com/a/16626

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