web-dev-qa-db-ja.com

LinuxのWindowsサブシステムからホストシステムでブラウザーを開きますか?

私はRubyこの行を含むスクリプトを持っています:

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

html_pathは、ローカルの.htmlファイルへのパスです。したがって、スクリプトはブラウザーを開き、通常はこのファイルを検査および表示できます。

MacOS環境とは対照的に、これはWSLのbashでは機能しません。スクリプトの実行nothingが発生し、コンソールでopen呼び出しを直接実行すると、次のようになります。

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

私はすでに openがUbuntuで何か異なることをする を調査したので、seeまたはxdg-openを使用してファイルを開く必要があります。

残念ながら、これらも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

そして

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'

これについて考えると、これは理にかなっています。WSL内で使用できるブラウザーはありません。

WSLのBROWSER内でseeが機能するように、このbash変数を何らかの方法で設定できますか?


おまけの質問:はいの場合、コードを変更せずにRubyスクリプトをせずに動作させるにはどうすればよいですか?外部依存関係です。 :/

14
janpio

BROWSER変数を設定できます。 環境変数の設定方法を説明する長い記事 があります。

現在のターミナルセッションの変数を設定する場合は、次のコマンドを使用できます。

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

(Firefoxを使用してC:\Program Files\Firefox\firefox.exeにインストールする場合)

これを persistent にしたい場合は、上記の行をファイル~/.bashrcに追加できます。

17
Florian_1990

何らかの理由で、WSLはWindowsファイルエクスプローラーを表示できます。もし、するなら:

Explorer.exe Preview.html

コンソールでは、デフォルトのWindows Webブラウザーで開きます。

7
Elizabeth Hou

上記の2つの答えを組み合わせると、最も簡単な解決策は、デフォルトのWindows Webブラウザーを使用するために、ブラウザーをWindowsファイルエクスプローラーに設定することです。

export BROWSER='/mnt/c/Windows/Explorer.exe'
5

WSLUをインストールし、「BROWSER = wslview」を使用します

4
Pawel Zubrycki

以前の回答に基づく

_export BROWSER=/some/path/to/chrome.exe_があなたが探している解決策である可能性がありますが、Chromeのデフォルトパスは/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe(シェルがエスケープするためのスペースと括弧を含むパス)です。アプリケーションが引用符で囲まれたバージョンの変数_"${BROWSER}"_を使用する場合、これは正常に機能し、Chromeを正常に開きます。ただし、引用符で囲まれていない変数_$BROWSER_を使用すると、bashはそれを個別の変数と見なします。これは、_xdg-open_などの一部のツールで機能しなくなります。

これを回避するのは簡単です。スペースのないパスにシンボリックリンクできます。

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

または、_update-alternatives_を Brett として使用することもできます。結局のところ、これもシンボリックリンクですが、リンクが指す場所を更新する必要がある場合やその必要がある場合に、より多くの可視性があります。

_update-alternatives --install "bin/Host_chrome" "chrome" "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe" 1
export BROWSER=Host_chrome
_
0
Xarses