WSL2中的高级设置配置wsl.conf 和 .wslconfig
Tags: .wslconfigOSWindows 11wsl.confWSL2
简介
wsl.conf 和 .wslconfig 文件用于基于每个分发wsl.conf
() 和全局跨所有 WSL 2 分发.wslconfig
版 () 配置高级设置选项。 本指南将介绍每个设置选项(何时使用每种文件类型、存储文件的位置、示例设置文件和提示)。
wsl.conf 和 .wslconfig 有何区别?
可以使用以下两种方式为每次启动 WSL 时自动应用的已安装 Linux 分发版配置设置:
- .wslconfig ,用于在 WSL 2 上运行的所有已安装分发版 全局 配置设置。
- wsl.conf 为 WSL 1 或 WSL 2 上运行的 Linux 发行版配置 每个分发 版的设置。
这两种文件类型都用于配置 WSL 设置,但存储文件的位置、配置的范围以及运行分发的 WSL 版本都会影响要选择的文件类型。
正在运行的 WSL 版本会影响配置设置。 WSL 2 作为轻型虚拟机 (VM) 运行,因此使用虚拟化设置来控制使用 (使用的内存量或处理器量,如果使用 Hyper-V 或 VirtualBox) ,则可能很熟悉这些内存或处理器量。
wsl.conf
- 以
/etc
unix 文件的形式存储在分发目录中。 - 用于按分布配置设置。 此文件中配置的设置将仅应用于包含存储此文件的目录的特定 Linux 分发版。
- 可用于版本、WSL 1 或 WSL 2 运行的分发版。 .wslconfig
- 若要访问已安装的发行版的
/etc
目录,请使用发行版的命令行和cd /
访问根目录,然后使用ls
列出文件或使用explorer.exe .
在 Windows 文件资源管理器中查看。 目录路径应如下所示:/etc/wsl.conf
.wslconfig
- 存储在目录中
%UserProfile%
。 - 用于跨作为 WSL 2 版本运行的所有已安装 Linux 分发版全局配置设置。
- 只能用于 WSL 2 运行的分发版。 作为 WSL 1 运行的分发版不会受到此配置的影响,因为它们未作为虚拟机运行。
- 要访问
%UserProfile%
目录,请在 PowerShell 中使用cd ~
访问主目录(通常是用户配置文件C:\Users\<UserName>
),或者可以打开 Windows 文件资源管理器并在地址栏中输入%UserProfile%
。 目录路径应如下所示:C:\Users\<UserName>\.wslconfig
WSL 将检测这些文件是否存在、读取内容,并在每次启动 WSL 时自动应用配置设置。 如果文件丢失或格式不正确, (标记格式不正确) ,则 WSL 将继续按正常方式启动,而无需应用配置设置。
备注
使用 wsl.conf 文件调整每个发行版设置的功能仅适用于 Windows 版本 17093 及更高版本。
第 8 秒的规则
必须等到运行 Linux 分发版的子系统完全停止运行并重启,才能显示配置设置更新。 关闭分发外壳的所有实例后,这通常需要大约 8 秒。
如果启动分发版 (ie。Ubuntu) ,修改配置文件,关闭分发版,然后重新启动它。 你可能假设配置更改已立即生效。 但当前情况并非如此,因为子系统可能仍在运行。 在重新启动之前,必须等待子系统停止,以便为获取更改提供足够的时间。 可以通过使用 PowerShell 和以下命令来检查关闭 Linux 发行版 (shell) 后其是否仍在运行:wsl --list --running
。 如果未运行分发版,将收到响应:“没有正在运行的分发版。现在可以重启分发版,查看应用的配置更新。
该命令 wsl --shutdown
是重启 WSL 2 分发版的快速路径,但它将关闭所有正在运行的分发版,因此请明智地使用。
wsl.conf 的配置设置
wsl.conf 文件基于每个分发配置设置。 (有关 WSL 2 分发版的全局配置,请参阅 .wslconfig) 。
wsl.conf 文件支持四个部分:automount
、network
和interop
user
。 (在.ini文件约定之后建模,密钥将在节下声明,如 .gitconfig files.) 有关存储 wsl.conf 文件的位置的信息,请参阅 wsl.conf 。
systemd 支持
默认情况下,许多 Linux 分发版运行“systemd” (,包括 Ubuntu) 和 WSL 最近添加了对此系统/服务管理器的支持,以便 WSL 更类似于在裸机计算机上使用你喜欢的 Linux 分发版。 需要版本 0.67.6+ 的 WSL 才能启用系统化。 使用命令 wsl --version
检查 WSL 版本。 如果需要更新,可以在 Microsoft Store 中获取最新版本的 WSL。 在 博客公告中了解详细信息。
若要启用 systemd,请使用sudo
管理员权限在文本编辑器中打开文件wsl.conf
,并将以下行添加到/etc/wsl.conf
:
Bash复制
1 2 | [boot] systemd=true |
然后,需要使用 PowerShell 关闭 WSL 分发 wsl.exe --shutdown
版来重启 WSL 实例。 分发重启后,系统应运行。 可以使用以下命令进行确认: systemctl list-unit-files --type=service
这将显示服务的状态。
自动装载设置
节标签:[automount]
key | 值 | default值 | 说明 |
---|---|---|---|
enabled | boolean | 是 | true 导致固定驱动器(即 C:/ 或 D:/ )自动装载到 DrvFs 中的 /mnt 下。 false 表示驱动器不会自动装载,但你仍可以手动或通过 fstab 装载驱动器。 |
mountFsTab | boolean | 是 | true 设置启动 WSL 时要处理的 /etc/fstab 。 /etc/fstab 是可在其中声明其他文件系统的文件,类似于 SMB 共享。 因此,在启动时,可以在 WSL 中自动装载这些文件系统。 |
root | string | /mnt/ | 设置固定驱动器要自动装载到的目录。 默认情况下,此设置设置为 /mnt/ ,因此 Windows 文件系统 C 驱动器已装载到 /mnt/c/ 。 如果更改为/mnt/windir/ ,应会看到已装载到/windir/c 的固定 C 驱动器。 |
选项 | 逗号分隔的值列表,例如 uid、gid 等,请参阅下面的自动装载选项 | 空字符串 | 下面列出了自动装载选项值,并追加到默认 DrvFs 装载选项字符串。 只能指定特定于 DrvFs 的选项。 |
自动装载选项作为所有自动装载驱动器的装载选项应用。 若要仅更改特定驱动器的选项,请改用 /etc/fstab
该文件。 通常由装载二进制文件分析成标志的选项不受支持。 如果要显式指定这些选项,则必须包含要在其中 /etc/fstab
执行此操作的每个驱动器。
自动装载选项
为 Windows 驱动器 (DrvFs) 设置不同的装载选项可以控制为 Windows 文件计算文件权限的方式。 提供了以下选项:
密钥 | 说明 | 默认 |
---|---|---|
uid | 用于所有文件的所有者的用户 ID | 首次安装时 WSL 发行版的默认用户 ID (默认为 1000) |
gid | 用于所有文件的所有者的组 ID | 首次安装时 WSL 发行版的默认组 ID (默认为 1000) |
umask | 要对所有文件和目录排除的权限的八进制掩码 | 000 |
fmask | 要对所有文件排除的权限的八进制掩码 | 000 |
dmask | 要对所有目录排除的权限的八进制掩码 | 000 |
metadata | 是否将元数据添加到 Windows 文件以支持 Linux 系统权限 | disabled |
case | 确定被视为区分大小写的目录以及使用 WSL 创建的新目录是否将设置标志。 有关选项的详细说明,请参阅区分大小写。 选项包括 off 、 dir 或 force 。 | off |
默认情况下,WSL 会将 uid 和 gid 设置为默认用户的值。 例如,在 Ubuntu 中,默认用户为 uid=1000,gid=1000。 如果使用此值指定不同的 gid 或 uid 选项,将覆盖默认用户值。 否则,将始终追加默认值。
(umask) 设置新创建文件的权限的用户文件创建模式掩码。 默认值为 022,只能写入数据,但任何人都可以读取数据。 可以更改值以反映不同的权限设置。 例如, umask=077
更改完全私有的权限,其他用户无法读取或写入数据。 若要进一步指定权限,也可以使用 fmask (文件) 和 dmask (目录) 。
备注
权限掩码在应用到文件或目录之前通过一个逻辑或操作进行设置。
什么是 DrvFs?
DrvFs 是 WSL 的文件系统插件,旨在支持 WSL 与 Windows 文件系统之间的互操作。 DrvFs 允许 WSL 在 /mnt 下装载支持文件系统的驱动器,例如 /mnt/c、/mnt/d 等。有关在装载 Windows 或 Linux 驱动器或目录时指定默认区分大小写行为的详细信息,请参阅 区分大小写 页面。
网络设置
节标签:[network]
key | 值 | default | 说明 |
---|---|---|---|
generateHosts | boolean | true | true 将 WSL 设置为生成 /etc/hosts 。 hosts 文件包含主机名对应的 IP 地址的静态映射。 |
generateResolvConf | boolean | true | true 将 WSL 设置为生成 /etc/resolv.conf 。 resolv.conf 包含能够将给定主机名解析为其 IP 地址的 DNS 列表。 |
hostname | string | Windows 主机名 | 设置要用于 WSL 分发的主机名。 |
互操作设置
节标签:[interop]
这些选项在预览体验成员内部版本 17713 和更高版本中可用。
key | 值 | default | 说明 |
---|---|---|---|
enabled | boolean | true | 设置此键可确定 WSL 是否支持启动 Windows 进程。 |
appendWindowsPath | boolean | true | 设置此键可确定 WSL 是否会将 Windows 路径元素添加到 $PATH 环境变量。 |
用户设置
节标签:[user]
这些选项在版本 18980 及更高版本中可用。
key | 值 | default | 说明 |
---|---|---|---|
default | 字符串 | 首次运行时创建的初始用户名 | 设置此键指定在首次启动 WSL 会话时以哪个用户身份运行。 |
启动设置
启动设置仅适用于 Windows 11 和 Server 2022。
节标签:[boot]
key | 值 | default | 说明 |
---|---|---|---|
命令 | string | "" | 你希望在 WSL 实例启动时运行的命令字符串。 此命令以根用户身份运行。 例如: service docker start |
示例 wsl.conf 文件
下面的示例 wsl.conf
文件演示了一些可用的配置选项。 在此示例中,分发是 Ubuntu-20.04,文件路径为 \\wsl.localhost\Ubuntu-20.04\etc\wsl.conf
。
Bash复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # Automatically mount Windows drive when the distribution is launched [automount] # Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above. Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab. enabled = true # Sets the directory where fixed drives will be automatically mounted. This example changes the mount location, so your C-drive would be /c, rather than the default /mnt/c. root = / # DrvFs-specific options can be specified. options = "metadata,uid=1003,gid=1003,umask=077,fmask=11,case=off" # Sets the `/etc/fstab` file to be processed when a WSL distribution is launched. mountFsTab = true # Network host settings that enable the DNS server used by WSL 2. This example changes the hostname, sets generateHosts to false, preventing WSL from the default behavior of auto-generating /etc/hosts, and sets generateResolvConf to false, preventing WSL from auto-generating /etc/resolv.conf, so that you can create your own (ie. nameserver 1.1.1.1). [network] hostname = DemoHost generateHosts = false generateResolvConf = false # Set whether WSL supports interop process like launching Windows apps and adding path variables. Setting these to false will block the launch of Windows processes and block adding $PATH environment variables. [interop] enabled = false appendWindowsPath = false # Set the user when launching a distribution with WSL. [user] default = DemoUser # Set a command to run when a new WSL instance launches. This example starts the Docker container service. [boot] command = service docker start |
.wslconfig 的配置设置
.wslconfig 文件全局配置使用 WSL 2 运行的所有 Linux 分发版的设置。 (对于按分发配置,请参阅 wsl.conf) 。
有关存储 .wslconfig 文件的位置的信息,请参阅 .wslconfig 。
备注
全局 .wslconfig
配置选项仅适用于在 Windows 内部版本 19041 及更高版本中作为 WSL 2 运行的分发版。 请记住,可能需要运行 wsl --shutdown
来关闭 WSL 2 VM,然后重启 WSL 实例以使这些更改生效。
此文件可以包含以下选项,这些选项会影响任何 WSL 2 分发的 VM:
节标签:[wsl2]
key | 值 | default | 说明 |
---|---|---|---|
内核 (kernel) | string | Microsoft 内置内核提供的收件箱 | 自定义 Linux 内核的绝对 Windows 路径。 |
内存 | 大小 | Windows 上总内存的 50% 或 8GB,以较小者为准;在 20175 之前的版本上:Windows 上总内存的 80% | 要分配给 WSL 2 VM 的内存量。 |
处理器 | 数字 | Windows 上相同数量的处理器 | 要分配给 WSL 2 VM 的处理器数量。 |
localhostForwarding | boolean | true | 一个布尔值,用于指定绑定到 WSL 2 VM 中的通配符或 localhost 的端口是否应可通过 localhost:port 从主机连接。 |
kernelCommandLine | 字符串 | 空白 | 其他内核命令行参数。 |
swap | 大小 | Windows 上 25% 的内存大小四舍五入到最接近的 GB | 要向 WSL 2 VM 添加的交换空间量,0 表示无交换文件。 交换存储是内存需求超过硬件设备上的限制时使用的基于磁盘的 RAM。 |
swapFile | 字符串 | %USERPROFILE%\AppData\Local\Temp\swap.vhdx | 交换虚拟硬盘的绝对 Windows 路径。 |
pageReporting | boolean | true | 默认设置 true 使 Windows 能够回收分配给 WSL 2 虚拟机的未使用的内存。 |
guiApplications | 布尔 | true | 一个布尔值,用于在 WSL 中打开或关闭对 GUI 应用程序 (WSLg) 的支持。 仅适用于Windows 11。 |
debugConsole | 布尔 | false | 一个布尔值,用于在 WSL 2 发行版实例启动时打开显示 dmesg 内容的输出控制台窗口。 仅适用于Windows 11。 |
nestedVirtualization | 布尔 | true | 用于打开或关闭嵌套虚拟化的布尔值,使其他嵌套 VM 能够在 WSL 2 中运行。 仅适用于Windows 11。 |
vmIdleTimeout | 数量 | 60000 | VM 在关闭之前处于空闲状态的毫秒数。 仅适用于Windows 11。 |
具有 path
值的条目必须是带有转义反斜杠的 Windows 路径,例如:C:\\Temp\\myCustomKernel
具有 size
值的条目必须是后跟单位的大小,例如 8GB
或 512MB
。
值类型后具有 * 的条目仅在Windows 11可用。
示例 .wslconfig 文件
.wslconfig
下面的示例文件演示了一些可用的配置选项。 在此示例中,文件路径为 C:\Users\<UserName>\.wslconfig
.