共用方式為


WSL 中的進階設定組態

wsl.conf.wslconfig 檔案可用來在 WSL 中設定進階設定,以在 WSL VM 啟動時套用wsl.conf 用於根據每個 WSL 發行版本套用設置,而 .wslconfig 則用於將全域設置套用至 WSL。 您可以進一步瞭解以下的差異。

方面 .wslconfig wsl.conf
Scope 適用於所有 WSL 的一般設定 僅適用於 WSL 版本的設定
配置 WSL 中的功能啟用、為 WSL 2 提供電源的虛擬機設定(RAM、要開機的核心、CPU 數目等等) WSL 中的發行版設定,例如開機選項、DrvFs 自動掛接、網路功能、與 Windows 系統的互操作性、systemd 使用和預設使用者
位置 %UserProfile%\.wslconfig在 WSL 系統之外 /etc/wsl.conf,而在 WSL 發行版內

目前,所有 .wslconfig 設定僅適用於 WSL 2 發行版。 瞭解 如何檢查您執行的 WSL 版本。

組態變更的 8 秒規則

您必須等到執行 Linux 發行版本的子系統完全停止執行並重新啟動,才能顯示組態設定更新。 關閉發行版本殼層的「所有」執行個體之後,這通常需要大約 8 秒的時間。

如果您啟動發行版本 (例如 Ubuntu),請修改組態檔、關閉發行版本,然後重新啟動,您可能會假設您的設定變更已立即生效。 目前情況並非如此,因為子系統仍然可以執行。 您必須等候子系統停止後再重新啟動,以便有足夠的時間讓您的變更生效。 您可以使用 PowerShell 搭配命令 wsl --list --running,在關閉之後檢查 Linux 發行版本 (Shell) 是否仍在執行中。 如果沒有發行版本正在執行,您會收到回應:「沒有執行中的發行版本。」您現在可以重新啟動發行版本,以查看套用的設定更新。

命令 wsl --shutdown 是快速關閉 WSL 2 發行版本的方法,但會關閉所有正在執行的發行版本,因此請妥善使用。 您也可以使用 wsl --terminate <distroName> 來立即終止特定正在執行的散發版本。

wsl.conf

使用 wsl.conf 為每個在 WSL 1 或 WSL 2 上運行的 Linux 發行版配置區域設置。

  • 儲存在發行版本的 /etc 目錄中,作為一個 unix 檔案。
  • 用來進行個別發行版本的設定。 此檔案中進行的設定只會套用至包含儲存此檔案所在目錄的特定 Linux 發行版本。
  • 可用於由 WSL 1 或 WSL 2 執行的發行版。
  • 若要取得已安裝發行版本的 /etc 目錄,請使用發行版本的命令列搭配 cd / 來存取根目錄,然後使用 ls 列出檔案或使用 explorer.exe . 以在 Windows 檔案總管中檢視。 目錄路徑看起來應該類似於:/etc/wsl.conf

注意

使用 wsl.conf 檔案調整個別發行版本設定僅適用於 Windows 組建 17093 和更新版本。

wsl.conf 的組態設定

wsl.conf 檔案會根據個別發行版本來進行設定。 (如需 WSL 2 發行版本的全域設定,請參閱 .wslconfig)。

wsl.conf 檔案支援四個區段:automountnetworkinteropuser(仿照 .ini 檔案的慣例,鍵值會在區段下宣告,例如 .gitconfig 檔案。)如需有關儲存 wsl.conf 檔案的位置資訊,請參閱 wsl.conf

systemd 支援

許多 Linux 發行版本預設會執行「systemd」(包括 Ubuntu),而 WSL 最近已新增此系統/服務管理員的支援,讓 WSL 更類似於在裸機電腦上使用您慣用的 Linux 發行版本。 您需要 0.67.6+ 版的 WSL 才能啟用 systemd。 使用命令 wsl --version 檢查您的 WSL 版本。 如果您需要更新,則可以在 Microsoft Store 中下載最新版本的 WSL。 在部落格公告中了解更多。

若要啟用 systemd,請使用 wsl.conf 以取得系統管理員權限,在文字編輯器中開啟您的 sudo 檔案,並將這幾行新增至 /etc/wsl.conf

[boot]
systemd=true

接著,您必須使用 wsl.exe --shutdown 從 PowerShell 關閉 WSL 發行版本,以重新啟動您的 WSL 執行個體。 當您的發行版本重新啟動後,systemd 應該會開始運行。 您可以使用命令 systemctl list-unit-files --type=service 進行確認,這會顯示服務的狀態。

自動掛接設定

wsl.conf 區段卷標: [automount]

關鍵 價值 預設 備註
enabled 布爾值 true true 導致固定磁碟機(例如 C:/D:/)會自動使用 DrvFs 掛載在 /mntfalse 表示磁碟機不會自動掛載,但您仍然可以手動掛載或通過 fstab 進行挂载。
mountFsTab 布爾值 true true 設定 /etc/fstab 為在 WSL 啟動時處理。 /etc/fstab 是一個檔案,您可以在其中宣告其他文件系統,例如SMB共用。 因此,您可以在啟動時,在 WSL 中自動掛接這些檔案系統。
root 字串 /mnt/ 設定將固定磁碟機自動掛載的位置目錄。 根據預設,這會設定為 /mnt/,因此您的 Windows 檔案系統 C:\ 會掛接至 /mnt/c/。 如果您變更 /mnt//windir/,您應該會看到固定 C:\ 掛接至 /windir/c
options 以逗點分隔的值清單,例如 uid、gid 等,請參閱下方的自動掛接選項 自動掛接選項值如下所列,並附加至預設 DrvFs 掛接選項字串。 只能指定特定於 DrvFs 的選項。

自動掛接選項會套用為所有自動掛接磁碟機的掛接選項。 若要僅變更特定磁碟機的選項,請使用 /etc/fstab 檔案。 不支援通常會被掛載程式剖析成旗標的選項。 如果您想要明確指定這些選項,必須在 /etc/fstab 中包含您想這樣做的每個磁碟機。

自動掛接選項

為 Windows 磁碟機 (DrvFs) 設定不同的掛接選項,可以控制 Windows 檔案計算檔案許可權的方式。 下列是可用的選項:

關鍵 描述 預設
uid 用於所有檔案擁有者的使用者識別碼 WSL 散發版本的預設使用者識別碼(在第一次安裝時,這會預設為 1000
gid 用於所有檔案擁有者的群組識別碼 WSL 散發版本的預設群組識別碼(在第一次安裝時,這會預設為 1000
umask 要排除檔案和目錄之權限的八進位遮罩 022
fmask 所有檔案權限中要排除的八進位遮罩 000
dmask 用八進位遮罩設定要從所有目錄中排除的權限 000
metadata 是否將中繼資料新增至 Windows 檔案以支援 Linux 系統權限 disabled
case 判斷被視為區分大小寫的目錄,以及以 WSL 建立的新目錄是否會設定旗標。 如需選項的詳細說明,請參閱區分大小寫。 選項包含 offdirforce off

根據預設,WSL 會將 和 uid 設定gid為預設使用者的值。 例如,在 Ubuntu 中,預設使用者為 uid=1000gid=1000。 如果這個值用來指定不同的 giduid 選項,則會覆寫預設的使用者值。 否則,預設值將總是被添加。

上述 umask、fmask 等選項只有在 Windows 磁碟驅動器掛接元數據時才適用。 預設不會啟用元數據。 您可以 在這裡找到詳細資訊

注意

許可權遮罩會在套用至檔案或目錄之前,先執行邏輯 OR 作業。

什麼是 DrvFs?

DrvFs 是 WSL 的檔案系統外掛程式,其設計目的是支援 WSL 與 Windows 檔案系統之間的互通性。 DrvFs 可讓 WSL 在 /mnt 下以支援的檔案系統掛接磁碟機,例如 /mnt/c、/mnt/d 等。如需掛接 Windows 或 Linux 磁碟機或目錄時指定預設區分大小寫行為的詳細資訊,請參閱區分大小寫頁面。

網路設定

wsl.conf 區段卷標: [network]

關鍵 價值 預設 備註
generateHosts 布爾值 true true 將 WSL 設定為產生 /etc/hostshosts 檔案包含一張主機名稱對應 IP 位址的靜態地圖。
generateResolvConf 布爾值 true true 將 WSL 設定為產生 /etc/resolv.confresolv.conf 包含可以將指定主機名稱解析成其 IP 位址的 DNS 清單。
hostname 字串 Windows 主機名稱 設定要用於 WSL 發行版本的主機名稱。

互通性設定

wsl.conf 區段卷標: [interop]

這些選項可在內部預覽版本 17713 及更高版本中使用。

關鍵 價值 預設 備註
enabled 布爾值 true 設定此機碼將決定 WSL 是否支援啟動 Windows 程序。
appendWindowsPath 布爾值 true 設定此索引鍵會判斷 WSL 是否會將 Windows 路徑專案新增至 $PATH 環境變數。

使用者設定

wsl.conf 區段卷標: [user]

這些選項可在版本 18980 和更新的版本中取得。

關鍵 價值 預設 備註
default 字串 第一次執行時建立的初始使用者名稱 設定此設定會指定首次啟動 WSL 時要執行的使用者。

開機設定

開機設定僅適用於 Windows 11 和 Server 2022。

wsl.conf 區段卷標: [boot]

關鍵 價值 預設 備註
command 字串 您想要在 WSL 執行個體啟動時執行的命令字串。 此命令會以根使用者身分執行。 例如:service docker start
protectBinfmt 布爾值 true 防止 WSL 在啟用 systemd 時產生 systemd 單元。

GPU 設定

wsl.conf 區段卷標: [gpu]

關鍵 價值 預設 備註
enabled 布爾值 true 允許Linux應用程式透過para-virtualization存取 Windows GPU。

時間設定

wsl.conf 區段卷標: [time]

關鍵 價值 預設 備註
useWindowsTimezone 布爾值 true 設定此金鑰會讓 WSL 使用並同步至 Windows 中設定的時區。

範例 wsl.conf 檔案

下面的 wsl.conf 範例檔案展示了一些可用的配置選項。 在此範例中,發行版本是 Ubuntu-20.04,檔案路徑為 \\wsl.localhost\Ubuntu-20.04\etc\wsl.conf

# 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 processes 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 上執行的所有已安裝散發套件上設定全域設定。

  • .wslconfig 檔案預設不存在。 它必須在您的 %UserProfile% 目錄中建立並儲存,才能套用這些配置設定。
  • 用來全域設定所有已安裝並以 WSL 2 版本執行的 Linux 發行版的設定。
  • 僅可用於由WSL 2運行的發行版本。 以 WSL 1 執行的發行版本不會受到此設定的影響,因為其不是以虛擬機器執行。
  • 若要進入您的 目錄,請在 PowerShell 中使用 來存取主目錄 (通常是您的使用者資料夾, ),或者您可以開啟 Windows 檔案總管並在位址列中輸入 。 目錄路徑看起來應該類似於:/etc/wsl.conf

WSL 會偵測這些檔案是否存在、讀取內容,並在每次啟動 WSL 時自動套用組態設定。 如果檔案遺失或格式不正確 (標記格式不正確),WSL 會繼續正常啟動,而不會套用組態設定。

.wslconfig 的組態設定

.wslconfig 檔案會針對使用 WSL 2 執行的所有 Linux 發行版本全域進行設定。 (如需個別發行版本設定,請參閱 wsl.conf)。

如需 .wslconfig 檔案儲存位置的資訊,請參閱 .wslconfig。

注意

使用 .wslconfig 設定全域設定僅適用於在 Windows 組建 19041 和更新版本中以 WSL 2 身分執行的散發套件。 請記住,您可能需要執行 wsl --shutdown 來關閉 WSL 2 VM,然後重新啟動您的 WSL 實例,使這些變更生效。

小提示

建議您直接在 WSL 設定中修改 WSL 組態,而不是手動編輯 .wslconfig 檔案。 您可以在 [開始] 選單中找到 WSL 設定。 適用於Linux的 Windows 子系統設定

此檔案可以包含下列選項,這些選項會影響支援任何 WSL 2 發行版本的 VM:

主要 WSL 設定

.wslconfig 區段卷標: [wsl2]

關鍵 價值 預設 備註
kernel 路徑 Microsoft 建置核心提供的收件匣 自訂 Linux 核心的絕對 Windows 路徑。
kernelModules 路徑 自訂Linux核心模組 VHD 的絕對 Windows 路徑。
memory 尺寸 Windows 上總記憶體的 50% 要指派給 WSL 2 VM 的記憶體量。
processors 數字 相同的邏輯處理器數目在 Windows 上 要指派給 WSL 2 VM 的邏輯處理器數目。
localhostForwarding 布爾值 true 布林值,指定在 WSL 2 VM 中繫結到萬用字元或 localhost 的連接埠是否應該可透過 localhost:port從主機進行連接。
kernelCommandLine 字串 沒有 其他核心命令列引數。
safeMode 布爾值 false 在「安全模式」中執行 WSL 會停用許多功能,而目的是用來復原處於不良狀態的發行版本。 僅適用於 Windows 11 和 WSL 0.66.2+版。
swap 尺寸 Windows 上 25% 的記憶體大小四捨五入至最接近的 GB 請設定要新增至 WSL 2 VM 的交換空間大小,若不需要交換檔案,請設為 0。 交換儲存體是以磁碟為基礎的 RAM,在記憶體需求超過硬體裝置的限制時使用。
swapFile 路徑 %Temp%\swap.vhdx 交換虛擬硬碟的絕對 Windows 路徑。
pageReporting 布爾值 true 設定可讓 Windows 回收配置給 WSL 2 虛擬機的未使用記憶體。
guiApplications 布爾值 true 布林值,用於在 WSL 中開啟或關閉對 GUI 應用程式 (WSLg) 的支援。
debugConsole1 布爾值 false 可用布林值來開啟輸出控制台視窗,以便在 WSL 2 發行版執行個體啟動時顯示 dmesg 的內容。
maxCrashDumpCount 數字 10 設定為了偵錯而保留的損毀傾印檔案數目上限。 WSL 保留的預設數位為 10。 超過此限制時,系統會自動刪除較舊的損毀傾印,以騰出空間供新的傾印使用。 設定 max 有助於減少這些損毀檔案所使用的磁碟空間量。
nestedVirtualization1 布爾值 true 可開啟或關閉巢狀虛擬化的布林參數,讓其他巢狀 VM 能夠在 WSL 2 中執行。
vmIdleTimeout1 數字 60000 VM 在關閉之前閒置的毫秒數。
dnsProxy 布爾值 true 只適用於 networkingMode = NAT。 布爾值,通知 WSL 將 Linux 中的 DNS 伺服器設定為主機上的 NAT。 將 設定為 false 會將 DNS 伺服器從 Windows 鏡像到 Linux。
networkingMode¹² 字串 NAT 可用的值為:none、、 netbridged 、(已淘汰)、mirroredvirtioproxy。 如果值為 none,則會中斷 WSL 網路連線。 如果值為 net 或未知的值,則會使用 NAT 網路模式(從 WSL 2.3.25 開始,如果 NAT 網路模式失敗,則會回復為使用 VirtioProxy 網路模式)。 如果值為 bridged,則會使用橋接網路模式(此模式自 WSL 2.4.5 起已標示為已被取代)。 如果值為 mirrored,則會使用鏡像網路模式。 如果值為 virtioproxy,則會使用 VirtioProxy 網路模式。
firewall¹² 布爾值 true 將此設定為 true 可讓 Windows 防火牆規則,以及 Hyper-V 流量專屬的規則來篩選 WSL 網路流量。
dnsTunneling¹² 布爾值 true 變更將 DNS 要求從 WSL 代理至 Windows 的方式
autoProxy1 布爾值 true 強制 WSL 使用 Windows 的 HTTP Proxy 資訊
defaultVhdSize 尺寸 1099511627776 (1 TB) 設定儲存 Linux 發行版 (例如 Ubuntu) 檔案系統的虛擬硬碟 (VHD) 大小。 可用來限制允許散發檔系統佔用的大小上限。

具有 「path」 值的項目必須是具有逸出反斜杠的 Windows 路徑,例如: C:\\Temp\\myCustomKernel

size值為 B(位元組)且單位為允許的專案。 若要使用其他單位,必須附加大小單位,例如: 8GB512MB

2:僅適用於 Windows 11。

2:需要 Windows 11 版本 22H2 或更高版本。

實驗性設定

這些設定是實驗性功能的選擇預覽,我們的目標是在未來設為預設值。

.wslconfig 區段卷標: [experimental]

關鍵 價值 預設 備註
autoMemoryReclaim 字串 dropCache 可用的值為: disabledgradualdropCache。 如果值為 disabled,則會停用WSL自動記憶體回收。 如果值為 gradual,快取的記憶體將會以緩慢且自動方式回收。 如果值為 dropCache 或未知的值,則會立即回收快取的記憶體。
sparseVhd 布林 false 當設定為 true時,任何新建立的 VHD 都會自動設定為疏鬆。
bestEffortDnsParsing¹² 布林 false 只有當 wsl2.dnsTunneling 設定為 true 時才適用。 當設定為 true時,Windows 會從 DNS 要求擷取問題,並嘗試加以解決,忽略未知的記錄。
dnsTunnelingIpAddress¹² 字串 10.255.255.254 只有當 wsl2.dnsTunneling 設定為 true 時才適用。 指定啟用 DNS 通道時,將在 Linux resolv.conf 檔案中設定的名稱伺服器。
initialAutoProxyTimeout1 字串 1000 只有當 wsl2.autoProxy 設定為 true 時才適用。 設定 WSL 容器啟動時,WSL 等候擷取 HTTP proxy 資訊的時間長度(以毫秒為單位)。 如果代理設定在此時間之後解析完畢,則必須重新啟動 WSL 執行個體,才能使用取得的代理設定。
ignoredPorts¹² 字串 只有當 wsl2.networkingMode 設定為 mirrored 時才適用。 指定 Linux 應用程式可以繫結至哪些連接埠,即使該連接埠用於 Windows 也一樣。 這可讓應用程式僅在 Linux 上監聽流量端口,因此即使該端口在 Windows 上用於其他用途,這些應用程式仍不會被阻擋。 例如,WSL 將允許系結至適用於 Docker Desktop 的 Linux 連接埠 53,因為它只會接聽 Linux 容器內的要求。 應該以逗號分隔清單格式化,例如:
hostAddressLoopback¹² 布林 false 只有當 wsl2.networkingMode 設定為 mirrored 時才適用。 當設定為 true 時,將允許容器使用分配給主機的IP位址連接至主機,或主機連接至容器。 127.0.0.1 回送位址可以始終使用,此選項允許使用所有額外指派的本機 IP 位址。 僅支援指派給主機的IPv4位址。

2:僅適用於 Windows 11。

2:需要 Windows 11 版本 22H2 或更高版本。

範例 .wslconfig 檔案

下面的 .wslconfig 範例檔案展示了一些可用的配置選項。 在此範例中,檔案路徑為 。

# Settings apply across all Linux distros running on WSL 2
[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB

# Sets the VM to use two virtual processors
processors=2

# Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel
kernel=C:\\temp\\myCustomKernel

# Specify the modules VHD for the custum Linux kernel to use with your installed distros.
kernelModules=C:\\temp\\modules.vhdx

# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
kernelCommandLine = vsyscall=emulate

# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=8GB

# Sets swapfile path location, default is %UserProfile%\AppData\Local\Temp\swap.vhdx
swapfile=C:\\temp\\wsl-swap.vhdx

# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
pageReporting=false

# Turn on default connection to bind WSL 2 localhost to Windows localhost. Setting is ignored when networkingMode=mirrored
localhostforwarding=true

# Disables nested virtualization
nestedVirtualization=false

# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
debugConsole=true

# Sets the maximum number of crash dump files to retain (default is 5)
maxCrashDumpCount=10

# Enable experimental features
[experimental]
sparseVhd=true

其他資源