如何添加第二个 WSL2 Ubuntu 发行版(全新安装)

dav*_*avy 15 windows-subsystem-for-linux

我有一个现有的 Ubuntu 发行版,我想要一个新的 Ubuntu 映像的第二个发行版。

我怀疑我可以:

  1. 将我现有的发行版导出到 tar wsl.exe --export
  2. 取消注册我现有的发行版 wsl unregister
  3. 从 Microsoft Store 卸载 Ubuntu
  4. 从 Microsoft Store 重新安装 Ubuntu,给我一个全新的安装
  5. 通过 tar 从 tar 导入 wsl --import

那应该给我 2 个发行版,我现有的加上一个新的。有没有更简单/更好的方法?

这是最新的(撰写本文时)Windows 10 Build 19035

Bis*_*iyo 23

重要提示:以下过程仅适用于Windows 10 Build 18305 或更高版本。请确保在命令行中wsl.exe--import选项。对于较旧的 Windows 10 版本,请尝试此替代方法

程序:

  • 首先,我们需要来自 Ubuntu 的 rootfs tarball。 在 Web 浏览器中打开https://cloud-images.ubuntu.com/releases/。转到具有所需 Ubuntu 版本的文件夹。

  • 下载ubuntu-x.x-server-cloudimg-amd64-wsl.rootfs.tar.gz文件(xx 用作版本号)。确保文件名有amd64-wsl并且文件类型是.tar.gz(GZIP tarball)。例如,直接链接将如下所示:

https://cloud-images.ubuntu.com/releases/eoan/release/ubuntu-19.10-server-cloudimg-amd64-wsl.rootfs.tar.gz
Run Code Online (Sandbox Code Playgroud)
  • 现在我们将使用wsl.exe命令行安装它。打开命令提示符。实际的命令格式如下:
wsl.exe --import <Distribution Name> <Install Folder> <.TAR.GZ File Path>
Run Code Online (Sandbox Code Playgroud)
  • 运行该命令两次以安装具有不同发行版名称的 Ubuntu。文件夹名称和分发名称必须不同,否则输出中会显示错误。下面是两个例子:
wsl.exe --import DistroA FolderA ubuntu-x.x-server-cloudimg-amd64-wsl.rootfs.tar.gz
wsl.exe --import DistroB FolderB ubuntu-x.x-server-cloudimg-amd64-wsl.rootfs.tar.gz
Run Code Online (Sandbox Code Playgroud)
  • 安装的发行版可以这样执行wsl.exe -d DistroA

笔记:

  • 该过程可用于任何 GNU/Linux 发行版用户空间。

  • 这不使用 Windows 应用商店。因此,Windows 应用商店既不显示名称也不更新安装。

  • 在 Windows 10 ARM64 (AArch64) 中,使用arm64-wsl适用于 Ubuntu的云映像。

  • 在此过程中,同一台机器上的其他用户可以访问安装文件夹。如果您使用的是共享机器,请使用适当的权限。

  • 如果您愿意与同一台机器的其他用户共享安装,那么只需导出此注册表即可HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss。然后将其导入到同一台机器的其他用户中。

进一步阅读:

  • 完全同意这取决于用户,但如果目标是拥有多个类似于 Windows 应用商店创建的发行版,我相信这是有用的补充信息。 (2认同)
  • 目前看来,一些特定于 WSL 的映像位于 https://cloud-images.ubuntu.com/wsl/。22.04 映像大小约为 500 MiB,因此比 https://cloud-images.ubuntu.com/releases/ 上的“ubuntu-xx-server-cloudimg-amd64-root.tar.gz”映像大约 100 MiB 。不确定它们有何不同... (2认同)

yob*_*cus 18

Biswapriyo 的回答效果很好,但需要额外的步骤来更改默认用户。请注意,这需要build 18980 及更高版本

通过adduser命令添加非root用户:

PS C:\Users\Username> wsl -d DistroA
root@DESKTOP:/mnt/c/Users/Username# NEW_USER=username
root@DESKTOP:/mnt/c/Users/Username# adduser "${NEW_USER}"
Adding user `username' ...
Adding new group `username' (1000) ...
Adding new user `username' (1000) with group `username' ...
Creating home directory `/home/username' ...
Copying files from `/etc/skel' ...
New password: ****
Retype new password: ****
passwd: password updated successfully
Changing the user information for username
Enter the new value, or press ENTER for the default
        Full Name []: User Name
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]
Run Code Online (Sandbox Code Playgroud)

启用 sudoer 权限${NEW_USER}

adduser ${NEW_USER} sudo
Run Code Online (Sandbox Code Playgroud)

在 /etc/wsl.conf 中添加设置默认用户:

tee /etc/wsl.conf <<_EOF
[user]
default=${NEW_USER}
_EOF
Run Code Online (Sandbox Code Playgroud)

通过 退出 WSL logout,然后发出 WSL 关闭命令以使更改生效:

wsl --shutdown DistroA
Run Code Online (Sandbox Code Playgroud)

下次wsl -d DistroA调用时,${NEW_USER}用户将处于活动状态。

  • 只需注意 - `wsl --shutdown` 将关闭所有正在运行的发行版,它不需要任何参数。使用“wsl --terminate &lt;distro&gt;”来关闭特定发行版。 (2认同)