タグ別アーカイブ: WSL2

WSL2からWindowsホストで動作しているアプリケーションにアクセスする

このエントリは2019/08/26現在の情報に基づくものであり、今後の機能追加・廃止に伴い、記載内容との乖離が発生する可能性があります。

先日、以下のエントリを記載し、アップデートした。

WindowsホストからWSL2のWebアプリケーションにアクセスする
https://logico-jp.io/2019/07/09/access-web-app-on-wsl2-from-windows-host/

今回はその逆、つまりWindowsホストで動作しているアプリに対してWSL2側からアクセスする。

動作確認のため、Windows 10でIISを稼働し、簡単なHTMLファイルを配置した。表示すると以下のような感じ。

これをWSL2から確認するためには、ドキュメントに記載の通り、WSL2側で/etc/resolve.confのnameserverに相当するIPアドレスを使う必要がある。

Linux からの Windows アプリケーションへのアクセス
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-ux-changes#accessing-windows-applications-from-linux
Accessing Windows applications from Linux
https://docs.microsoft.com/en-us/windows/wsl/wsl2-ux-changes#accessing-windows-applications-from-linux

当方の環境では以下のよう。

この内容は、コマンドプロンプトからも確認できる、WSL2環境にアクセスする場合のIPv4アドレスと同じ(当然であるが)。

ということで、http://172.29.240.1/a1.htmlにアクセスすると…

無事にアクセスできる。

WindowsホストからWSL2のWebアプリケーションにアクセスする

これは2019/07/29現在の情報に基づくもので、今後の機能追加・廃止に伴い記載内容との乖離が発生する可能性があります。特にWSL2は現在まだGAではないので、大いに変更の可能性があります。

Build 18945で変更があり、localhostでアクセスできるようになった。

What’s new for WSL in Insiders Preview Build 18945
https://devblogs.microsoft.com/commandline/whats-new-for-wsl-in-insiders-preview-build-18945/

実際に確認してみる。まず、簡単なアプリケーションを作成する。今回はHelidon SE (1.2) のQuickStartを使う。QuickStartアプリケーションの作成は以下を参照。

Guides — Quickstart SE
https://helidon.io/docs/latest/#/guides/02_quickstart-se

このアプリケーションはHello World的なREST APIをホストするアプリケーションで、WSL2上で http://localhost:8080/greet で待機する。

では、Windows側で動作確認。コマンドプロンプトでcurlを実行してみると…。

無事にlocalhostでアクセスできることが確認できた。以前は以下の操作が必要であったが、今後は不要ということがわかった。以下は記録目的で残しておく。


これは2019/07/09現在の情報に基づくもので、今後の機能追加・廃止に伴い記載内容との乖離が発生する可能性があります。特にWSL2は現在まだGAではないので、大いに変更の可能性があります。

IPアドレスを取得する方法は以下のドキュメントに記載がある。

Accessing Linux applications from Windows
https://docs.microsoft.com/en-us/windows/wsl/wsl2-ux-changes#accessing-linux-applications-from-windows

この中で、以下の記述がある。

– Obtain the IP address of your distro by running the command ip addr inside of your WSL distro and finding it under the inet value of the eth0 interface.You can find this more easily by filtering the output of the command using grep like so: ip addr | grep eth0.

– Connect to your Linux server using the IP you found above.

Accessing Linux applications from Windows
https://docs.microsoft.com/en-us/windows/wsl/wsl2-ux-changes#accessing-linux-applications-from-windows

実際にコマンドを打ってみると…

この例では、WSL2で動作しているubuntuの環境の外部IPアドレスは 172.17.213.35 であることがわかる。そのため、このIPアドレスを使えば、WSL2内で稼働しているWebアプリケーションにアクセスできる。以下は8080ポートで公開しているWebアプリケーションにcURLでアクセスした例。

WSL2 と Windows Terminal

このエントリは2019/06/26現在の情報を基にしています。今回取り上げている両者はともにまだGA版ではないため、将来の機能追加により、記載内容との齟齬が発生する可能性が大いにあります。

Windows TerminalとWSL2は何れもPreviewではあるが利用できる。以下の内容はWindows Terminal 0.2.1715.0をベースにしている。

Windows TerminalのSettingsをクリックすると、2019/06/26現在、profiles.jsonファイルがエディターで開く。このprofiles.jsonは以下の場所に存在する。

%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\RoamingState\profiles.json

Windows Terminalのメニューの並びを変更する

環境によって異なるが、自環境ではWindows Terminalをインストールした直後はPowerShell Core、Windows PowerShell、cmd、ubuntuの順で並んでいた。この並びは、profiles.json内のprofiles要素内の順番に一致するため、ubuntuを先頭に配置したい場合には、ubuntuの部分を配列の先頭に移動する。

デフォルトのTerminalを変更する

自環境の場合、デフォルトでPowerShell Coreが起動するようになっていたが、これをubuntuにする場合、globals/defaultProfileにubuntuのUUIDを設定する。以下はその設定例。この例では、ubuntuのGUIDが22222222-3838-5115-0940-1234567890abである場合、defaultProfileに22222222-3838-5115-0940-1234567890abを指定している。

{
    "globals" : 
    {
        "alwaysShowTabs" : true,
        "defaultProfile" : "{22222222-3838-5115-0940-1234567890ab}",
        ...
    },
    "profiles" : 
    [
        {....},
        {
            ...,
            "name" : "Ubuntu",
            "guid" : "{22222222-3838-5115-0940-1234567890ab}",
            ...
        },
        { ... }
    ],
    "schemes" : 
    [...]
}

Windows Terminalを開いたときにWSL2 ubuntuのホームディレクトリを開くようにする

このためには、ubuntuのprofileに startingDirectory を追加し、”//wsl$/Ubuntu/{ホームディレクトリのFull Path}” と設定する。この startingDirectory はPowerShell、cmdにはデフォルトで存在する要素(デフォルト値はいずれも %USERPROFILE%)だが、WSL2 環境のprofileには設定されていない。以下はその設定例。

{
    "globals" : {...},
    "profiles" : 
    [
        {
            ...,
            "name" : "Ubuntu",
            "startingDirectory":"//wsl$/Ubuntu/home/logico",
            ...
        },
        { ... }
    ],
    "schemes" : 
    [ ... ]
}

背景を透過的にする

各profileのuseAcrylicをtrueにした上で、不透明度を表すacrylicOpacityを0から1までの間で設定する。自環境の場合、デフォルトではcmd以外はuseAcrylicがfalseで、acrylicOpacityはcmdは0.75、それ以外は0.5が設定されていた。

WindowsからのWSL2環境のファイルにアクセスする

WSLのubuntu 18.04では以下のパスでrootにアクセスできた。

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs

しかし、WSL2のubuntu 18.04はVHDファイルでホストされているため、rootfsというディレクトリが存在しない。

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

そのため、以下のようにUNCを使ってアクセスするしかない。

¥¥wsl$¥Ubuntu¥{Ubuntuでのパス}