WSL 配置可以根据以下情况在wsl.conf
(针对发行版)或(全局)中设置:.wslconfig
高级设置文档。有没有办法验证某个值是否已被应用?
echo $propName
类似于bash/zsh 的东西?
答案1
不幸的是,不能通过环境变量。说实话,当我第一次开始输入这个答案时(一个多小时前),我认为这可能是一个好主意功能要求对于 WSL 团队来说。但后来我想知道它是否真的有用——环境变量可能只会告诉你值是否解析但如果真的有预期影响。不过,如果你想提出建议,当然请提出来。
但是,我建议尽可能通过观察预期效果来确认。我知道这不是“理想的”,但是,例如:
为了/etc/wsl.conf
:
[automount]
:
enabled
默认为true
。设置为false
很容易看出缺少/mnt/c
、/mnt/d
等处的挂载。同样,
root
通过检查确保C:
驱动器安装的位置位于此位置,可以轻松观察到。mountFsTab
默认为true
。将其设置为false
可以通过 中缺少任何挂载来观察/etc/fstab
,但仅当/etc/fstab
已填充时才有效。options
可以通过看到mount | grep drvfs
,假设enabled
是true
。
[interop]
:
enabled
默认为true
。如果设置为false
,则运行/mnt/c/Windows/System32/notepad.exe
应导致退出代码 1。具有讽刺意味的是,我发现这个在最新的 WSL 版本中似乎存在问题在写这个答案时。它肯定会让人相信可能需要进行“此设置是否已解析”验证,正如您所问的那样。appendWindowsPath
默认为true
。抱歉,我这么说太明显了,将其设置为 后,很容易通过 来检查false
Windows 路径是否存在echo $PATH
。
[boot]
:
systemd
(目前,希望永远如此)默认为false
。如果设置为true
,则ps axjf
应该(至少在最近的版本中)显示/sbin/init
而不是/init
。当然,sudo systemctl status
应该可以工作。command
有点困难。当然,command
使用简单的测试(例如)很容易验证是否正在运行touch /root/abc
,但调试错误条件更复杂的命令可能需要一点重定向体操。
[network]
:
本节中的所有当前设置都会在发行版启动期间在内核环形缓冲区中生成消息(至少在最近的 WSL 版本中)。如果你更改了其中任何一个的默认值,你可以使用类似以下代码来验证该设置是否已解析:
dmesg | grep resolv.conf dmesg | grep hosts dmesg | grep hostname
如果 WSL 检测到了
wsl.conf
更改,你将看到类似以下内容:[42221.879637] WSL (1) WARNING: /etc/hosts updating disabled in /etc/wsl.conf
注意:最好在 a 之后执行此操作,
wsl --shutdown
以将结果限制为当前启动的结果。 asudo dmesg --clear
与 a 结合wsl --terminate <distro>
使用也可以。
[user]
:
这里只有一个设置
default
,退出并终止分发后可以通过以下方式确认:wsl ~ -d <distroname> -e whoami
-d <distroname
当然,对于默认分布来说,这是可选的。
为了.wslconfig
:
kernel
:通常可以使用 进行验证uname -a
。如果您确实构建了自己的内核,我建议您稍微更改其名称,以便您可以在结果中将其识别为您自己的内核uname
。swap
和:将通过和其他机制memory
显示。htop
processors
: 显示者lscpu
kernelCommandLine
:通过数值的变化表现出来/proc/sys
。swapFile
:当然,查找命名文件的创建,但如果交换磁盘没有改变,我不太确定如何排除解析故障。localhostForwarding
:如果您怀疑本地主机转发可能存在问题,则更难以可靠地验证。在最近的 WSL 预览版本(仅限 Windows 11,从 Microsoft Store 安装)中,您还可以debugShell
在以下位置启用该选项.wslconfig
:[wsl2] localhostForwarding=false debugShell=true
发出
wsl --shutdown
。重新启动 WSL2 时,您将获得第二个控制台窗口,该窗口允许您查看发行版正在运行的虚拟机。在该控制台中,使用:ps axjf | grep port-tracker | grep -v grep
如果
localhostForwarding
启用,您应该会看到一个类似这样的正在运行的进程:localhost --port-tracker-fd 7
如果
localhostForwarding
被禁用,则该进程不应该运行。guiApplications
:当 时true
(默认),/mnt/wslg
将被挂载并填充。当 时false
,/mnt/wslg
将为空或不存在。可以从debugShell
上面提到的进行额外的调试。WSLGd
守护进程只会在 时在该 VM 中运行guiApplications=true
。vmIdleTimeout
可以观察到这里。nestedVirtualization
和pageReporting
:我没有好的答案。