如何在Windows 10上更改WSL Ubuntu bash的默认用户

我在Windows 10上安装了WSL Bash,并将我的用户名设置为'abc',但现在我想将其更改为其他内容。
我应该如何更改当前登录用户的用户名?
当我打开Bash时,它会自动使用当前用户登录。

5截至目前,Ubuntu 20.04是最新版本。在使用WSL 2安装后,ubuntu2004命令将可供使用:ubuntu2004 config --default-user robert - BSalita
5对于那些没有通过商店安装的用户(例如通过导出/导入方式),请参考以下链接:https://github.com/microsoft/WSL/issues/3974#issuecomment-576782860。可以通过创建`/etc/wsl.conf`文件来更改默认用户。 - Sebastian Hoffmann
非常感谢@SebastianHoffmann,这个评论让我意识到问题出在导入上。我原以为导出的时候一切都会完全一样,但看来并非如此。 - EmSixTeen
9个回答

现在,由于LxRun.exe已被弃用,如果你从Windows商店安装Ubuntu,你需要在Windows命令提示符下运行的命令是:
ubuntu config --default-user <username>

(注意:根据您安装的版本,这可能是ubuntu1804.exeubuntu2004.exe

如果您正在使用WSL2,则已经完成。

对于WSL1,您还需要重新启动LxssManager服务。

sc stop LxssManager
sc start LxssManager

6Ubuntu可能不是您的默认版本,这取决于您安装的版本,请查看以下答案,因为我的是"ubuntu1804 config ..."。 - rmcsharry
9ubuntu1804 config --default-user ... - masterxilo
重启服务对我来说是必须的。在我找到这个之前,我谷歌了几分钟,没人真正提到过它。谢谢! - jValdron
1有没有一种方法可以使用“bash”命令来执行相同的操作? - rmutalik
1不是设置默认用户,而是为我打开了Bash。出于某种原因,它似乎无法正常工作。截至今天,我使用的是最新版本的Windows。 - akxer
在我的情况下不起作用,我没有从Microsoft Store安装发行版,而是直接从网站下载发行版(因为我使用的是服务器样式的安装)。 - Cornelius Roemer
如果需要更多的实例,您可以在/etc/wsl.conf中进行设置。我在下面写了一篇文章 - Jacktose
2使用WSL 2后,无需重新启动LxSSManager服务即可使容器使用更改。 - Laice

最佳答案ubuntu config --default-user root)目前适用于默认实例。但是如果你有多个实例,你需要稍微费点功夫:

在实例内部,以root身份创建/编辑/etc/wsl.conf并添加以下内容:

[user]
default=username

然后关闭它,在PowerShell中运行wsl --terminate <distro name>,然后重新启动它。

这是来自WSL存储库的问题。注册表修改的答案也在其中,但现在正式支持的解决方案是/etc/wsl.conf


7对于像我一样将发行版文件从C盘移动到其他驱动器的人来说,这个方法一次就解决了问题。 - Asif Ali
4这应该是被接受的答案,因为它也适用于自定义安装的发行版。 - papercrane
4这对于我使用wsl --exportwsl --import将我的发行版移动到另一个驱动器的情况适用。 - Constructor
2我需要将默认用户从“root”更改为我的自定义用户,这就是答案。 - Vahid Amiri
1/etc/wsl.conf 的解决方案对我起了作用。 - Adil
也适用于Debian :-) - Polluks
然而,我仍然对导入已导出的发行版会如何搞乱默认用户的配置感到困惑。 - PIG208
谢谢,在编辑完文件后,你可以直接输入 wsl.exe --shutdown,而不必去PowerShell中终止。 - Lan Nguyen
太好了。在将WSL从旧电脑迁移到新电脑后,这个方法起作用了。最初它将默认用户更改为root,有点奇怪。不过,无论如何,在重新启动WSL之后,问题得到解决。 - frizzant

所有其他答案都很有帮助,但也可能有其他情况,根据你的情况来进行操作。我的系统是Ubuntu 16.04,所以我使用了以下方法:
ubuntu1604 config --default-user <username>

如果您安装了Ubuntu 18.04:
ubuntu1804 config --default-user <username>

如果您使用了默认的那个,则为:

ubuntu config --default-user <username>

这样做不会将当前用户名更改为我在<username>中提供的用户名吗?当我尝试这样做时,它只告诉我提供的用户名不存在。这是在18.0.4版本上的情况。 - wuno
您可能希望将“root”作为用户使用吗? - kakabali
1这应该是答案,今天是2020年2月15日,这是唯一可行的选择。 - Luke
正确答案是我有两个Ubuntu!你必须具体说明。 - raphaklaus

如果您在Microsoft Store上运行的是Ubuntu 18.04,则命令(powershell或cmd)将是:
ubuntu1804 config --default-user <username>

你可以在正常的命令提示符(cmd.exe)中运行以下命令来更改bash的默认用户:
LxRun.exe /setdefaultuser <new_name>

旧问题今天被提起,但是答案需要更新和整合以保持最新(且正确)。
这个问题有两个部分,到目前为止,每个答案都只涵盖其中一个部分。
第一个问题:
“我如何更改当前登录用户的用户名?”
正如@PJ127所指出的那样,第一步是在Ubuntu内部实际更改用户名。现在(2021年),最简单的方法是退出WSL并启动PowerShell,然后:
wsl -l -v
wsl --terminate <distro> # <distro> from the previous command
wsl -u root -d <distro> # "-d <distro>" is only needed for non-default instances
# Now from in WSL
usermod -l newname oldname 
# Optionally change the home directory name to match
usermod -d /home/doug -m doug
# Optionally change the group name to match
groupmod -n newname oldname

然后是问题的第二部分,大多数答案都试图回答这个问题:
当我打开bash时,它会自动使用当前用户登录。
有多种方法可以实现这一点,但2021年Microsoft推荐/记录的方法就像@Jacktose回答的那样。
在您的WSL实例中,使用以下内容执行sudo editor /etc/wsl.conf命令:
[user]
default=username
退出后,从PowerShell中执行wsl --terminate <distro name>命令并重新启动WSL。

虽然 ubuntu.exe --config 方法能够起作用,但存在两个问题:

  • 它并非总是 "ubuntu.exe"。可执行文件的名称(技术上称为“应用执行别名”)取决于您从商店中安装的版本。多年来,Ubuntu 在商店中有多个软件包。每个受支持的发行版都有一个软件包(例如 ubuntu2004.exe 等),还有一个用于“当前”版本的软件包(ubuntu.exe)。尽管这里是 Ask Ubuntu,如果您使用其他发行版,也可以是 alpine.exe 等。

  • 正如其他答案中指出的那样,如果您安装了多个实例(这是 WSL 的一个很好的功能),它也不起作用。它只对第一个通过商店安装的实例起作用。

当然,还有一些基于注册表的方法可以更改默认名称,但既然我们有更安全、支持的方法,就不要在这里涵盖那些方法了。 :-)


设置默认用户对我来说没有起作用,直到我“添加”了该用户。现在它运行得非常顺利。(在使用WSL和VS Code时只使用了root,直到我进行了这个操作之后才添加了其他用户) - ps2goat


ubuntucmd.exe(Windows 10 / WSL Ubuntu 20.04)中无法识别,因此上述解决方案对我无效。

对我有效的方法(来自Windows终端):

wsl.exe -u root
sudo usermod -l newUsername oldUsername
sudo usermod -d /home/newHomeDir -m newUsername

这是正确的答案,因为它只是在更改用户名,而不是用户本身。 另外,如果你收到了无法更改用户名的消息,因为有一个进程正在运行,只需执行 sudo kill processId - pmiguelpinto
1而且你可能也想要更改组名字,使用命令'sudo groupmod -n 新用户名 旧用户名'。 - pmiguelpinto

使用wsl --list命令查看已安装的WSL发行版。它可能返回Ubuntu-22.04或其他你可能已安装的版本。或者,你可以在WSL Ubuntu终端会话中运行以下命令来获取你的Ubuntu版本:
grep "DISTRIB_RELEASE=" /etc/lsb-release | grep -E [0-9]{2}.[0-9]{2} -o

在Windows CMD中运行下面的命令,以设置您的默认用户。请确保将2204替换为您具体的Ubuntu版本(使用上述命令获取):
ubuntu2204 config --default-user <username>

2这看起来与5年前的此答案中提供的信息完全相同。虽然我们欢迎对旧问题的新回答,但我们要求它们是新的 ;-). 如果您只是为了最新版本添加ubuntu2204,那么将其编辑到现有答案中应该很简单。如果您想进行这个编辑,我很乐意为您批准。谢谢! - NotTheDr01ds
我明确地添加了如何获取Ubuntu版本的说明,而不是列出几个当前常见的版本。那是唯一的新部分...我没有注意到其他答案中已经涵盖了这部分,所以决定添加我的答案。 - Mikhail
2明白了 - 看起来这些信息可能本应该编辑到其他答案中。有时候这是一个难以抉择的问题,我知道。但是看看其他用户对那个答案所做的类似修改吧。 - NotTheDr01ds
在借鉴他人答案的基础上,给予适当的认可是非常重要的。这些社区的目的是分享知识,因此将重复或相似的答案进行链接是至关重要的。 - theYnot