如何从命令行启动 WSL Ubuntu“控制台”

如何从命令行启动 WSL Ubuntu“控制台”

我正在努力从命令行(例如 PowerShell 或 CMD)启动 WSL“Ubuntu 20.04”商店应用程序(或任何商店应用程序)。

当我从“开始”菜单运行 Ubuntu 20.04 时,它会在一个带有 Ubuntu 图标和正确窗口标题(“Ubuntu 20.04 LTS”)的窗口中启动。我希望从命令行启动时获得相同的应用程序窗口。

我搜索了很多,发现这一页引用start shell:AppsFolder\{folder}!App(例如start shell:AppsFolder\Microsoft.WindowsStore_8wekyb3d8bbwe!App),但我无法让它在 Ubuntu Store App 上工作。对我来说这似乎有点复杂——有没有更简单的方法?如果没有,那它在 Ubuntu 上如何工作?

我熟悉该wsl命令,但如果我wsl -d Ubuntu-20.04从“开始”菜单运行,则出现的窗口会显示通用的 WSL/Linux/Penguin 图标,而不是 Ubuntu 图标。窗口标题也不会是C:\Windows\system32\wsl.exe“Ubuntu 20.04 LTS”。

如果我wsl从 CMD 运行相同的命令,它仍然有 CMD 图标。

也许我可以使用 DOS/CMDTITLE命令,但我只想使用一个命令来启动 Store 应用。这可能吗?

相比之下,“普通”的.exeWindows 应用程序可以很容易地从 CMD 或 PowerShell 启动。

我很高兴能有一个适用于 Ubuntu WSL 的解决方案,但如果有一个简单的(值得注意的是,可编程的) 运行方式全部Windows Store Apps,那太棒了。

答案1

将其作为单独的答案提供,因为正如您所注意到的,并非所有 WSL 发行版都会创建应用程序执行别名(来自我的其他答案)。

您看到的关于如何使用的页面start shell:/AppsFolder...是正确的,但缺少一个关键点——!App最后的最多但并非所有 UWP/Store 应用都如此。实际上,去年我在尝试备份我的 Minecraft Dungeons 进度时就遇到了这个问题,这很奇怪...

实际的语法是:

start shell:AppsFolder\PackageFamilyName!AppId

PackageFamilyName通常与 中的目录名称匹配C:\Program Files\WindowsApps,但除非您通过 UAC 提升了权限,否则该目录通常不可读。

AppId才是真正的挑战。它在包的 XML 清单中定义。它可以是开发人员想要的任何内容。大多数人确实使用App,但也有例外(尤其是对于 WSL,似乎)。

下面是一个 PowerShell 代码片段,用于运行所有用户的 Appx 包(商店安装的包以及 Windows 自带的包)以及一些“系统”包:

Get-AppxPackage | ForEach-Object {
  $packageFamilyName = $_.PackageFamilyName
  $packageManifest = Get-AppxPackageManifest $_
  $displayName = $packageManifest.Package.Properties.DisplayName
  $appId = $packageManifest.Package.Applications.Application.Id

  Write-Output "${displayName}: ${packageFamilyName}!${appId}"
}
  • Get-AppxPackage:枚举已安装的软件包
  • $_.PackageFamilyNameC:\Program Files\WindowsApps:应与大多数非系统包中的目录名称匹配
  • Get-AppxPackageManifest返回应用程序的 XML 包清单
  • 然后我们通过遍历 XMLDocument 作为 PowerShell/.Net 属性来获取DisplayName和属性。AppId

您应该能够使用start(CMD) 或Start-Process(PowerShell) 得到的输出:

start-process shell:AppsFolder\36828agowa338.AlpineWSL_my43bytk1c4nr!alpinewsl

但当然要检查你的来自上述测试的实际输出Get-AppxPackage,因为我相信系列名称可以根据商店发布而改变。

对我来说,这启动了一个带有 Alpine 的单独 Windows 控制台,带有 Alpine 徽标和标题。

答案2

简短回答:

从 CMD 或 PowerShell:

start ubuntu.exe

如果start在 PowerShell 下没有别名,请尝试:

start-process ubuntu.exe

更多详情:

ubuntu.exe是从 Microsoft Store 安装的“Ubuntu”应用程序的“应用程序执行别名”,尽管它也可能是:

  • ubuntu2004.exe:如果你从商店安装了“版本号”为“Ubuntu 20.04”
  • ubuntu1804.exe:如果你安装了“版本”为“Ubuntu 18.04”
  • 并且我假设您还没有使用已弃用的 16.04 版本。

您可以通过以下方式查看管理应用程序执行别名在 Windows 设置中。许多 Store 应用都包含一个“假.exe”程序,用于启动 Store 应用。您可以禁用它,但我假设它已启用。如果没有,当然,请启用它。

当您从“开始”菜单运行 Ubuntu 时,它当然会运行 Store 应用。此应用在旧版 Windows 控制台中运行 WSL,并执行一些其他操作,例如设置应用图标和字体。这几乎是我发现的与从命令行运行它的唯一区别。

当你ubuntu.exe从命令行运行(或其他 WSL 应用执行别名之一)时,它将启动ipconfig.exe当前终端。例如,它与键入 相同。它保留了“所属”终端(由 CMD 或 PowerShell 启动)的当前特征 - 相同的应用程序图标、相同的字体等。

当使用start(CMD) 或Start-Process(PowerShell) 命令运行时,它会在 Windows 中启动一个单独的进程(而不是作为当前 shell 的子进程)。Windows 在新终端(默认情况下为 Windows 控制台)中启动它,并且大概 WSL 会做一些神奇的事情来表示“如果我是终端的所有者,则设置图标和字体”。

答案3

如果您已经安装了 ubuntu 2024,那么只需ubuntu2024在命令窗口中输入并按回车键即可。它会在同一个命令窗口中登录 ubuntu。

相关内容