Lua*_*ima 10 lts system-installation windows-subsystem-for-linux 22.04
当我尝试在 WSL 上安装 Ubuntu 22.04 LTS 时,出现以下失败消息。我无法输入任何内容,因此无法完成设置。
这些是我从“wsl -l -o”和“wsl -l -v”命令获得的输出。
这是安装失败后运行的Ubuntu-22.04 。
我该如何修复它?
对于那些遇到此错误的人,以下是尝试修复该错误的几种想法:
选项 1:首先尝试此操作。感谢@Silverfish在下面的评论中确认它有效。这应该是解决许多失败的 Ubuntu 22.04 WSL 安装的最简单途径。
选项2:从评论来看,这似乎是解决问题的可靠方法,但它比选项1长了很多。
选项 3 和 4:仅当前两个选项对您不可行时才作为后备方案。*
来自 PowerShell:
取消注册现有的 22.04 安装。请注意,这是一种破坏性操作,将删除发行版中的所有文件,因此仅应在安装失败或您确信可以安全删除发行版时使用它:
wsl -l -v
# Confirm the distribution name.
# It should be either "Ubuntu-22.04" or
# "Ubuntu" depending on when and how you
# installed from the Store.
# Update the commands below based on your version.
wsl --unregister Ubuntu-22.04
# or wsl --unregister Ubuntu
Run Code Online (Sandbox Code Playgroud)
使用“旧”非图形安装程序安装 22.04:
ubuntu2204.exe install --ui=none
# or ubuntu.exe install --ui=none
Run Code Online (Sandbox Code Playgroud)
这应该会跳过安装的有问题的部分并成功。
Ubuntu 22.04 仅使用 WSL2 下的新 TUI 配置步骤。我相信这一步是失败的The app didn't start in the required time.。
让我们看看是否可以通过安装为 WSL1 来避免该故障。如果有效,您就可以转换为 WSL2。
再次卸载失败的 Ubuntu 22.04(有趣,我知道)
重新启动(可选,但推荐)
从 PowerShell 中运行:
wsl --set-default-version 1
Run Code Online (Sandbox Code Playgroud)
再次运行安装程序。
请注意,安装程序在 WSL1 下运行需要更长的时间。
如果我是对的(而且我知道到目前为止我还没有做到),那么这个安装程序将成功完成。请注意,它将跳过用户名/密码的 TUI 配置,以及/etc/wsl.conf为 WSL2 运行的可选步骤。它将直接进入基于控制台的用户名/密码配置。希望这能让您成功输入。
如果是这样,并且发行版作为您的用户出现,那么:
wsl -l -v
# Confirm your distribution name, as in Option 1
wsl --shutdown
wsl --set-version Ubuntu-22.04 2
# Or wsl --set-version Ubuntu 2
# This will take a while
wsl --set-default-version 2
wsl -l -v
# Confirm the proper version
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因这不起作用,请继续执行下一个选项......
您也许可以直接跳到下一步,但我将此作为确保正确提取 rootfs 的“安全”选项。请注意,这些说明适用于应用商店中“版本化”的 Ubuntu 22.04 版本。如果您想使用(现已更新至 22.04)“Ubuntu”(无版本号),则需要进行适当的修改。
这次不要卸载Ubuntu 22.04
退出任何 WSL2 发行版
启动管理PowerShell 并复制、粘贴并单独运行每一行:
# Edit paths below to your preference
$WSL_IMAGE_PATH = "$env:USERPROFILE\WSL\Images"
$WSL_INSTANCE_PATH = "$env:USERPROFILE\WSL\Instances"
mkdir $WSL_IMAGE_PATH
mkdir "$WSL_INSTANCE_PATH\Ubuntu-22.04"
$UBUNTU_ROOTFS = (Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\Canonical*22.04*' | Where-Object {$_.Name -eq 'install.tar.gz' })[0].FullName
cp "$UBUNTU_ROOTFS" "$WSL_IMAGE_PATH\Ubuntu22.04.tar.gz"
Run Code Online (Sandbox Code Playgroud)
退出管理 PowerShell
启动普通的 PowerShell 并复制、粘贴并单独运行每一行:
wsl --shutdown
# Make sure these paths match those created above
$WSL_IMAGE_PATH = "$env:USERPROFILE\WSL\Images"
$WSL_INSTANCE_PATH = "$env:USERPROFILE\WSL\Instances"
wsl --import Ubuntu2204 "$WSL_INSTANCE_PATH" "$WSL_IMAGE_PATH\Ubuntu22.04.tar.gz" --version 2
Run Code Online (Sandbox Code Playgroud)
如果图像导入成功,则wsl ~ -d Ubuntu2204启动它。
您应该有一个与上面显示的类似的启动屏幕 - 您将以 root 用户身份登录。
继续下一部分(可以独立于本部分完成)。
来自 Ubuntu 22.04 内部
read -p "Username: " NEWUSER
# Enter your desired username
adduser $NEWUSER
# This will create your username/password
usermod -aG adm,cdrom,sudo,dip,plugdev,lxd $NEWUSER
# The following 4 lines must be entered together
cat <<EOF > /etc/wsl.conf
[user]
default=$NEWUSER
EOF
cat /etc/wsl.conf
# Confirm the contents
Run Code Online (Sandbox Code Playgroud)
退出 Ubuntu,然后从 PowerShell 中:
# wsl -l -v
# Substitute "Ubuntu" as the distribution name below if needed
wsl --terminate Ubuntu-22.04
wsl ~ -d Ubuntu-22.04
Run Code Online (Sandbox Code Playgroud)
如果一切顺利,您应该会成为 Ubuntu 22.04 的默认用户。
我的答案与 @NotTheDr01ds 的选项 2 相同,但无需卸载并重新安装失败的 Ubuntu。非常感谢他,因为如果没有从他的答案中收集到的见解,我就不会得出这个答案。
Settings> Apps> Ubuntu 22.04 LTS> Advanced Options> Reset。这似乎会将您带到与从 Microsoft Store 安装的 Ubuntu 下载相同的状态,但在解压之前。wsl --set-default-version 1The operation completed successfully.
Run Code Online (Sandbox Code Playgroud)
wsl --shutdownwsl -l -v NAME STATE VERSION
* Ubuntu-22.04 Stopped 1
Run Code Online (Sandbox Code Playgroud)
wsl --set-version Ubuntu-22.04 2Conversion in progress, this may take a few minutes...
For information on key differences with WSL 2 please visit https://aka.ms/wsl2
Conversion complete.
Run Code Online (Sandbox Code Playgroud)
wsl --set-default-version 2For information on key differences with WSL 2 please visit https://aka.ms/wsl2
The operation completed successfully.
Run Code Online (Sandbox Code Playgroud)
wsl -l -v NAME STATE VERSION
* Ubuntu-22.04 Stopped 2
Run Code Online (Sandbox Code Playgroud)