WSL2 と Windows Terminal

このエントリは2021/09/19現在の情報を基にしています。将来の機能追加により、記載内容との齟齬が発生する可能性があります(初版は2019/06/26、2021/01/21、2021/09/19更新)。

Windows TerminalとWSL2を組み合わせて利用する場合の備忘録。以下の内容はWindows Terminal 1.10.2383.0をベースにしている。

Windows Terminalの【設定】をクリックすると、2021/09/19現在、settings.jsonファイルがGUI形式で開かれる。このsettings.jsonは以下の場所に存在する。

%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json

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

Windows Terminalのメニューの並びは、settings.json内のprofiles要素中のlistの内の順番に一致するため、ubuntuを先頭に配置したい場合には、ubuntuの部分を配列の先頭に移動する。上記スクリーンショットのメニューの順番(Windows PowerShell > コマンドプロンプト > PowerShell 7.1.0 > Azure Cloud Shell > Ubuntu)は以下の設定で実現している。

{
    ......,
    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles.
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile.
                "guid": "{Windows PowerShellのGUID}",
                "name": "Windows PowerShell",
                "fontFace": "Cascadia Code PL",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile.
                "guid": "{cmd.exeのGUID}",
                "name": "コマンド プロンプト",
                "fontFace": "Cascadia Code PL",
                "commandline": "cmd.exe",
                "hidden": false
            },
            {
                "guid": "{PowerShell 7.1のGUID}",
                "hidden": false,
                "name": "PowerShell 7.1.0",
                "fontFace": "Cascadia Code PL",
                "source": "Windows.Terminal.PowershellCore"
            },
            {
                "acrylicOpacity" : 0.6,
                "closeOnExit" : false,
                "colorScheme" : "Vintage",
                "commandline" : "Azure",
                "connectionType" : "{接続タイプのGUID}",
                "cursorColor" : "#FFFFFF",
                "cursorShape" : "bar",
                "fontFace" : "Cascadia Code PL",
                "guid" : "{Azure Cloud ShellのGUID}",
                "historySize" : 9001,
                "icon" : "ms-appx:///ProfileIcons/xxxxxx.png",
                "name" : "Azure Cloud Shell",
                "padding" : "0, 0, 0, 0",
                "snapOnInput" : true,
                "startingDirectory" : "%USERPROFILE%",
                "useAcrylic" : true
            },
            {
                "guid": "{WSL2のGUID}",
                "hidden": false,
                "acrylicOpacity": 0.5,
                "colorScheme": "Solarized Dark",
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl",
                "startingDirectory": "//wsl$/Ubuntu/home/logico_jp",
                "fontFace":  "Cascadia Code PL"
            }
        ]
    },
    ......
}

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

自環境の場合、デフォルトでPowerShell Coreが起動するようになっていたが、これをubuntuにする場合、defaultProfileにubuntuのGUIDを設定する。このdefaultProfileはsettings.jsonの11行目あたりにあるのですぐわかるはず。以下の例では、ubuntuのGUIDが22222222-3838-5115-0940-1234567890abであるものとして、defaultProfileに22222222-3838-5115-0940-1234567890abを指定している。

{
    "defaultProfile" : "{22222222-3838-5115-0940-1234567890ab}",
        ...
    },
    "profiles" : 
    {
        "defaults": {....},
        "list":
        [
            {
                ...,
                "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_jp",
            ...
        },
        { ... }
    ],
    ......
}

背景を透過的にする

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

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

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

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

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

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

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

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

なお、Windows 11のPreviewでは、以下のようにアクセスするよう(2021/09/19現在)。

¥¥wsl.localhost¥Ubuntu¥{Ubuntuでのパス}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中