Windows 终端配置文件未显示

Windows Terminal profile not showing up

我刚刚安装了 WSL2 并在 Win10 1909 (18363.1256) 上使用 Windows 终端。我正在尝试设置 2 个不同的配置文件,一个启动本地 WSL2 Ubuntu shell,另一个启动另一个 WSL2 shell,它将自动 ssh 到特定主持人。

本地的很好用,显示没有问题,但是我似乎无法让我的第二个配置文件显示在配置文件列表中。

我的 settings.json 看起来像这样:

"profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles.
            "colorScheme": "One Half Dark",
            "fontFace": "JetbrainsMono NF",
            "fontSize": 11
        },
        "list":
        [
            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl",
                "startingDirectory": "//wsl$/Ubuntu/home/sensanaty",
                "tabTitle": "WSL2"
            },
            {
                "guid": "{15c5814b-7ed1-4cec-bc64-d165274958fa}",
                "hidden": false,
                "name": "External Host",
                "source": "Windows.Terminal.Wsl",
                "commandline": "ssh example@123.456.7.89",
                "tabTitle": "External Host"
            },
        ]
    },

通过以上,我的列表中只得到 Ubuntu 配置文件

我想可能是生成的 guid 之类的,但我只是做了一个简单的 uuidgen 并将其粘贴到 json 中,所以它不应该真的造成任何那里的问题。我也显然尝试过重新启动我的系统,但无济于事。如果我也禁用停止自动生成它们的选项,则默认配置文件显示正常。

有什么线索可以帮助我吗?

至少应删除最后一个逗号(我在您的示例中对其进行了评论),因为元素“外部主机”是列表的最后一个。

 [
            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl",
                "startingDirectory": "//wsl$/Ubuntu/home/sensanaty",
                "tabTitle": "WSL2"
            },
            {
                "guid": "{15c5814b-7ed1-4cec-bc64-d165274958fa}",
                "hidden": false,
                "name": "External Host",
                "source": "Windows.Terminal.Wsl",
                "commandline": "ssh example@123.456.7.89",
                "tabTitle": "External Host"
            }//, 
        ]

'source' 属性用于动态生成的配置文件,WSL 将为每个安装的实例创建一个配置文件。您无法控制这些动态生成的配置文件的命令行。您需要的是让您的新配置文件扩展命令行以告诉终端使用 WSL。完全删除 'source' 属性,以便您的新配置文件是静态的。

在你的情况下,应该是...

            {
                "guid": "{15c5814b-7ed1-4cec-bc64-d165274958fa}",
                "hidden": false,
                "name": "External Host",
                //"source": "Windows.Terminal.Wsl",
                "commandline": "wsl.exe ssh example@123.456.7.89",
                "tabTitle": "External Host"
            }//, 

正如 bwolfbarn 提到的,如果尾随逗号确实出现在“列表”块的末尾,您也应该放弃它。

以下是我的几行作为附加示例...

            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu 20.04 WSL2 tmux",
                //"source": "Windows.Terminal.Wsl",
                "commandline": "wsl.exe -d Ubuntu -e sh -c \"/usr/bin/tmux has-session -t main 2>/dev/null && /usr/bin/tmux attach-session -d -t main || /usr/bin/tmux -2 new-session -t main -s main -c ${HOME}\"",
                "cursorShape": "filledBox"
            },
            {
                "guid": "{4e04fa7e-76c7-4746-a322-a227e70dde6c}",
                "hidden": false,
                "name": "Ubuntu 20.04 WSL1 tmux",
                //"commandline": "wsl.exe -d Ubuntu20.04_WSL1",
                "commandline": "wsl.exe -d Ubuntu20.04_WSL1 -e sh -c \"/usr/bin/tmux has-session -t main 2>/dev/null && /usr/bin/tmux attach-session -d -t main || /usr/bin/tmux -2 new-session -t main -s main -c ${HOME}\"",
                "cursorShape": "filledBox"
            }

请注意,我相信您可以使用“wsl.exe -e”(a.k.a.--execute),但在您的情况下这并不是必需的。

如果您想在 Windows 终端菜单中查看您的“来源”:“Windows.Terminal.Wsl”,它必须存在于注册表中 [HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\{UUID}] (注册表 UUID 与 Windows 终端 UUID 无关)。

此注册表条目可以通过 运行“wsl --import”或通过克隆现有条目(如果您不介意弄乱注册表)来创建。

如果您在确认注册表项存在后仍然看不到您的配置文件,请删除 state.json 文件中与 settings.json 相同文件夹中的所有“generatedProfiles”项。这将强制 Windows 终端更新 state.json。如果您自己生成 Windows 终端配置文件 UUID,它可能会忽略它并创建自己的配置文件。在这种情况下,您将在 settings.json 中看到配置文件的重复条目。去掉手动生成的,留下终端生成的。