![此答案并非最佳,仅是一种解决方法](https://linux22.com/image/1565027/%E6%AD%A4%E7%AD%94%E6%A1%88%E5%B9%B6%E9%9D%9E%E6%9C%80%E4%BD%B3%EF%BC%8C%E4%BB%85%E6%98%AF%E4%B8%80%E7%A7%8D%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95.png)
我正在尝试做什么
我尝试将 Windows 子系统(在我的情况下是 Ubuntu)的主目录编辑为 Windows 中的默认用户。为什么?因为我想替换 Cygwin,或者至少检查替换 Cygwin 是否可行。请让我们关注如何做,而不是为什么。据我所知,我还知道通过子系统命令 Windows 可能会导致写入/读取权限问题。
问题
我尝试使用 vim 修改密码,但我读到过这会导致问题,使用命令操作密码应该更安全。幸运的是,这个命令确实存在:
sudo usermod --home /mnt/c/Users/User CurrentUser
但是,当我输入它时输出是:
usermod: user CurrentUser is currently used by process 4
但是:进程 4 是 bash。
User@Machinename:~$ ps -A
PID TTY TIME CMD
1 ? 00:00:00 init
3 tty1 00:00:00 init
4 tty1 00:00:00 bash
39 tty1 00:00:00 ps
- 当我杀死(
kill -9 4
)它时,子系统显然也死亡了。 - 当我尝试将用户更改为 root ( ) 时,输入或任何其他“谁已登录”类型的命令
sudo -i
时,它不会列出 CurrentUser 。who
有人知道该怎么做吗?当我进入cd
子系统时,它会带我到/mnt/c/User/CurrentUser
?我做错了什么?
笔记:这是一个重新发布此问题因为有人建议我重新发布它,所以我可能会在这里找到答案。我只会链接它,以防有人找到一个或另一个资源并被引导到这里,因为超级用户是它的正确位置。
答案1
我找到了一个更好的解决方法,即不以 USERNAME 身份登录,而是以 root 身份(临时)登录。以下是我在系统上使用的命令,在当前 Windows 10 版本 19043.1165 上运行 ubuntu:
在提升的 PS 提示中
PS C:\Windows\system32> ubuntu.exe config --default-user root
启动 ubuntu,然后运行:
usermod --home /mnt/c/Users/SHORTNA~1/ USERNAME
- 请注意,如果您的 Windows 用户名中有空格,则需要使用带有 ~ 的路径。您可以通过打开命令提示符并使用 来找到它
dir /x
。
接下来返回到提升的 powershell 并运行:
PS C:\Windows\system32> ubuntu.exe config --default-user USERNAME
下次启动 ubuntu shell 时,它应该具有正确的主目录。如果您使用的是其他发行版,则应该有一个类似的命令(例如 opensuse-42 或 sles-12)。
答案2
此答案并非最佳,仅是一种解决方法
另一种选择
我没有弄清楚,但是更改默认用户根目录的一个解决方法是创建一个具有不同主目录的新用户。由于我不认同方法,而是认同解决方案,因此此选项对于所述问题来说是令人满意的。
如何实现
这可以实现输入:
sudo useradd -m -d /mnt/c/Users/windowsUser YourNewUserName
切换用户:
对于新用户:su - YourNewUserName
恢复默认:su - YourDefaultUserName
环境问题
切换用户需要 root 权限。如果您不知道密码su
(这是不同的从sudo
密码中),输入:
sudo -i
并使用sudo
密码进行身份验证。然后设置新密码,使用
passwd
我认为这个解决方案甚至更好/更干净,因为可以通过来回切换用户轻松地使用 WSL 控制您的 Windows 用户。
答案3
今天遇到了一个老问题,所以我将使用最新的信息来尝试解决它。
首先,不要这样做,尤其在 WSL2 上。WSL2 对存储在 Windows 驱动器上的文件的性能非常糟糕。当使用ext4WSL2 附带的文件系统,性能与 Windows 或 Linux 几乎相当。访问 Windows 驱动器上的文件时,速度可能会慢 10 倍以上(有时很多更多的)。
其次,如果你必须这样做,请记住两件事:
与 3 年前首次提出此问题时相比,此
wsl
命令为您提供了更多的灵活性。您可以通过以下方式轻松处理这种情况:- 注销当前用户(这样您就不会遇到“正在使用”的问题)
- 从 PowerShell 或 CMD 运行
wsl -u root
。这将以 root 用户身份启动 WSL 实例。 - 执行您需要的修改(例如
usermod
) - 退出 WSL 并以普通用户身份重启
没有
sudo
、没有su
、或者密码混乱需要处理。其次,请注意,Windows 驱动器和 Linux 文件系统之间的权限映射方式存在细微差别。默认情况下,
chmod
WSL 中的和等效项对 Windows 驱动器上的文件或目录没有影响。这可能会导致 Linux 下的许多实用程序出现问题,尤其是git
和rsync
。/etc/wsl.conf
可以通过创建一个名为以下内容的文件来修改 WSL,以“假装”设置和尊重文件的 Linux 权限:[automount] options = "metadata"
请参见有关权限的 Microsoft 文档和这个关于 wsl.conf了解更多信息。