針對適用於 Linux 的 Windows 子系統進行疑難排解

以下涵蓋一些與 WSL 相關聯的常見疑難排解案例,但也請考慮在 GitHub 上的 WSL 產品存放庫中 搜尋問題。

提出問題、錯誤報表、功能要求

WSL 產品存放庫問題可讓您:

  • 搜尋現有的問題 ,以查看是否有任何與您遇到問題相關聯的問題。 請注意,在搜尋列中,您可以移除 「is:open」,以包含已在搜尋中解決的問題。 請考慮批註或提供經驗,以取得任何您想要表達您有興趣繼續作為優先順序的開放問題。
  • 提出新問題。 如果您發現 WSL 有問題,而且沒有現有問題,您可以選取綠色的 [ 新增問題 ] 按鈕,然後選擇 [ WSL - 錯誤報表]。 您必須包含問題的標題、您的 Windows 組建編號 (執行 cmd.exe /c ver 以查看目前的組建 #) 、無論您是執行 WSL 1 或 2、目前的 Linux 核心版本 # (執行 wsl.exe --statuscat /proc/version) 、發行版本的版本 # (執行 lsb_release -r) 、涉及的任何其他軟體版本、重現步驟、預期的行為 如果可用且適當,則為實際行為和診斷記錄。 如需詳細資訊,請參閱 參與 WSL
  • 選取綠色的 [新增問題] 按鈕,然後選取 [功能要求],以提出功能要求。 您必須解決一些描述您要求的問題。

您也可以:

安裝問題

  • 安裝失敗,發生錯誤 0x80070003

    • 適用於 Linux 的 Windows 子系統只會在您的系統磁碟機上執行 (通常是您的 C: 磁碟機)。 請確定發行版本儲存在您的系統磁碟機上:
    • 在Windows 10開啟[設定] -[系統- >>儲存體] - >[更多儲存體設定]:變更新內容儲存位置的系統設定圖片,以在 C: 磁片磁碟機上安裝應用程式 (Windows 10)
    • 在Windows 11開啟[設定] -[系統> - >儲存體- >進階儲存體設定] - >[新內容] 儲存[系統設定的圖片] 以在 C: 磁片磁碟機上安裝應用程式 (Windows 11)
  • WslRegisterDistribution 失敗,發生錯誤 0x8007019e

    • 未啟用適用於 Linux 的 Windows 子系統選用元件:
    • 開啟主控台- >程式和功能- >開啟或關閉 Windows 功能- > 檢查Windows 子系統 Linux 版或使用本文開頭所述的 PowerShell Cmdlet。
  • 安裝失敗,發生錯誤 0x80070003 或錯誤0x80370102

    • 請確定已在電腦的 BIOS 內啟用虛擬化。 有關如何執行此操作的指示會因電腦而異,並且很可能與 CPU 相關。
    • WSL2 需要您的 CPU 支援第二層位址轉譯 (SLAT) 功能,此功能是在 Intel Nehalem 處理器中引進, (Intel Core 1st Generation) 和 AMD Opteron。 較舊的 CPU (,例如 Intel Core 2 Duo) 將無法執行 WSL2,即使已成功安裝虛擬機器平臺也一樣。
  • 嘗試升級時發生錯誤Invalid command line option: wsl --set-version Ubuntu 2

    • 請確定您已啟用Windows 子系統 Linux 版,而且您使用的是 Windows 組建版本 18362 或更新版本。 若要啟用 WSL,請在具有系統管理員權限的 PowerShell 提示中執行此命令:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  • 因為虛擬磁片系統限制,所以無法完成要求的作業。 虛擬硬碟檔案必須解壓縮且未加密,且不得疏鬆。

    • 開啟 Linux 散發套件的設定檔資料夾,取消選取 [壓縮內容] (若已核取,同時取消選取 [加密內容])。 其應該位於 Windows 檔案系統上的資料夾中,如下所示:%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited...
    • 在此 Linux 散發版本設定檔中,應該會有 LocalState 資料夾。 在此資料夾上按一下滑鼠右鍵,以顯示選項的功能表。 選取 [屬性 > 進階],然後確定 [壓縮內容以節省磁碟空間] 和 [加密內容以保護資料] 核取方塊未選取 (未核取) 。 如果系統詢問您是否只是將此套用到目前的資料夾或套用至所有子資料夾和檔案,請選取 [只是這個資料夾],因為您只是清除壓縮旗標。 在此之後,wsl --set-version 命令應該能運作。

WSL 散發版本屬性設定的螢幕擷取畫面

注意

在我的案例中,My Ubuntu 18.04 發行版本的 LocalState 資料夾位於 C:\Users < my-user-name > \AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc

請檢查 WSL Docs GitHub 執行緒 #4103 (英文),其中會追蹤此問題是否有更新資訊。

  • 無法辨識 'wsl' 詞彙是否為 Cmdlet、函式、指令檔或可執行程式的名稱。

  • 錯誤:Windows 子系統 Linux 版沒有已安裝的發行版本。

    • 如果您在已安裝 WSL 散發套件之後收到此錯誤:
    1. 在從命令列叫用散發套件之前,至少執行一次。
    2. 檢查您是否可能執行個別的使用者帳戶。 以系統管理員模式 (執行您的主要使用者帳戶,) 不應該產生此錯誤,但您應該確定您不小心執行 Windows 隨附的內建系統管理員帳戶。 這是個別的使用者帳戶,不會依設計顯示任何已安裝的 WSL 散發套件。 如需詳細資訊,請參閱 啟用和停用內建系統管理員帳戶
    3. WSL 可執行檔只會安裝到原生系統目錄。 當您在 64 位 Windows (或 ARM64 上執行 32 位進程時,任何非原生組合) ,裝載的非原生進程實際上會看到不同的 System32 資料夾。 (在 x64 Windows 上看到的 32 位進程儲存在磁片上的 \Windows\SysWOW64.) 您可以藉由查看虛擬資料夾,從裝載的進程存取「原生」系統32: \Windows\sysnative 。 它實際上不會出現在磁片上,但檔案系統路徑解析程式會發現它。
  • 錯誤:此更新僅適用於具有 Windows 子系統 Linux 版的機器。

    • 若要安裝 Linux 核心更新 MSI 套件,需要 WSL,且應該先將其啟用。 如果失敗,則會看到下列訊息:This update only applies to machines with the Windows Subsystem for Linux
    • 會看到此訊息的三個可能原因:
    1. 您仍在使用舊版的 Windows,而該版本不支援 WSL 2。 如需版本需求和更新的連結,請參閱步驟 #2。

    2. WSL 未啟用。 您將需要返回步驟 #1,並確定已在您的機器上啟用選用的 WSL 功能。

    3. 啟用 WSL 之後,必須重新開機才會生效。請重新開機,然後再試一次。

  • 錯誤:WSL 2 需要更新其核心元件。 如需詳細資訊,請造訪 https://aka.ms/wsl2kernel

    • 如果 %SystemRoot%\system32\lxss\tools 資料夾中缺少 Linux 核心套件,您將會遇到此錯誤。 若要解決此問題,請在這些安裝指示的步驟 #4 中安裝 Linux 核心更新 MSI 套件。 您可能需要從 [新增或移除程式] 解除安裝 MSI,然後重新安裝。

常見問題

我已使用 Windows 10 1903 版,但還是沒有看到 WSL 2 的選項。

這很可能是因為您的電腦尚未取得 WSL 2 的反向修補。 若要解決此問題,最簡單的方式是前往 [Windows 設定],然後按一下 [檢查更新] 以在您的系統上安裝最新的更新。 請參閱取得反向修補的完整指示

如果您按 [檢查更新] 但仍未收到更新,則可以手動安裝 KB KB4566116

錯誤:0x1bc 發生於 wsl --set-default-version 2

當 [顯示語言] 或 [系統地區設定] 設定不是英文時,就可能發生這種情況。

wsl --set-default-version 2
Error: 0x1bc
For information on key differences with WSL 2 please visit https://aka.ms/wsl2

的實際錯誤 0x1bc 為:

WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel

如需詳細資訊,請參閱問題 5749

無法從 Windows 存取 WSL 檔

9p 通訊協定檔案伺服器在 Linux 端提供服務,以允許 Windows 存取 Linux 檔案系統。 如果您無法使用 Windows 上的 \\wsl$ 存取 WSL,可能是因為 9P 未正確啟動。

若要加以檢查,您可以使用:dmesg |grep 9p 來檢查開機記錄,若會顯示任何錯誤。 成功的輸出如下所示:

[    0.363323] 9p: Installing v9fs 9p2000 file system support
[    0.363336] FS-Cache: Netfs '9p' registered for caching
[    0.398989] 9pnet: Installing 9P2000 support

如需此問題的進一步討論,請參閱 此 GitHub 執行緒

無法啟動 WSL 2 發行版本,而且只會在輸出中看到 'WSL 2'

如果您的顯示語言不是英文,則可能會看到錯誤文字的截斷版本。

C:\Users\me>wsl
WSL 2

若要解決此問題,請造訪 https://aka.ms/wsl2kernel,並遵循該文件頁面上的指示手動安裝核心。

在 linux 中執行 windows .exe 時 command not found

使用者可以直接從 Linux 執行 Windows 可執行檔,例如 notepad.exe。 有時候,您可能會遇到「找不到命令」,如下所示:

$ notepad.exe
-bash: notepad.exe: command not found

如果您的 $PATH 中沒有 win32 路徑,interop 就不會找到 .exe。 您可藉由在 Linux 中執行 echo $PATH 來進行驗證。 您應該會在輸出中看到 win32 路徑 (例如,/mnt/c/Windows)。 如果看不到任何 Windows 路徑,最有可能是您的路徑遭到您的 Linux shell 覆寫。

以下是 Debian 上的 /etc/profile 對問題貢獻的範例:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi

Debian 上的正確方式是移除上述幾行。 您也可以在如下所示的指派期間附加 $PATH,但這會導致一些其他 WSL 和 VSCode 的問題。

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:$PATH"
fi

如需詳細資訊,請參閱問題 5296 和問題 5779

"Error:0x80370102 無法啟動虛擬機器,因為未安裝必要的功能。」

請啟用虛擬機器平台 Windows 功能,並確定已在 BIOS 中啟用虛擬化。

  1. 檢查 Hyper-V 系統需求

  2. 如果您的電腦是 VM,請手動啟用巢狀虛擬化。 以系統管理員身分啟動 powershell,並執行:

    Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
    
  3. 請遵循電腦製造商的指導方針,了解如何啟用虛擬化。 一般而言,這可能會牽涉到使用系統 BIOS 來確保您的 CPU 上已啟用這些功能。 此程序的指示可能因電腦而異,請參閱 Bleeping Computer 的這篇文章中的範例。

  4. 啟用 Virtual Machine Platform 選用元件之後,請將您的電腦重新開機。

  5. 請確定您的開機設定中已啟用 Hypervisor 啟動。 您可以執行 (提升許可權的 powershell) 來驗證此問題:

     bcdedit /enum | findstr -i hypervisorlaunchtype
    

    如果您看到 hypervisorlaunchtype Off ,則會停用 Hypervisor。 若要在提升許可權的 PowerShell 中啟用它:

     bcdedit /set hypervisorlaunchtype Auto
    
  6. 此外,如果您已安裝協力廠商 Hypervisor (,例如 VMware 或 VirtualBox) ,請確定您在最新版本上可以支援 HyperV (VMware 15.5.5+VirtualBox 6+) 或已關閉。

深入瞭解如何在虛擬機器中執行 Hyper-V 時 設定巢狀虛擬化

WSL 在我的工作電腦或企業環境中沒有網路連線

商務或企業環境可能會設定Windows Defender防火牆設定來封鎖未經授權的網路流量。 如果 本機規則合併 設定為 「否」,則 WSL 網路預設將無法運作,而且您的系統管理員必須新增防火牆規則以允許它。

您可以遵循下列步驟來確認本機規則合併的設定:

Windows 防火牆設定螢幕擷取畫面

  1. 開啟「具有進階安全性的Windows Defender防火牆」 , (這與主控台) 中的「Windows Defender防火牆」不同
  2. 以滑鼠右鍵按一下 [本機電腦上具有進階安全性的Windows Defender防火牆] 索引標籤
  3. 選取 [屬性]
  4. 在開啟的新視窗上選取 [公用設定檔] 索引標籤
  5. 在 [設定] 區段底下選取 [自訂]
  6. 簽入 [自訂公用設定檔的設定] 視窗,以查看 [規則合併] 是否設定為 [否]。 這會封鎖對 WSL 的存取。

您可以在企業環境中找到如何變更此防火牆設定的指示 :為您的公司設定 WSL

連線到 VPN 之後,WSL 沒有網路連線

如果在連線到 Windows 上的 VPN 之後,bash 失去網路連線能力,請從 bash 內嘗試這個因應措施。 這個因應措施可讓您透過 /etc/resolv.conf 手動覆寫 DNS 解析。

  1. 記下 VPN 的 DNS 伺服器,使其無法執行 ipconfig.exe /all
  2. 建立現有 resolv.conf sudo cp /etc/resolv.conf /etc/resolv.conf.new 的複本
  3. 取消連結目前的 resolv.conf sudo unlink /etc/resolv.conf
  4. sudo mv /etc/resolv.conf.new /etc/resolv.conf
  5. 編輯 /etc/wsl.conf 此內容並將其新增至檔案。 (如需此設定的詳細資訊,請參閱進 階設定組態)
[network]
generateResolvConf=false
  1. 開啟 /etc/resolv.conf
    a. 從描述自動產生之批註的檔案中刪除第一行
    b. 將上述 (1) 中的 DNS 項目新增為 DNS 伺服器清單中的第一個項目。
    c. 關閉檔案。

當您中斷連線 VPN 之後,您必須將變更還原為 /etc/resolv.conf。 若要這麼做,請執行:

  1. cd /etc
  2. sudo mv resolv.conf resolv.conf.new
  3. sudo ln -s ../run/resolvconf/resolv.conf resolv.conf

啟動 WSL,否則安裝散發套件會傳回錯誤代碼

請遵循這些指示來收集詳細記錄,並在我們的 GitHub 上提出問題。

更新 WSL

Windows 子系統 Linux 版有兩個元件需要更新。

  1. 若要更新Windows 子系統 Linux 版本身,請使用 PowerShell 或 CMD 中的 命令 wsl --update

  2. 若要更新特定的 Linux 發行版本使用者二進位檔,請使用命令: apt-get update | apt-get upgrade 在您要更新的 Linux 發行版本中。

Apt-get 升級錯誤

有些套件會使用我們尚未實作的功能。 例如,尚未支援 udev,而且會導致數個 apt-get upgrade 錯誤。

若要修正與 udev 相關的問題,請遵循下列步驟:

  1. 將下列程式碼寫入 /usr/sbin/policy-rc.d 並儲存您的變更。

    #!/bin/sh
    exit 101
    
  2. 將執行權限新增至 /usr/sbin/policy-rc.d

    chmod +x /usr/sbin/policy-rc.d
    
  3. 執行下列命令:

    dpkg-divert --local --rename --add /sbin/initctl
    ln -s /bin/true /sbin/initctl
    

"Error:0x80040306」,在安裝時出現

這與我們不支援舊版主控台的事實有關。 若要關閉舊版主控台:

  1. 開啟 cmd.exe
  2. 以滑鼠右鍵按一下標題列 - > 屬性 - > 取消核取 [使用舊版主控台]
  3. 按一下 [確定]

"Error:0x80040154」,在 Windows 更新之後出現

「適用於 Linux 的 Windows 子系統」功能可能會在 Windows 更新期間停用。 如果發生這種情況,則必須重新啟用 Windows 功能。 如需啟用Windows 子系統 Linux 版的指示,請參閱手動安裝指南

變更顯示語言

WSL 安裝會嘗試自動變更 Ubuntu 地區設定,以符合 Windows 安裝的地區設定。 如果您不想要此行為,您可以執行此命令,以在安裝完成後變更 Ubuntu 地區設定。 您必須重新啟動 bash.exe,這個變更才會生效。

下列範例會將地區設定變更為 en-US:

sudo update-locale LANG=en_US.UTF8

Windows 系統還原後的安裝問題

  1. 刪除 %windir%\System32\Tasks\Microsoft\Windows\Windows Subsystem for Linux 資料夾。
    注意:如果您的選用功能已完整安裝且正常運作,請不要這麼做。
  2. 啟用 WSL 選用功能 (如果尚未這麼做)
  3. 重新開機
  4. lxrun /uninstall /full
  5. 安裝 bash

WSL 中沒有網際網路存取

某些使用者回報了特定防火牆應用程式在 WSL 中封鎖網際網路存取的問題。 回報的防火牆如下:

  1. Kaspersky
  2. AVG
  3. Avast
  4. Symantec Endpoint Protection

在某些情況下,關閉防火牆可讓您存取。 在某些情況下,只是安裝防火牆似乎會封鎖存取。

如果您使用 Microsoft Defender 防火牆,請取消核取 [封鎖所有連入連線,包括允許的應用程式清單中的連線]。允許存取。

使用 ping 時發生權限遭拒錯誤

對於 Windows 年度更新版 (版本 1607),需要 Windows 中的系統管理員權限,才能在 WSL 中執行 ping。 若要執行 ping,請以系統管理員身分在 Windows 上的 Ubuntu 上執行 Bash,或從具有系統管理員權限的 CMD/PowerShell 提示字元執行 bash.exe。

對於較新版本的 Windows 組建 14926 +,不再需要系統管理員權限。

Bash 已停止回應

當您使用 bash 時,您會發現 bash 已停止回應 (或鎖死),而且沒有回應輸入,請收集和報告記憶體傾印,以協助我們診斷問題。 請注意,這些步驟將會損毀您的系統。 如果您不熟悉這個作業,或未在執行此動作之前儲存您的工作,請不要這麼做。

若要收集記憶體傾印

  1. 將記憶體傾印類型變更為「完成記憶體傾印」。 變更傾印類型時,請記下您目前的類型。

  2. 使用步驟以使用鍵盤控制項設定當機。

  3. 重現停止回應或鎖死。

  4. 使用 (2) 中的機碼序列來損毀系統。

  5. 系統會損毀並收集記憶體傾印。

  6. 系統重新開機之後,請將 memory.dmp 回報給 secure@microsoft.com。 傾印檔案的預設位置是 %SystemRoot%\memory.dmp or C:\Windows\memory.dmp (如果 C: 是系統磁碟機)。 在電子郵件中,請注意,傾印適用於 Windows 小組的 WSL 或 Bash。

  7. 將記憶體傾印類型還原為原始設定。

檢查您的組建編號

若要尋找您電腦的架構和 Windows 組建編號,請開啟
[設定]> [系統] > [關於]

尋找 [作業系統組建] 和 [系統類型] 欄位。
[建置] 和 [系統類型] 欄位的螢幕擷取畫面

若要尋找您的 Windows Server 組建編號,請在 PowerShell 中執行下列命令:

systeminfo | Select-String "^OS Name","^OS Version"

確認已啟用 WSL

您可以在提升許可權的 PowerShell 視窗中執行下列命令,以確認已啟用Windows 子系統 Linux 版:

Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

OpenSSH-伺服器連線問題

嘗試連線 SSH 伺服器失敗,發生下列錯誤:「連線已由 127.0.0.1 連接埠 22 關閉」。

  1. 請確定您的 OpenSSH 伺服器正在執行:

    sudo service ssh status
    

    您已遵循此教學課程: https://ubuntu.com/server/docs/service-openssh

  2. 停止 sshd 服務並以偵錯模式啟動 sshd:

    sudo service ssh stop
    sudo /usr/sbin/sshd -d
    
  3. 檢查啟動記錄,並確認 HostKeys 可供使用,而且您未看到記錄訊息,例如:

    debug1: sshd version OpenSSH_7.2, OpenSSL 1.0.2g  1 Mar 2016
    debug1: key_load_private: incorrect passphrase supplied to decrypt private key
    debug1: key_load_public: No such file or directory
    Could not load host key: /etc/ssh/ssh_host_rsa_key
    debug1: key_load_private: No such file or directory
    debug1: key_load_public: No such file or directory
    Could not load host key: /etc/ssh/ssh_host_dsa_key
    debug1: key_load_private: No such file or directory
    debug1: key_load_public: No such file or directory
    Could not load host key: /etc/ssh/ssh_host_ecdsa_key
    debug1: key_load_private: No such file or directory
    debug1: key_load_public: No such file or directory
    Could not load host key: /etc/ssh/ssh_host_ed25519_key
    

如果您看到這類訊息,且金鑰遺失在 底下 /etc/ssh/ ,您必須重新產生金鑰,或只清除 & install openssh-server:

sudo apt-get purge openssh-server
sudo apt-get install openssh-server

啟用 WSL 選用功能時,找不到參考的元件。」

此錯誤與安裝狀態錯誤有關。 請完成下列步驟以嘗試並修正此問題:

  • 如果您正在從 PowerShell 執行 [啟用 WSL 功能] 命令,請嘗試使用 GUI 代替,方法是開啟 [開始] 功能表,搜尋 [開啟或關閉 Windows 功能],然後在清單中選取 [適用於 Linux 的 Windows 子系統],這將會安裝選用元件。

  • 前往 [設定]、[更新],然後按一下 [檢查更新],以更新您的 Windows 版本。

  • 如果這兩者都失敗,而且您需要存取 WSL,請考慮使用安裝媒體重新安裝 Windows 並選取 [保留所有專案],以確保您的應用程式和檔案會保留。 您可以在重新安裝 Windows 10 頁面找到如何執行此動作的指示。

如果看到此錯誤:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/home/artur/.ssh/private-key.pem' are too open.

若要修正此問題,請將下列內容附加至 /etc/wsl.conf 檔案:

[automount]
enabled = true
options = metadata,uid=1000,gid=1000,umask=0022

請注意,新增此命令將包含中繼資料,以及修改 WSL 中所見 Windows 檔案的檔案權限。 如需詳細資訊,請參閱檔案系統權限

在發行版本內執行 Windows 命令失敗

Microsoft Store 中提供的某些發行版本尚未完全相容,無法完全相容于現用執行 Windows 命令。 如果您在執行 powershell.exe /c start . 或任何其他 Windows 命令時收到錯誤 -bash: powershell.exe: command not found,您可以遵循下列步驟來解決此問題:

  1. 在您的 WSL 發行版本中執行 echo $PATH
    如果不包含:/mnt/c/Windows/system32,則會重新定義標準 PATH 變數。
  2. 使用 cat /etc/profile 檢查設定檔設定。
    如果其包含 PATH 變數的指派,請編輯檔案以使用 # 字元將 PATH 指派區塊註解排除。
  3. 檢查 wsl.conf 是否存在於 cat /etc/wsl.conf 並確定其不包含 appendWindowsPath=false,否則將其註解排除。
  4. 輸入 wsl -t 後面接著發行版本名稱,或在 cmd 或 PowerShell 中執行 wsl --shutdown,以重新啟動發行版本。

無法在安裝 WSL 2 之後開機

我們注意到一個會影響使用者的問題,那就是使用者在安裝 WSL 2 之後無法開機。 當我們完整地診斷這些問題時,使用者已回報變更緩衝區大小安裝正確的驅動程式 有助於解決此問題。 請檢視此 GitHub 問題 ,以查看此問題的最新更新。

停用 ICS 時發生 WSL 2 錯誤

網際網路連線共用 (ICS) 是 WSL 2 的必要元件。 主機網路服務 (HNS) 會使用 ICS 服務來建立 WSL 2 依賴的 NAT、DNS、DHCP 和主機連線共用的基礎虛擬網路。

停用 ICS 服務 (SharedAccess) 或透過群組原則停用 ICS 將會防止建立 WSL HNS 網路。 這會導致建立新的 WSL 第 2 版映射時失敗,而嘗試將第 1 版映射轉換成第 2 版時發生下列錯誤。

There are no more endpoints available from the endpoint mapper.

需要 WSL 2 的系統應該讓 ICS 服務 (SharedAccess) 處於預設啟動狀態、手動 (觸發程式啟動) ,以及應覆寫或移除任何停用 ICS 的原則。 雖然停用 ICS 服務將會中斷 WSL 2,但不建議停用 ICS,但可以使用這些指示停用部分 ICS

使用舊版 Windows 和 WSL

如果您執行舊版的 Windows 和 WSL,例如 Windows 10 Creators Update (2017 年 10 月、組建 16299) 或年度更新版 (2016 年 8 月組建 14393) ,有幾個差異。 我們建議您 更新為最新的 Windows 版本,但如果不可能,我們概述下列一些差異。

互通性命令差異:

  • bash.exe 已取代為 wsl.exe。 Linux 命令可以從 Windows 命令提示字元或 PowerShell 執行,但針對舊版 Windows,您可能需要使用 bash 命令。 例如:C:\temp> bash -c "ls -la"。 傳入 bash -c 的 WSL 命令會轉送至 WSL 程序,而不會進行修改。 檔案路徑必須以 WSL 格式指定,逸出相關字元時必須小心謹慎。 例如:C:\temp> bash -c "ls -la /proc/cpuinfo"C:\temp> bash -c "ls -la \"/mnt/c/Program Files\""
  • 若要查看哪些命令可用於特定的散發套件,請執行 [distro.exe] /?。 例如,使用 Ubuntu: C:\> ubuntu.exe /?
  • Windows 路徑包含在 WSL $PATH 中。
  • 從舊版 Windows 10 中的 WSL 發行版本呼叫 Windows 工具時,您將需要指定目錄路徑。 例如,若要從 WSL 命令列呼叫 Windows 記事本應用程式,請輸入: /mnt/c/Windows/System32/notepad.exe
  • 若要變更預設使用者以 root 在 PowerShell 中使用此命令: C:\> lxrun /setdefaultuser root ,然後執行 Bash.exe 以登入: C:\> bash.exe 。 使用散發套件密碼命令重設密碼: $ passwd username ,然後關閉 Linux 命令列: $ exit 。 從 Windows 命令提示字元或 Powershell,將預設使用者重設為一般的 Linux 使用者帳戶: C:\> lxrun.exe /setdefaultuser username

卸載舊版 WSL

如果您在 Creators update (2017 年 10 月 16299 年 10 月組建 16299) 之前的 Windows 10 版本上安裝 WSL,建議您將任何必要的檔案、資料等從您安裝的舊版 Linux 發行版本移轉至透過 Microsoft Store 安裝的較新發行版本。 若要從您的電腦移除舊版散發套件,請從命令列或 PowerShell 實例執行下列命令: wsl --unregister Legacy 。 您也可以選擇使用 Windows 檔案總管 或 PowerShell,藉由刪除 %localappdata%\lxss\ 資料夾 (,以及所有子內容) 來手動移除舊版散發套件: rm -Recurse $env:localappdata/lxss/