验证在 WSL 中应用的配置值

验证在 WSL 中应用的配置值

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,假设enabledtrue

[interop]

  • enabled默认为true。如果设置为false,则运行/mnt/c/Windows/System32/notepad.exe应导致退出代码 1。具有讽刺意味的是,我发现这个在最新的 WSL 版本中似乎存在问题在写这个答案时。它肯定会让人相信可能需要进行“此设置是否已解析”验证,正如您所问的那样。

  • appendWindowsPath默认为true。抱歉,我这么说太明显了,将其设置为 后,很容易通过 来检查falseWindows 路径是否存在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可以观察到这里

  • nestedVirtualizationpageReporting:我没有好的答案。

相关内容