如何为手动安装的 WSL 发行版设置默认用户?

如何为手动安装的 WSL 发行版设置默认用户?

wsl --export我已经使用和克隆了一个 WSL 发行版wsl --import,但现在,运行时wsl newdistro总是以 root 身份登录。我知道该lxrun命令已被弃用,我想避免使用它。文档建议使用distroname.exe config,但这不起作用,因为这个没有相应的可执行文件。

答案1

截至撰写本文时,至少有三种(我们称之为 3.5)不同的方法可以更改/设置导入的 WSL 实例中的默认用户。虽然已经提到的两种方法仍然有效,但有一种 Microsoft 推荐的方法尚未在这个问题中提及。

方法 1 -/etc/wsl.conf

当前微软推荐在实例中设置用户名的方法是/etc/wsl.conf在实例中使用以下设置创建:

[user]
default=username

当然,将用户名更改为您的默认用户名。

退出您的发行版/实例,然后从 PowerShell 或 CMD 发出wsl --terminate <distroname>。重新启动时,应该设置默认用户。

这比基于注册表的方法更安全,并且更不容易出错。

方法 2 - 注册表项

按照@harrymc 的设置注册表项回答

方法 3 - LxRunOffline

使用LxRun离线设置注册表项,如@Jaime 所述回答最终这与方法 2 的效果相同。

半方法 4 - 通过wsl命令行参数进行运行时用户选择

启动任何 WSL 实例时可以通过以下方式选择用户名:

wsl -u usernamewsl -d distroname -u username等等。

例如,wsl -d Ubuntu -u root


附注:这个问题是关于在进口例如。但是,为了完整起见,您还可以使用以下命令为从商店(或wsl --install)安装的发行版设置默认用户名:

<distro>.exe config --default-user <username>

例如,如果你从商店安装了“Ubuntu 20.04”,则可以使用:

ubuntu2004.exe config --default-user <username>

.exe是 Windows 中的“应用程序执行别名”。您可以通过以下方式查看名称:“管理应用程序执行别名”在 Windows 系统设置中。


对于需要创建新用户的读者

@ndemou 在去年的评论中提出了一个很好的观点,但事后看来,我对此不恰当地予以驳斥。现在,另外两位用户在评论中提到 @ndemou 的信息很有帮助。我迟来的道歉!以下是基于 @ndemou 的建议的附加信息...

找到此答案的一些用户可能以 root 身份启动,不是因为他们--import使用的是发行版,而可能是因为在安装过程中从未创建默认用户。当发行版安装过早停止时,可能会发生这种情况,也可能出于其他原因。

在 Ubuntu(WSL 的默认发行版)下,你可以按照以下步骤创建用户:

wsl ~ -u root

如果需要,请添加该-d <distribution>选项。

然后运行:

NEWUSER=<your_username>
useradd --create-home --shell /usr/bin/bash --user-group --groups  adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev --password $(read -sp Password: pw ; echo $pw | openssl passwd -1 -stdin) $NEWUSER

然后使用上面提到的方法将用户设置为默认用户/etc/wsl.conf

如果您已经创建了用户,或者正在使用不同的发行版,如@ndemou 指出的那样,请确保还将用户添加到 中的组sudoers或通过 直接添加到sudoersvisudo请参阅答案这个问题了解更多详细信息。

答案2

正常命令语法例如:

ubuntu config --default-user new_user_name

但是,这对于通过以下命令启动的进口发行版不起作用:

wsl --distribution <DistributionName>

编辑:有报告称,上述内容现在也适用于进口的发行版。

尝试这个未记录的方法:

  • 使用regedit并导航至键:
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss
  • 检查其子项,查找项目中具有正确名称的分布DistributionName
  • 创建或修改一个名为的 DWORD 项DefaultUid,并将其设置为默认用户的用户 ID (uid)。此处 root 用户为 id,0而第一个用户 ID 为 1000 ( 0x3e8)。

如果这对您的设置不起作用,您需要运行以下命令:

wsl --distribution ubuntu -u user_name

更多信息请参阅:

答案3

验证您要设置为默认用户的 uidLinux 控制台经过id

username@host:~$ id
uid=1000(username) gid=1000(username) groups=1000(username),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(docker)
username@host:~$ 

验证发行版名称电源外壳经过wsl -l -v

PS C:\WINDOWS\system32> wsl -l -v
  NAME                   STATE           VERSION
* ubuntu-20.04           Running         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2
PS C:\WINDOWS\system32>

在中编辑注册表电源外壳

Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\*\ DistributionName | Where-Object -Property DistributionName -eq ubuntu-20.04  | Set-ItemProperty -Name DefaultUid -Value 1000

现在应该好了。

答案4

如果你正在使用Windows 终端然后您可以为您的发行版配置一个配置文件。

在里面个人资料设置Windows 终端选择您的发行版的配置文件,然后单击“常规”选项卡,然后Command line您可以使用先前推荐的命令选项之一wsl

例如,如果您将个人资料命名为Ubuntu并且您的用户名是bob,那么您应设置Command linewsl.exe -d Ubuntu -u bob

在此过程中,您可以配置Starting directory,也就是当您为您的发行版打开终端时默认打开的那个:

\\wsl$\Distro\home\username

使用前面的示例,对于名为 的发行版Ubuntu和用户名bob,您可以设置Starting directory为:

\\wsl$\Ubuntu\home\bob

相关内容