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 username
或wsl -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
或通过 直接添加到sudoers
。visudo
请参阅答案这个问题了解更多详细信息。
答案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 line
为wsl.exe -d Ubuntu -u bob
在此过程中,您可以配置Starting directory
,也就是当您为您的发行版打开终端时默认打开的那个:
\\wsl$\Distro\home\username
使用前面的示例,对于名为 的发行版Ubuntu
和用户名bob
,您可以设置Starting directory
为:
\\wsl$\Ubuntu\home\bob