这些是我从"wsl -l -o"和"wsl -l -v"命令中获取的输出结果。
这是失败安装后的运行中的Ubuntu-22.04。
我该如何修复它?
取消注册现有的22.04安装。请注意,这是一个破坏性操作,会删除分发中的所有文件,因此只应在安装失败或您确信可以安全删除分发时使用:
wsl -l -v
# 确认分发名称。
# 它应该是"Ubuntu-22.04"或
# "Ubuntu",取决于您何时以及如何
# 从商店安装。
# 根据您的版本更新下面的命令。
wsl --unregister Ubuntu-22.04
# 或 wsl --unregister Ubuntu
使用“旧版”非图形化安装程序安装22.04:
ubuntu2204.exe install --ui=none
# 或 ubuntu.exe install --ui=none
这样应该会跳过安装中的问题部分,并成功安装。
Ubuntu 22.04只在WSL2下使用新的TUI配置步骤。我相信这一步是导致“应用程序在所需时间内未启动”的原因。
让我们看看是否可以通过安装为WSL1来避免这个失败。如果成功了,你就可以将其转换为WSL2。
卸载失败的Ubuntu 22.04,再次(开玩笑,我知道)
重新启动(可选,但建议)
从PowerShell中运行:
wsl --set-default-version 1
再次运行安装程序。
wsl -l -v
# 确认您的发行版名称,如选项1中所示
wsl --shutdown
wsl --set-version Ubuntu-22.04 2
# 或者 wsl --set-version Ubuntu 2
# 这需要一些时间
wsl --set-default-version 2
wsl -l -v
# 确认正确的版本
如果由于某种原因这个方法不起作用,那就继续尝试下一个选项...
您可能能够直接跳到下一步,但我包括这一步作为确保rootfs被正确提取的“安全”选项。请注意,这些说明是针对商店中的“有版本号”的Ubuntu 22.04版本。如果您想使用(现在已更新为22.04的)没有版本号的“Ubuntu”,您需要进行相应的修改。
这次不要卸载Ubuntu 22.04
退出任何WSL2分发版
启动一个管理员PowerShell,逐行复制、粘贴并运行以下命令:
# 编辑下面的路径以符合您的偏好
$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"
退出管理员PowerShell
启动普通的PowerShell,逐行复制、粘贴并运行以下命令:
wsl --shutdown
# 确保这些路径与上面创建的路径相匹配
$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
如果镜像成功导入,则使用wsl ~ -d Ubuntu2204
启动它。
您应该看到与上面显示的类似的启动屏幕 -- 您将以root用户身份登录。
继续下一节(可以独立于此部分完成)。
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
# wsl -l -v
# Substitute "Ubuntu" as the distribution name below if needed
wsl --terminate Ubuntu-22.04
wsl ~ -d Ubuntu-22.04
wsl --unregister Ubuntu
ubuntu.exe install --ui=none
- Silverfishwsl -l -v
也能区分这两种情况,所以更新后的答案看起来都很好!我只想补充一点,我使用的是Windows 10,因为我相信WSL在Windows 11上可能会有些不同。所以如果有人在Windows 11中遇到了相同的错误消息,你可以留下评论告诉大家它是否对你有效! - SilverfishThe operation completed successfully.
NAME STATE VERSION
* Ubuntu-22.04 Stopped 1
wsl --set-version Ubuntu-22.04 2
Conversion in progress, this may take a few minutes...
For information on key differences with WSL 2 please visit https://aka.ms/wsl2
Conversion complete.
wsl --set-default-version 2
For information on key differences with WSL 2 please visit https://aka.ms/wsl2
The operation completed successfully.
wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Stopped 2
wsl --unregister Ubuntu-22.04
命令应该能够让您达到与通过图形界面进行的 重置 相同的状态,如果我没记错的话。 - NotTheDr01dsubuntu.exe
),它执行了以下操作:
$env:USERPROFILE\AppData\Local\Packages\<package>
目录中的适当位置。Willkommen! Bienvenue! Welcome! Добро пожаловать! Welkom!
页面,您可以在其中选择语言。
4. 无论如何,都不要选择“帮助”,否则安装程序将再次崩溃。它可能是可恢复的,也可能不是,但根据我的经验,它肯定会崩溃。
5. 不要使用鼠标 - 此时这不是一个图形化安装程序 - 它是一个TUI,只能通过键盘响应,据我所知。
6. 使用箭头键和Enter在TUI中选择您的语言。
7. 在TUI中设置您的用户名/密码。使用Tab选择字段。完成后,Tab到“Done”并按下Enter。
8. 除非您有特殊需求,否则不要更改下一个屏幕上的任何选项。默认情况下应该选择“Done”。只需按下Enter即可。
9. 在下一个屏幕上等待,该屏幕显示“设置完成”和“正在应用更改”(相互矛盾的信息,依我看)。此步骤需要太长时间,并且可能存在某些问题。同样,在此处不要选择“帮助”,否则安装程序将无法完全执行(根据我的经验)。
10. 最终,它将转到一个“Hi”屏幕。注意更新的说明,并在“立即重启”选项上按下Enter。可选:在Windows中运行RegEdit
,导航到HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss
。找到具有“DistributionName”为“Ubuntu-22.04”的条目(确切地说)。
记下它 - 不要做其他任何操作。我们只是想确保它被删除。
在开始菜单中右键单击“Ubuntu 22.04”并选择“卸载”。再次强调,这将删除该发行版,所以只有在安装失败且其中没有数据时才执行此操作。同时,请确保您正在删除正确的发行版 - 例如,如果您安装了多个“Ubuntu”,请不要错误地删除错误的一个。
请注意,在未来,“开始菜单中的无版本Ubuntu”对于新用户可能也是22.04(尽管希望在此之前解决这些问题)。再次确保您正在删除正确的发行版。
回到RegEdit,点击“查看” -> “刷新”,并确认注册表条目已被删除。如果没有删除,您可能需要手动删除它。请注意,对我而言,它已经被正确删除了。我只是预料到一种情况,即在重新安装之前确保一切都被删除。
打开文件资源管理器,导航到%userprofile%\AppData\Local\Packages\
寻找以CanonicalGroupLimited.Ubuntu22.04LTS
开头的一个(可能是CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc
)。如果不存在,则没问题。以前的Ubuntu卸载程序确实会删除此目录。但是,看起来(至少对我而言)22.04的卸载程序仍然保留了虚拟磁盘。这可能是件好事,因为我们在AU上看到过几个人在卸载时丢失数据的问题。
但是,如果卸载后它仍然存在,您可能需要手动删除22.04目录。如果愿意,您可以备份..\LocalState\ext4.vhdx
文件,但请注意它大约有1.5GB。
完成所有操作后,重新启动可能是个不错的主意。
然后返回Microsoft Store,按照先前的步骤尝试重新安装Ubuntu 22.04。
grep 1000 /etc/passwd
返回了什么内容吗? - NotTheDr01dsgrep 1000 /etc/passwd
没有返回任何结果。 - Luan Lima