Udostępnij przez


Rozwiązywanie problemów z podsystemem Windows dla systemu Linux

Omówiliśmy kilka typowych scenariuszy rozwiązywania problemów skojarzonych z usługą WSL poniżej, ale rozważ przeszukanie problemów złożonych w repozytorium produktu WSL w witrynie GitHub.

Zgłoś problem, raport o błędach, żądanie funkcji

Możliwości repozytorium produktów WSL umożliwiają:

  • Wyszukaj istniejące problemy, aby sprawdzić, czy jakieś są związane z problemem, który masz.

    Pamiętaj, że na pasku wyszukiwania możesz usunąć element "state:open", aby uwzględnić problemy, które zostały już rozwiązane w wyszukiwaniu.

    Rozważ skomentowanie lub polubienie otwartych kwestii, którymi chciałbyś wyrazić zainteresowanie, aby potraktować je priorytetowo.

  • Utwórz nowy problem. Jeśli wystąpił problem z usługą WSL i nie ma istniejącego problemu, możesz wybrać zielony przycisk "New issue", a następnie wybrać pozycję "WSL - Bug Report".

    Musisz podać następujące informacje:

    • Tytuł problemu
    • Wersja systemu Windows: uruchom polecenie cmd.exe /c ver , aby uzyskać kompilację systemu Windows, na której jesteś.
    • Wersja WSL: Jeśli korzystasz z podsystemu Windows dla systemu Linux ze sklepu Microsoft Store, uruchom polecenie wsl.exe -v.
    • Czy używasz programu WSL 1 lub WSL 2: Poinformuj nas, czy problem dotyczy programu WSL 2 i/lub WSL 1. Możesz powiedzieć, uruchamiając polecenie wsl.exe -l -v.
    • Wersja jądra: poinformuj nas, jakiej wersji używanego jądra systemu Linux lub jeśli używasz niestandardowego jądra. Możesz uruchomić wsl.exe --status polecenie , jeśli to polecenie jest dostępne dla Ciebie lub uruchamiając cat /proc/version polecenie w dystrybucji.
    • Wersja dystrybucji: poinformuj nas, jakiego dystrybucji używasz (jeśli ma to zastosowanie). Dodatkowe informacje na temat wersji można uzyskać tam, gdzie to możliwe, np. w systemie Debian/Ubuntu, run lsb_release -r.
    • Inne oprogramowanie: Jeśli zgłaszasz usterkę dotyczącą interakcji programu WSL z innymi aplikacjami, poinformuj nas. Jakie aplikacje? Jakie wersje?
    • Kroki odtwarzania: wyświetl listę kroków, aby odtworzyć usterkę.
    • Oczekiwane zachowanie: Czego spodziewano się zobaczyć? Dołącz wszelkie odpowiednie przykłady lub linki do dokumentacji.
    • Rzeczywiste zachowanie: Co się stało zamiast tego?
    • Dzienniki diagnostyczne: w razie potrzeby podaj dodatkową diagnostykę. Zapoznaj się ze wskazówkami dotyczącymi zbierania dzienników centrum opinii, dzienników sieci i nie tylko.

    Aby uzyskać więcej informacji, zobacz , jak współpracować przyw ramach WSL.

  • Utwórz żądanie funkcji , wybierając zielony przycisk "New issue", a następnie wybierz pozycję "Feature request".

    Musisz zadać kilka pytań opisujących twoje żądanie.

Możesz również:

  • Zgłoś problem z dokumentacją przy użyciu repozytorium dokumentacji WSL. Aby współtworzyć dokumentację WSL, zobacz przewodnik współautora Microsoft Docs .
  • Zgłoś problem z Windows Terminal, używając repozytorium produktu Windows Terminal, jeśli problem jest związany z Windows Terminal, Konsolą Windows lub Interfejsem linii poleceń.

Problemy z instalacją

  • Instalacja nie powiodła się z powodu błędu 0x80070003

    • Podsystem Windows dla systemu Linux działa tylko na dysku systemowym (zazwyczaj jest to dysk C:). Upewnij się, że dystrybucje są przechowywane na dysku systemowym:
    • W systemie Windows 10 otwórz Ustawienia —>System —>Magazyn —>Więcej ustawień magazynu: Zmień miejsce zapisywania nowej zawartościObraz ustawień systemowych, aby zainstalować aplikacje na dysku C: (Windows 10)
    • W systemie Windows 11 otwórz Ustawienia —>System —>Pamięć —>Zaawansowane ustawienia pamięci —>Miejsce zapisywania nowej zawartościObraz ustawień systemowych do instalacji aplikacji na dysku C: (Windows 11)
  • WslRegisterDistribution nie powiodło się z powodu błędu 0x8007019e

    • Opcjonalny składnik podsystemu Windows dla systemu Linux nie jest włączony:
    • Otwórz panel sterowania —>programy i funkcje —>włącz lub wyłącz funkcję systemu Windows —> sprawdź podsystem Windows dla systemu Linux lub użyj polecenia cmdlet programu PowerShell wymienionego w kroku 1.
  • Instalacja nie powiodła się z powodu błędu 0x80070003 lub błędu 0x80370102

    • Upewnij się, że wirtualizacja jest włączona w systemie BIOS komputera. Instrukcje dotyczące tego, jak to zrobić, różnią się w zależności od komputera do komputera i najprawdopodobniej będą dostępne w obszarze opcji związanych z procesorem CPU.
    • WSL2 wymaga, aby procesor obsługiwał funkcję translacji adresów drugiego poziomu (SLAT), która została wprowadzona w procesorach Intel Nehalem (Intel Core 1. generacji) i AMD Opteron. Starsze procesory CPU (takie jak Intel Core 2 Duo) nie będą mogły uruchomić programu WSL2, nawet jeśli platforma maszyny wirtualnej została pomyślnie zainstalowana.
  • Błąd podczas próby uaktualnienia, nieprawidłowa opcja wiersza polecenia: wsl --set-version Ubuntu 2

    • Upewnij się, że masz włączony podsystem Windows dla systemu Linux i że używasz kompilacji systemu Windows w wersji 18362 lub nowszej. Aby włączyć program WSL, uruchom to polecenie w wierszu polecenia programu PowerShell z uprawnieniami administratora:

      Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
      
  • Nie można ukończyć żądanej operacji z powodu ograniczenia systemu dysków wirtualnych. Pliki wirtualnego dysku twardego muszą być nieskompresowane i niezaszyfrowane i nie mogą być rozrzedzone.

    • Usuń zaznaczenie opcji "Kompresuj zawartość" (a także "Szyfruj zawartość", jeśli jest to zaznaczone), otwierając folder profilu dla dystrybucji systemu Linux. Powinien on znajdować się w folderze w systemie plików systemu Windows w następujący sposób: %LocalAppData%\Packages\CanonicalGroupLimited...
    • W tym profilu dystrybucji systemu Linux powinien znajdować się folder LocalState. Kliknij prawym przyciskiem myszy ten folder, aby wyświetlić menu opcji. Wybierz pozycję Właściwości>zaawansowane , a następnie upewnij się, że pola wyboru "Kompresuj zawartość do zaoszczędzenia miejsca na dysku" i "Szyfruj zawartość w celu zabezpieczenia danych" są niezaznaczone (nie zaznaczono). Jeśli zostanie wyświetlony monit o zastosowanie tego polecenia tylko do bieżącego folderu lub do wszystkich podfolderów i plików, wybierz opcję "tylko ten folder", ponieważ czyścisz tylko flagę kompresowania. Następnie polecenie wsl --set-version powinno działać.

    zrzut ekranu przedstawiający ustawienia właściwości dystrybucji WSL

    Notatka

    W moim przypadku folder LocalState dla mojej dystrybucji Ubuntu 18.04 znajdował się w lokalizacji C:\Users\<my-user-name>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc

    Sprawdź wątek WSL GitHub #4103, gdzie ten problem jest śledzony, aby uzyskać zaktualizowane informacje.

  • Termin "wsl" nie jest rozpoznawany jako nazwa polecenia cmdlet, funkcji, pliku skryptu lub programu operowalnego.

    • Upewnij się, że opcjonalny składnik systemu Windows dla systemu Linux jest zainstalowany. Ponadto jeśli używasz urządzenia ARM64 i uruchamiasz to polecenie z poziomu programu PowerShell, zostanie wyświetlony ten błąd. Zamiast tego uruchom wsl.exe z PowerShell Core lub wiersza polecenia.
  • błąd : Podsystem Windows dla systemu Linux nie ma zainstalowanych dystrybucji.

    • Jeśli wystąpi ten błąd po zainstalowaniu już dystrybucji WSL:
    1. Uruchom dystrybucję co najmniej raz przed wywołaniem jej z polecenia.
    2. Sprawdź, czy możesz uruchamiać oddzielne konta użytkowników. Uruchomienie konta użytkownika podstawowego z podwyższonym poziomem uprawnień (w trybie administratora) nie powinno spowodować tego błędu, ale upewnij się, że nie uruchamiasz przypadkowo wbudowanego konta administratora dołączonego do systemu Windows. Jest to oddzielne konto użytkownika i nie będzie wyświetlać żadnych zainstalowanych dystrybucji WSL zgodnie z projektem. Aby uzyskać więcej informacji, zobacz Włączanie i wyłączanie wbudowanego konta administratora.
    3. Plik wykonywalny WSL jest instalowany tylko w natywnym katalogu systemowym. W przypadku uruchamiania 32-bitowego procesu w 64-bitowym systemie Windows (lub na ARM64, w jakiejkolwiek nienatywnej kombinacji), obsługiwany proces nienatywny rzeczywiście widzi inny folder System32. (Ten proces 32-bitowy widzi na x64 Windows jest przechowywany na dysku w %SystemRoot%\SysWOW64). Dostęp do systemu natywnego32 można uzyskać z poziomu hostowanego procesu, wyszukując w folderze wirtualnym: \Windows\sysnative. Nie będzie on obecny na dysku, pamiętaj, ale narzędzie rozpoznawania ścieżek systemu plików znajdzie go.
  • Błąd: ta aktualizacja dotyczy tylko maszyn z podsystemem Windows dla systemu Linux.

    • Aby zainstalować pakiet MSI aktualizacji jądra systemu Linux, wymagany jest system WSL i powinien być włączony jako pierwszy. Jeśli zakończy się to niepowodzeniem, zostanie wyświetlony komunikat: Ta aktualizacja dotyczy tylko maszyn z podsystemem Windows dla systemu Linux.
    • Istnieje trzy możliwe przyczyny wyświetlenia tego komunikatu:
    1. Nadal korzystasz ze starej wersji systemu Windows, która nie obsługuje programu WSL 2. Zobacz Krok 2. Sprawdzanie wymagań dotyczących uruchamiania programu WSL 2.

    2. Nie włączono protokołu WSL. Musisz powrócić do kroku 1 i upewnić się, że opcjonalna funkcja WSL jest włączona na maszynie.

    3. Po włączeniu funkcji WSL wymagany jest ponowny rozruch, aby zaczęły obowiązywać, ponownie uruchom maszynę i spróbuj ponownie.

  • Błąd: Program WSL 2 wymaga aktualizacji składnika jądra. Aby uzyskać informacje, odwiedź krok 4

    • Jeśli w folderze %SystemRoot%\system32\lxss\tools brakuje pakietu jądra systemu Linux, wystąpi ten błąd. Rozwiąż ten problem, instalując pakiet MSI aktualizacji jądra systemu Linux w kroku 4 tych instrukcji instalacji. Może być konieczne odinstalowanie tożsamości usługi zarządzanej z obszaru "Dodawanie lub usuwanie programów" i ponowne zainstalowanie go.

Typowe problemy

Jestem w systemie Windows 10 w wersji 1903 i nadal nie widzę opcji dla WSL 2

Jest to prawdopodobne, ponieważ maszyna jeszcze nie otrzymała backportu dla systemu WSL 2. Najprostszym sposobem rozwiązania tego problemu jest przejście do pozycji Ustawienia systemu Windows i kliknięcie przycisku "Sprawdź aktualizacje", aby zainstalować najnowsze aktualizacje w systemie. Zobacz pełne instrukcje dotyczące przyjmowaniabackportu.

Jeśli zostanie wyświetlony komunikat "Sprawdź aktualizacje" i nadal nie otrzymasz aktualizacji, możesz zainstalować bazę wiedzy KB4566116 ręcznie.

Błąd: 0x1bc, gdy wsl --set-default-version 2

Może się tak zdarzyć, gdy ustawienie "Język wyświetlania" lub "Ustawienia regionalne systemu" nie jest angielskie.

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

Rzeczywisty błąd: 0x1bc WSL 2 wymaga aktualizacji składnika jądra. Aby uzyskać informacje, odwiedź stronę https://aka.ms/wsl2kernel

Aby uzyskać więcej informacji, zobacz problem #5749

Nie można uzyskać dostępu do plików WSL z systemu Windows

Serwer plików protokołu 9p zapewnia usługę po stronie systemu Linux, aby umożliwić systemowi Windows dostęp do systemu plików Linux. Jeśli nie możesz uzyskać dostępu do protokołu WSL przy użyciu \\wsl$ w systemie Windows, może to być spowodowane tym, że 9P nie zostało uruchomione poprawnie.

Aby to sprawdzić, możesz przejrzeć dzienniki uruchamiania, używając polecenia: dmesg | grep 9p, co pokaże wszelkie błędy. Pomyślne dane wyjściowe wyglądają następująco:

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

Aby uzyskać dalszą dyskusję na temat tego problemu, zobacz problem nr 5307 .

Nie można uruchomić dystrybucji WSL 2 i zobaczyć tylko "WSL 2" w danych wyjściowych

Jeśli język wyświetlania nie jest angielski, jest możliwe, że widzisz obciętą wersję tekstu błędu.

PS C:\> wsl.exe
WSL 2

Aby rozwiązać ten problem, zobacz krok 4 i zainstaluj jądro ręcznie, postępując zgodnie z instrukcjami na tej stronie dokumentu.

command not found podczas wykonywania .exe systemu Windows w systemie Linux

Użytkownicy mogą uruchamiać pliki wykonywalne systemu Windows, takie jak notepad.exe bezpośrednio z systemu Linux. Czasami może wystąpić komunikat "Nie znaleziono polecenia", jak pokazano poniżej:

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

Jeśli w $PATH nie ma ścieżek Win32, interop nie będzie w stanie znaleźć .exe. Możesz to sprawdzić, uruchamiając echo $PATH w systemie Linux. Oczekiwana jest ścieżka Win32 (na przykład /mnt/c/Windows) w danych wyjściowych. Jeśli nie widzisz żadnych ścieżek systemu Windows, najprawdopodobniej Twoja zmienna środowiskowa PATH jest zastępowana przez powłokę systemu Linux.

Oto przykład, który /etc/profile w debianie przyczynił się do problemu:

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

Prawidłowym sposobem w systemie Debian jest usunięcie powyższych wierszy. Możesz również dołączyć $PATH podczas przypisywania, jak pokazano poniżej, ale może to prowadzić do niektórych innych problemów z WSL i 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

Aby uzyskać więcej informacji, zobacz problem #5296 i problem #5779.

"Błąd: 0x80370102 Nie można uruchomić maszyny wirtualnej, ponieważ nie zainstalowano wymaganej funkcji".

Włącz funkcję systemu Windows platformy maszyny wirtualnej i upewnij się, że wirtualizacja jest włączona w systemie BIOS.

  1. Sprawdź wymagania systemowe Hyper-V

  2. Jeśli maszyna jest maszyną wirtualną, włącz zagnieżdżonych wirtualizacji ręcznie. Uruchom program PowerShell z administratorem i uruchom następujące polecenie, zastępując <VMName> nazwą maszyny wirtualnej w systemie hosta (nazwę można znaleźć w menedżerze Hyper-V):

    Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
    
  3. Postępuj zgodnie z wytycznymi producenta komputera, aby dowiedzieć się, jak włączyć wirtualizację. Ogólnie rzecz biorąc, może to obejmować korzystanie z systemu BIOS w celu zapewnienia, że te funkcje są włączone na procesorze CPU. Instrukcje dotyczące tego procesu mogą się różnić od maszyny do maszyny. Zobacz Włączanie wirtualizacji w systemie Windows.

  4. Uruchom ponownie maszynę po włączeniu opcjonalnego składnikaPlatforma maszyny wirtualnej.

  5. Upewnij się, że uruchomienie funkcji hypervisor jest włączone w konfiguracji rozruchu. Możesz to sprawdzić, uruchamiając program PowerShell z podwyższonym poziomem uprawnień:

    bcdedit /enum | findstr -i hypervisorlaunchtype
    

    Jeśli widzisz hypervisorlaunchtype Off, funkcja hypervisor jest wyłączona. Aby włączyć uruchamianie w programie PowerShell z podwyższonym poziomem uprawnień:

    bcdedit /set hypervisorlaunchtype Auto
    
  6. Ponadto jeśli masz zainstalowane funkcje hypervisor innych firm (takie jak VMware lub VirtualBox), upewnij się, że masz je w najnowszych wersjach, które mogą obsługiwać funkcję HyperV (VMware 15.5.5+ i VirtualBox 6+) lub są wyłączone.

  7. Jeśli ten błąd występuje na maszynie wirtualnej platformy Azure, upewnij się, że Zaufany start jest wyłączony. wirtualizacja zagnieżdżona nie jest obsługiwana na maszynach wirtualnych platformy Azure z zaufanym uruchamianiem.

Dowiedz się więcej o sposobie konfigurowania zagnieżdżonych wirtualizacji podczas uruchamiania Hyper-V na maszynie wirtualnej.

WSL nie ma połączenia sieciowego na mojej maszynie roboczej lub w środowisku przedsiębiorstwa

Środowiska biznesowe lub enterprise mogą mieć skonfigurowane ustawienia zapory Windows Defender skonfigurowane w celu blokowania nieautoryzowanego ruchu sieciowego. Jeśli łączenie reguł lokalnych jest ustawione na wartość "Nie", sieć WSL nie będzie działać domyślnie, a administrator będzie musiał dodać regułę zapory, aby ją umożliwić.

Możesz potwierdzić ustawienie scalania reguł lokalnych, wykonując następujące kroki:

zrzut ekranu ustawień zapory systemu Windows

  1. Otwórz "Zapora Windows Defender z zaawansowanymi zabezpieczeniami" (jest to inne niż "Zapora Windows Defender" w Panelu sterowania)
  2. Kliknij prawym przyciskiem myszy kartę "Zapora Windows Defender z zaawansowanymi zabezpieczeniami na komputerze lokalnym"
  3. Wybierz pozycję "Właściwości"
  4. Wybierz kartę "Profil publiczny" w nowym oknie, które zostanie otwarte
  5. Wybierz pozycję "Dostosuj" w sekcji "Ustawienia"
  6. Sprawdź w oknie "Dostosowywanie ustawień profilu publicznego", które zostanie otwarte, czy ustawienie "Scalanie reguł" ma wartość "Nie". Spowoduje to zablokowanie dostępu do programu WSL.

Instrukcje dotyczące zmiany tego ustawienia zapory można znaleźć w Konfigurowanie zapory Hyper-V.

Protokół WSL nie ma połączenia sieciowego podczas wyłączania protokołu IPv6

Jeśli protokół IPv6 jest wyłączony przy użyciu wartości HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters (REG_DWORD) DisabledComponentsrejestru, łączność sieciowa WSL może zakończyć się niepowodzeniem. Zobacz Wskazówki dotyczące konfigurowania protokołu IPv6 w systemie Windows dla użytkowników zaawansowanych.

Jeśli protokół IPv6 musi być wyłączony w systemie hosta, zalecamy użycie programu PowerShell w tym celu przez bezpośrednie usunięcie powiązań protokołu IPv6. Na przykład: Disable-NetAdapterBinding -Name "<MyAdapter>" -ComponentID ms_tcpip[6].

WSL nie ma łączności sieciowej po nawiązaniu połączenia z siecią VPN

Jeśli po nawiązaniu połączenia z siecią VPN w systemie Windows powłoka bash utraci łączność sieciową, spróbuj obejść ten problem z poziomu powłoki bash. To rozwiązanie pozwoli ręcznie przesłonić rozpoznawanie nazw DNS za pomocą /etc/resolv.conf.

  1. Zanotuj serwer DNS sieci VPN, wykonując następujące czynności:

    ipconfig.exe /all
    
  2. Utwórz kopię istniejącego resolv.confelementu :

    sudo cp /etc/resolv.conf /etc/resolv.conf.bak
    
  3. Odłącz bieżący resolv.confelement :

    sudo unlink /etc/resolv.conf
    
  4. Biegnij:

    sudo mv /etc/resolv.conf.bak /etc/resolv.conf
    
  5. Edytuj /etc/wsl.conf i dodaj tę zawartość do pliku. (Więcej informacji na temat tej konfiguracji można znaleźć w Konfiguracja ustawień zaawansowanych)

    [network]
    generateResolvConf=false
    
  6. Otwórz /etc/resolv.conf i

    1. Usuń pierwszy wiersz z pliku, który zawiera komentarz opisujący automatyczne generowanie.
    2. Dodaj wpis DNS z (1) powyżej jako pierwszy wpis na liście serwerów DNS.
    3. Zamknij plik.

Po rozłączeniu sieci VPN konieczne będzie przywrócenie zmian w /etc/resolv.conf. W tym celu wykonaj następujące czynności:

sudo mv /etc/resolv.conf /etc/resolv.conf.bak
sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

Globalne problemy z klientem bezpiecznego dostępu z usługą WSL

Globalny klient bezpiecznego dostępu (/entra/global-secure-access/how-to-install-windows-client) może mieć wpływ na łączność WSL, ponieważ ma funkcję zwracania adresu tymczasowego podczas rozpoznawania nazwy. Następnie adres jest zamieniany na rzeczywisty adres po nawiązaniu połączenia sieciowego. Może to spowodować przerwanie działania protokołu WSL, ponieważ ruch WSL jest przekazywany poniżej większości punktów zaczepienia klienta GSA.

Zalecamy wyłączenie tunelowania DNS (dnsTunneling=false) lub wyłączenie trybu dublowanego (networkingMode=nat).

Problemy z siecią VPN Cisco Anyconnect w WSL w trybie NAT

VPN Cisco AnyConnect modyfikuje trasy w sposób uniemożliwiający działanie NAT. Istnieje obejście specyficzne dla programu WSL 2: Zobacz Cisco AnyConnect Secure Mobility Client Administrator Guide( Wersja 4.10 — Rozwiązywanie problemów z programem AnyConnect).

Problemy z łącznością WSL z sieciami VPN w przypadku włączenia trybu sieci lustrzanej.

Obecnie tryb sieci lustrzanej jest ustawieniem eksperymentalnym w konfiguracji WSL. Tradycyjna architektura sieci NAT WSL może zostać zaktualizowana do całkowicie nowego trybu sieciowego o nazwie "Tryb sieci dublowany". Gdy eksperymentalna networkingMode jest ustawiona na mirrored, interfejsy sieciowe, które masz w systemie Windows, są odzwierciedlane w systemie Linux w celu zwiększenia zgodności. Dowiedz się więcej na blogu wiersza polecenia: aktualizacji programu WSL z września 2023 r..

Niektóre sieci VPN zostały przetestowane i potwierdzone, że są niezgodne z usługą WSL, w tym:

  • "Bitdefender" w wersji 26.0.2.1
  • "OpenVPN" w wersji 2.6.501
  • "Mcafee Safe Connect" w wersji 2.16.1.124

Uwagi dotyczące używania autoProxy do mirroringu HttpProxy w WSL

Dublowanie serwera proxy HTTP/S można skonfigurować przy użyciu ustawienia autoProxy w sekcji eksperymentalnej pliku konfiguracji WSL. Podczas stosowania tego ustawienia należy pamiętać o następujących zagadnieniach:

  • Serwer proxy PAC: program WSL skonfiguruje ustawienie w systemie Linux przez ustawienie zmiennej środowiskowej WSL_PAC_URL . System Linux domyślnie nie obsługuje serwerów proxy PAC.
  • Interakcje z WSLENV: zmienne środowiskowe zdefiniowane przez użytkownika mają pierwszeństwo przed tymi określonymi przez tę funkcję.

Po włączeniu następujące ustawienia mają zastosowanie do ustawień serwera proxy w dystrybucjach systemu Linux:

  • Zmienna środowiskowa systemu Linux, HTTP_PROXY, jest ustawiona na jeden lub więcej serwerów proxy HTTP znalezionych w konfiguracji serwera proxy HTTP systemu Windows.
  • Zmienna środowiskowa HTTPS_PROXYsystemu Linux , jest ustawiona na co najmniej jeden serwer proxy HTTPS zainstalowany w konfiguracji serwera proxy HTTPS systemu Windows.
  • Zmienna środowiskowa systemu Linux, NO_PROXY, jest ustawiona na obchodzenie serwerów proxy HTTP/S odnalezionych w ustawieniach konfiguracyjnych systemu Windows.
  • Każda zmienna środowiskowa, z wyjątkiem WSL_PAC_URL, jest ustawiana zarówno na małe, jak i wielkie litery. Na przykład: HTTP_PROXY i http_proxy.

Istnieje znany problem spowodowany przez konfiguracje rozwiązania ZScaler, w którym narzędzie ZScaler wielokrotnie włącza i wyłącza konfiguracje serwera proxy systemu Windows, co prowadzi do wielokrotnego wyświetlania powiadomienia "Na hoście wykryto zmianę serwera proxy HTTP".

Dowiedz się więcej na blogu wiersza polecenia: aktualizacji programu WSL z września 2023 r..

Zagadnienia dotyczące sieci z tunelowaniem DNS

Jeśli program WSL nie może nawiązać połączenia z Internetem, może to być spowodowane zablokowaniem wywołania DNS hosta systemu Windows. Dzieje się tak, ponieważ pakiet sieciowy dla systemu DNS wysyłany przez maszynę wirtualną WSL do hosta systemu Windows jest blokowany przez istniejącą konfigurację sieci. Tunelowanie DNS rozwiązuje ten problem przy użyciu funkcji wirtualizacji do bezpośredniej komunikacji z systemem Windows, umożliwiając rozpoznawanie nazwy DNS bez wysyłania pakietu sieciowego. Ta funkcja powinna poprawić zgodność sieci i zapewnić lepszą łączność z Internetem, nawet jeśli masz sieć VPN, konkretną konfigurację zapory lub inne konfiguracje sieci.

Tunelowanie DNS można skonfigurować przy użyciu ustawienia dnsTunneling w sekcji eksperymentalnej pliku konfiguracji WSL. Podczas stosowania tego ustawienia należy pamiętać o następujących zagadnieniach:

  • Jeśli używasz sieci VPN z protokołem WSL, włącz tunelowanie DNS. Wiele sieci VPN używa zasad NRPT, które są stosowane tylko do zapytań DNS WSL po włączeniu tunelowania DNS.
  • Plik /etc/resolv.conf w dystrybucji systemu Linux ma maksymalne ograniczenie do 3 serwerów DNS, podczas gdy system Windows może używać więcej niż 3 serwery DNS. Użycie tunelowania DNS powoduje usunięcie tego ograniczenia — wszystkie serwery DNS systemu Windows mogą być teraz używane przez system Linux.
  • WSL będzie używać sufiksów DNS systemu Windows w następującej kolejności (podobnie jak kolejność używana przez klienta DNS systemu Windows):
    1. Globalne sufiksy DNS
    2. Dodatkowe sufiksy DNS
    3. Sufiksy DNS dla interfejsu
    4. Jeśli szyfrowanie DNS (DoH, DoT) jest włączone w systemie Windows, szyfrowanie zostanie zastosowane do zapytań DNS z programu WSL. Jeśli użytkownicy chcą włączyć aplikację DoH, DoT w systemie Linux, muszą wyłączyć tunelowanie DNS.
  • Zapytania DNS z kontenerów platformy Docker zarządzanych przez program Docker Desktop spowodują obejście tunelowania DNS. Program Docker Desktop ma własny sposób (różni się od tunelowania DNS) stosowania ustawień i zasad DNS hosta do zapytań DNS z kontenerów platformy Docker.
  • Aby tunelowanie DNS było pomyślnie włączone, opcja generateResolvConf w pliku wsl.conf nie powinna być wyłączona.
  • Po włączeniu generateHosts tunelowania DNS opcja w pliku wsl.conf jest ignorowana (plik hostów DNS systemu Windows nie jest kopiowany w pliku Linux /etc/hosts). Zasady w pliku hostów systemu Windows zostaną zastosowane do zapytań DNS z systemu Linux bez konieczności kopiowania pliku w systemie Linux.

Dowiedz się więcej na blogu wiersza polecenia: aktualizacji programu WSL z września 2023 r..

Problemy z kierowaniem ruchem przychodzącym odbieranym przez hosta systemu Windows do maszyny wirtualnej WSL

W przypadku korzystania z trybu sieci Mirrored (eksperymentalna networkingMode ustawiona na mirrored) pewien ruch przychodzący odbierany przez hosta systemu Windows nigdy nie będzie kierowany do maszyny wirtualnej z systemem Linux. Ten ruch jest następujący:

  • Port UDP 68 (DHCP)
  • Port TCP 135 (rozpoznawanie punktu końcowego DCE)
  • Port TCP 1900 (UPnP)
  • Port TCP 2869 (SSDP)
  • Port TCP 5004 (RTP)
  • Port TCP 3702 (WSD)
  • Port TCP 5357 (WSD)
  • Port TCP 5358 (WSD)

Program WSL automatycznie skonfiguruje niektóre ustawienia sieci systemu Linux w przypadku korzystania z trybu dublowanego sieci. Wszystkie konfiguracje tych ustawień użytkownika podczas korzystania z trybu dublowanego sieci nie są obsługiwane. Oto lista ustawień, które zostaną skonfigurowane przez usługę WSL:

Nazwa ustawienia Wartość
https://sysctl-explorer.net/net/ipv4/accept_local/ Włączone (1)
https://sysctl-explorer.net/net/ipv4/route_localnet/ Włączone (1)
https://sysctl-explorer.net/net/ipv4/rp_filter/ Wyłączone (0)
https://sysctl-explorer.net/net/ipv6/accept_ra/ Wyłączone (0)
https://sysctl-explorer.net/net/ipv6/autoconf/ Wyłączone (0)
https://sysctl-explorer.net/net/ipv6/use_tempaddr/ Wyłączone (0)
tryb_generacji_adresu Wyłączone (0)
wyłącz_ipv6 Wyłączone (0)
https://sysctl-explorer.net/net/ipv4/arp_filter/ Włączone (1)

Problemy z kontenerem platformy Docker w systemie WSL2 z włączonym trybem sieci dublowanym podczas uruchamiania w domyślnej przestrzeni nazw sieci

Istnieje znany problem polegający na tym, że nie można utworzyć kontenerów programu Docker Desktop z opublikowanymi portami (docker run –publish/–p). Zespół WSL współpracuje z zespołem aplikacji Docker Desktop, aby rozwiązać ten problem. Aby obejść ten problem, użyj przestrzeni nazw sieci hosta w kontenerze platformy Docker. Ustaw typ sieci za pomocą --network host opcji użytej w poleceniu docker run . Alternatywnym rozwiązaniem jest wymienienie opublikowanego numeru portu w ustawieniu ignoredPorts sekcji eksperymentalnej w pliku konfiguracyjnym WSL.

Problemy z kontenerem platformy Docker, gdy jest uruchomiony menedżer sieci

Istnieje znany problem z kontenerami platformy Docker, które mają uruchomioną usługę Menedżer sieci. Objawy obejmują niepowodzenia podczas prób nawiązywania połączeń zwrotnych z hostem. Zaleca się zatrzymanie usługi Network Manager, aby prawidłowo skonfigurować sieć WSL.

sudo systemctl disable network-manager.service

Rozwiązywanie nazw .local w WSL

Aby przekształcać nazwy hostów na adresy IP w sieci lokalnej bez potrzeby korzystania z konwencjonalnego serwera DNS, często używane są nazwy zakończone na .local. Jest to osiągane za pośrednictwem protokołu mDNS (Multicast DNS), który opiera się na ruchu multiemisji do swojego działania.

networkingMode ustaw wartość na NAT:

Obecnie ta funkcja nie jest obsługiwana w przypadku włączenia tunelowania DNS. Aby włączyć rozpoznawanie nazw lokalnych, zalecamy następujące rozwiązania:

  • Wyłącz tunelowanie DNS.
  • Użyj trybu sieci dublowanej.

networkingMode ustaw wartość na Mirrored:

Uwaga: aby móc korzystać z poniższych funkcji, musisz korzystać z kompilacji WSL w wersji 2.3.17 lub nowszej.

Ponieważ tryb dublowany obsługuje ruch multicastowy, protokół mDNS (Multicast DNS) może służyć do rozpoznawania nazw .local. System Linux musi być skonfigurowany do obsługi sieci mDNS, ponieważ nie jest to domyślnie obsługiwane. Jednym ze sposobów jej skonfigurowania jest użycie następujących dwóch kroków:

  1. Instalowanie pakietu libnss-mdns

    sudo apt-get install libnss-mdns
    

    *Pakiet libnss-mdns jest wtyczką funkcji przełącznika usługi nazw GNU (NSS) biblioteki GNU C Library (glibc), która zapewnia rozpoznawanie nazw hostów za pośrednictwem multiemisji DNS (mDNS). Ten pakiet skutecznie umożliwia typowym programom z systemami Unix/Linux rozpoznawanie nazw w domenie mDNS ad hoc .local.

  2. Skonfiguruj plik, /etc/nsswitch.conf aby włączyć mdns_minimal ustawienie w hosts sekcji . Przykładowa zawartość pliku:

    />cat /etc/nsswitch.conf
    # /etc/nsswitch.conf
    #
    # Example configuration of GNU Name Service Switch functionality.
    # If you have the `glibc-doc-reference' and `info' packages installed, try:
    # `info libc "Name Service Switch"' for information about this file.
    
    passwd:         compat systemd
    group:          compat systemd
    shadow:         compat
    gshadow:        files
    
    hosts:          files mdns_minimal [NOTFOUND=return] dns
    networks:       files
    
    protocols:      db files
    services:       db files
    ethers:         db files
    rpc:            db files
    
    netgroup:       nis
    

Sufiksy DNS w programie WSL

W zależności od konfiguracji w pliku .wslconfig, program WSL będzie miał następujące zachowanie w odniesieniu do sufiksów DNS:

Gdy networkingMode jest ustawiona wartość NAT:

Przypadek 1: domyślnie żaden sufiks DNS nie jest skonfigurowany w systemie Linux

Przypadek 2: Jeśli tunelowanie DNS jest włączone (dnsTunneling jest ustawione true na w .wslconfig) Wszystkie sufiksy DNS systemu Windows są skonfigurowane w systemie Linux, w search ustawieniu /etc/resolv.conf

Sufiksy są konfigurowane w /etc/resolv.conf w następującej kolejności, podobnie jak w kolejności, w której klient DNS systemu Windows próbuje sufiksy podczas rozpoznawania nazwy: globalne sufiksy DNS, a następnie uzupełniające sufiksy DNS, a następnie sufiksy DNS dla interfejsu.

W przypadku zmiany sufiksów DNS systemu Windows ta zmiana zostanie automatycznie odzwierciedlona w systemie Linux

Przypadek 3: Jeśli tunelowanie DNS jest wyłączone, a serwer proxy DNS funkcji SharedAccess jest wyłączony (dnsTunneling i dnsProxy jest ustawiony w false pliku wslconfig). Pojedynczy sufiks DNS jest skonfigurowany w systemie Linux, w ustawieniu "domena" /etc/resolv.conf

W przypadku zmiany sufiksów DNS systemu Windows ta zmiana nie jest odzwierciedlana w systemie Linux

Pojedynczy sufiks DNS skonfigurowany w systemie Linux jest wybierany z sufiksów DNS dla interfejsu (sufiksy globalne i uzupełniające są ignorowane)

Jeśli system Windows ma wiele interfejsów, heurystyczny służy do wybierania pojedynczego sufiksu DNS, który zostanie skonfigurowany w systemie Linux. Na przykład jeśli w systemie Windows istnieje interfejs sieci VPN, sufiks jest wybierany z tego interfejsu. Jeśli nie ma interfejsu sieci VPN, sufiks jest wybierany z interfejsu, który najprawdopodobniej daje łączność z Internetem.

Gdy networkingMode jest ustawiona wartość Mirrored:

Wszystkie sufiksy DNS systemu Windows są skonfigurowane w systemie Linux, w search ustawieniu /etc/resolv.conf

Sufiksy są konfigurowane w /etc/resolv.conf w takiej samej kolejności, jak w przypadku 2) z trybu NAT

W przypadku zmiany sufiksów DNS systemu Windows ta zmiana zostanie automatycznie odzwierciedlona w systemie Linux

Notatka

Dodatkowe sufiksy DNS można skonfigurować w systemie Windows przy użyciu.

SetInterfaceDnsSettings, funkcja (netioapi.h), z flagąDNS_SETTING_SUPPLEMENTAL_SEARCH_LIST ustawioną w parametrze Settings.

Rozwiązywanie problemów z systemem DNS w programie WSL

Domyślną konfiguracją DNS, gdy program WSL uruchamia kontener w trybie TRANSLATOR adresów sieciowych, jest posiadanie urządzenia NAT na hoście systemu Windows służyć jako serwer DNS dla kontenera WSL. Gdy zapytania DNS są wysyłane z kontenera WSL do tego urządzenia NAT na hoście systemu Windows, pakiet DNS jest przekazywany z urządzenia NAT do usługi dostępu współdzielonego na hoście; odpowiedź jest wysyłana w odwrotnym kierunku z powrotem do kontenera WSL. Ten proces przekazywania pakietów do dostępu współdzielonego wymaga reguły zapory, aby zezwolić na ten przychodzący pakiet DNS, który jest tworzony przez usługę HNS, gdy usługa WSL początkowo prosi usługę HNS o utworzenie sieci wirtualnej NAT dla kontenera WSL.

Ze względu na ten NAT - projekt dostępu współdzielonego istnieje kilka znanych konfiguracji, które mogą przerwać rozpoznawanie nazw z WSL.

  1. Przedsiębiorstwo może wypychać zasady, które nie zezwalają na reguły zapory zdefiniowane lokalnie, zezwalając tylko na reguły zdefiniowane przez zasady przedsiębiorstwa.

    Po ustawieniu tego ustawienia przez przedsiębiorstwo reguła zapory utworzonej przez usługę HNS jest ignorowana, ponieważ jest to lokalnie zdefiniowana reguła.

    Aby ta konfiguracja działała, należy utworzyć regułę zapory, aby zezwolić portowi UDP 53 na usługę dostępu współdzielonego, lub można ustawić protokół WSL tak, aby korzystał z tunelowania DNS.

    Można sprawdzić, czy skonfigurowano tę opcję, aby nie zezwalać na lokalne reguły zapory zdefiniowane przez użytkownika, uruchamiając następujące polecenie. Należy pamiętać, że spowoduje to wyświetlenie ustawień dla wszystkich 3 profilów: Domena, Prywatna i Publiczna. Jeśli ustawiono go w dowolnym profilu, pakiety zostaną zablokowane, jeśli karta sieciowa VNIC WSL zostanie przypisana do tego profilu (wartość domyślna to Public). Jest to tylko fragment pierwszego profilu Firewall zwracany w PowerShell.

    PS C:\> Get-NetFirewallProfile -PolicyStore ActiveStore
    Name                    : Domain
    Enabled                 : True
    DefaultInboundAction    : Block
    DefaultOutboundAction   : Allow
    AllowInboundRules       : True
    AllowLocalFirewallRules : False
    ...
    

    AllowLocalFirewallRules: False oznacza, że lokalnie zdefiniowane reguły zapory, takie jak HNS, nie będą stosowane ani używane.

  2. Przedsiębiorstwo może wypychać ustawienia zasad grupy i zasad zarządzania urządzeniami przenośnymi, które blokują wszystkie reguły ruchu przychodzącego.

    Te ustawienia zastępują dowolną regułę zapory sieciowej Allow-Inbound. To ustawienie spowoduje zablokowanie reguły zapory UDP utworzonej przez usługę HNS, co uniemożliwi rozpoznawanie nazw przez program WSL.

    Aby ta konfiguracja działała, należy ustawić WSL do używania tunelowania DNS. To ustawienie zawsze zablokuje serwer proxy NAT DNS.

    Z Zasad Grupy:

    Konfiguracja komputera \ Szablony administracyjne \ Sieci \ Połączenia sieciowe \ Zapora Windows Defender \ Profil domeny | Profil standardowy

    "Zapora Windows Defender: nie zezwalaj na wyjątki" — włączone

    Z zasad polityki MDM:

    ./Vendor/MSFT/Firewall/MdmStore/PrivateProfile/Shielded

    ./Vendor/MSFT/Firewall/MdmStore/DomainProfile/Shielded

    ./Vendor/MSFT/Firewall/MdmStore/PublicProfile/Shielded

    Można sprawdzić, czy skonfigurowano tę opcję, aby nie zezwalać na żadne reguły zapory dla ruchu przychodzącego, uruchamiając następujące polecenie (zobacz powyższe zastrzeżenia dotyczące profilów zapory). Jest to tylko fragment pierwszego profilu Firewall zwracany w PowerShell.

    
    PS C:\> Get-NetFirewallProfile -PolicyStore ActiveStore
    Name                  : Domain
    Enabled               : True
    DefaultInboundAction  : Block
    DefaultOutboundAction : Allow
    AllowInboundRules     : False
    ...
    

    AllowInboundRules: False oznacza, że nie zostaną zastosowane żadne reguły zapory dla ruchu przychodzącego.

  3. Użytkownik przechodzi przez aplikacje zabezpieczeń systemu Windows i sprawdza kontrolkę "Blokuje wszystkie połączenia przychodzące, w tym te na liście dozwolonych aplikacji".

    System Windows obsługuje możliwość wyboru przez użytkownika dla tego samego ustawienia, które może zostać zastosowane przez przedsiębiorstwo, o którym mowa w punkcie #2 powyżej. Użytkownicy mogą otworzyć stronę ustawień "Zabezpieczenia systemu Windows", wybiera opcję "Zapora i ochrona sieci", wybiera profil zapory, który chcesz skonfigurować (domena, prywatny lub publiczny), a w obszarze "Połączenia przychodzące" sprawdź kontrolkę "Blokuj wszystkie połączenia przychodzące, w tym te na liście dozwolonych aplikacji".

    Jeśli jest to ustawione dla profilu publicznego (jest to domyślny profil dla karty sieciowej WSL), reguła zapory utworzona przez usługę HNS, która pozwala na pakiety UDP dla dostępu współdzielonego, zostanie zablokowana.

    Musi być to niezaznaczone, aby konfiguracja serwera proxy dla DNS NAT działała w WSL, lub WSL można ustawić, aby używać tunelowania DNS.

  4. Reguła zapory HNS umożliwiająca pakietom DNS dostęp współużytkowany może stać się nieprawidłowa, odwołując się do poprzedniego identyfikatora interfejsu WSL.

    Jest to usterka w usłudze HNS, która została naprawiona w najnowszej wersji systemu Windows 11. W przypadku wcześniejszych wersji, jeśli do tego dojdzie, trudno jest to odkryć, ale istnieje prosty sposób obejścia:

    • Zatrzymaj WSL

      wsl.exe –shutdown
      
    • Usuń starą regułę zapory HNS. To polecenie programu PowerShell powinno działać w większości przypadków:

      Get-NetFirewallRule -Name "HNS*" | Get-NetFirewallPortFilter | where Protocol -eq UDP | where LocalPort -eq 53 | Remove-NetFirewallRule
      
    • Usuń wszystkie punkty końcowe HNS. Uwaga: jeśli usługa HNS jest używana do zarządzania innymi kontenerami, takimi jak MDAG lub Piaskownica systemu Windows, należy je również zatrzymać.

      hnsdiag.exe delete all
      
    • Uruchom ponownie lub zrestartuj usługę HNS

      Restart-Service hns
      
    • Po ponownym uruchomieniu WSL usługa HNS utworzy nowe reguły zapory, poprawnie ukierunkowując interfejs WSL.

Rozwiązywanie problemów z dostępem do sieci w systemie Windows

Jeśli nie masz dostępu do sieci, może to być spowodowane błędną konfiguracją. Sprawdź, czy sterownik FSE jest uruchomiony:

Get-Service FSE

Jeśli to nie powoduje uruchomienia fsE, sprawdź, czy PortTrackerEnabledMode wartość rejestru kończy się pod tym kluczem rejestru:

Get-ItemProperty HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters

Jeśli fsE nie jest uruchomiony lub zainstalowany i PortTrackerEnabledMode istnieje, usuń wartość rejestru i uruchom ponownie

Ręczne usuwanie adapterów phantom

adaptery duchowelub widmowe urządzenia Plug and Play (PnP) to składniki sprzętowe, które pojawiają się w systemie, ale nie są fizycznie podłączone. Te urządzenia "ghost" mogą powodować zamieszanie i bałagan w ustawieniach systemu. Jeśli podczas uruchamiania programu WSL na maszynie wirtualnej są wyświetlane karty duchów, wykonaj następujące czynności ręczne, aby znaleźć i usunąć te urządzenia Phantom PnP. Firma Microsoft pracuje nad zautomatyzowanym rozwiązaniem, które nie będzie wymagało interwencji ręcznej. Więcej informacji będzie wkrótce.

  1. Otwórz Menedżera urządzeń

  2. Wyświetl > Pokaż ukryte urządzenia

    zrzut ekranu Menedżera urządzeń przedstawiający menu ukryte urządzenia

  3. Otwieranie kart sieciowych

    Zrzut ekranu przedstawiający listę kart sieciowych

  4. Kliknij prawym przyciskiem myszy kartę sieciową Ghosted i wybierz pozycję Odinstaluj urządzenie

    Zrzut ekranu pokazujący kliknięcie prawym przyciskiem myszy na fantomowym urządzeniu pnp z listy sieci i wybór opcji

Uruchamianie programu WSL lub instalowanie dystrybucji zwraca kod błędu

Postępuj zgodnie z instrukcjami, aby zebrać logi WSL w repozytorium WSL na GitHubie i zgłosić problem na GitHubie.

Aktualizowanie WSL

Istnieją dwa składniki podsystemu Windows dla systemu Linux, które mogą wymagać aktualizacji.

  1. Aby zaktualizować podsystem Windows dla systemu Linux, użyj następującego polecenia.

    wsl.exe --update
    
  2. Aby zaktualizować określone pliki binarne użytkownika dystrybucji systemu Linux, użyj następującego polecenia w dystrybucji systemu Linux, które chcesz zaktualizować.

    apt-get update | apt-get upgrade
    

Błędy uaktualniania apt-get

Niektóre pakiety korzystają z funkcji, których jeszcze nie zaimplementowaliśmy. udev, na przykład, nie jest jeszcze obsługiwany i powoduje kilka błędów apt-get upgrade.

Aby rozwiązać problemy związane z udev, wykonaj następujące kroki:

  1. Zapisz następujące dane do /usr/sbin/policy-rc.d i zapisz zmiany.

    #!/bin/sh
    exit 101
    
  2. Dodaj uprawnienia wykonywania do /usr/sbin/policy-rc.d:

    chmod +x /usr/sbin/policy-rc.d
    
  3. Uruchom następujące polecenia:

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

"Błąd: 0x80040306" podczas instalacji

Ma to związek z faktem, że nie obsługujemy starszej konsoli. Aby wyłączyć starszą konsolę:

  1. Otwórz cmd.exe
  2. Kliknij prawym przyciskiem myszy pasek tytułu - właściwości> -> usuń zaznaczenie Użyj starszej konsoli
  3. Kliknij przycisk OK

"Błąd: 0x80040154" po aktualizacji systemu Windows

Funkcja podsystemu Windows dla systemu Linux może być wyłączona podczas aktualizacji systemu Windows. Jeśli tak się stanie, należy ponownie włączyć funkcję systemu Windows. Instrukcje dotyczące włączania podsystemu Windows dla systemu Linux można znaleźć w przewodniku instalacji ręcznej .

Zmienianie języka wyświetlania

Instalacja programu WSL spróbuje automatycznie zmienić ustawienia regionalne systemu Ubuntu w celu dopasowania ustawień regionalnych instalacji systemu Windows. Jeśli nie chcesz, aby to zachowanie było możliwe, możesz uruchomić to polecenie, aby zmienić ustawienia regionalne systemu Ubuntu po zakończeniu instalacji. Aby ta zmiana weszła w życie, musisz ponownie uruchomić bash.exe.

Poniższy przykład zmienia ustawienia regionalne na en-US:

sudo update-locale LANG=en_US.UTF8

Problemy z instalacją po przywróceniu systemu Windows

  1. Usuń folder %SystemRoot%\System32\Tasks\Microsoft\Windows\Windows Subsystem for Linux.

    Ostrzeżenie

    Nie należy tego robić, jeśli opcjonalna funkcja jest w pełni zainstalowana i działa.

  2. Włącz opcjonalną funkcję WSL (jeśli jeszcze nie)

  3. Ponowny rozruch

  4. lxrun /uninstall /full

  5. Zainstaluj bash

Brak dostępu do Internetu w programie WSL

Niektórzy użytkownicy zgłaszali problemy z określonymi aplikacjami zapory, które blokują dostęp do Internetu w środowisku WSL. Zgłoszone zapory to:

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

W niektórych przypadkach wyłączenie zapory umożliwia dostęp. W niektórych przypadkach po prostu zainstalowanie zapory wygląda na blokowanie dostępu.

Jeśli używasz zapory Microsoft Defender, usuń zaznaczenie pola wyboru "Blokuj wszystkie połączenia przychodzące, w tym te na liście dozwolonych aplikacji". Zezwala na dostęp.

Błąd odmowy uprawnień podczas korzystania z polecenia ping

W przypadku rocznicowej aktualizacji systemu Windows w wersji 1607uprawnienia administratora w systemie Windows są wymagane do uruchomienia ping w programie WSL. Aby uruchomić pingpolecenie , uruchom powłokę Bash w systemie Ubuntu w systemie Windows jako administrator lub uruchom bash.exe polecenie w wierszu polecenia programu PowerShell z uprawnieniami administratora.

W przypadku nowszych wersji systemu Windows Build 14926+uprawnienia administratora nie są już wymagane.

Powłoka Bash zawiesza się

Jeśli podczas pracy z powłoką bash okaże się, że powłoka bash jest zawieszona (lub zakleszczone) i nie odpowiada na dane wejściowe, pomóż nam zdiagnozować problem, zbierając i zgłaszając zrzut pamięci. Należy pamiętać, że te kroki spowodują awarię systemu. Nie rób tego, jeśli nie czujesz się z tym komfortowo, albo zapisz swoją pracę przed wykonaniem tej czynności.

Aby zebrać zrzut pamięci:

  1. Zmień typ zrzutu pamięci na "kompletny zrzut pamięci". Podczas zmiany typu zrzutki, zapisz bieżący typ.

  2. Aby skonfigurować awarię za pomocą kontrolki klawiatury, wykonaj kroki .

  3. Odtwórz sytuację zawieszenia lub blokady.

  4. Zawiesz system, używając kombinacji klawiszy z (2).

  5. System ulegnie awarii i zbierze zrzut pamięci.

  6. Po ponownym uruchomieniu systemu zgłoś element memory.dmp do secure@microsoft.com. Domyślną lokalizacją pliku zrzutu jest %SystemRoot%\memory.dmp lub C:\Windows\memory.dmp jeśli C: jest dysk systemowy. W wiadomości e-mail zwróć uwagę, że zrzut dotyczy zespołu WSL lub Bash na Windows.

  7. Przywróć typ zrzutu pamięci do oryginalnego ustawienia.

Sprawdź swój numer kompilacji

Aby znaleźć architekturę komputera i numer kompilacji systemu Windows, otwórz pozycję Ustawienia>Informacje o systemie>

Wyszukaj pole kompilacji systemu operacyjnego oraz pole typu systemu . Zrzut ekranu pól Kompilacja i Typ systemu

Aby znaleźć numer kompilacji systemu Windows Server, uruchom następujące polecenie w programie PowerShell:

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

Potwierdź, że WSL jest włączone

Możesz potwierdzić, że podsystem Windows dla systemu Linux jest włączony, uruchamiając następujące polecenie w oknie programu PowerShell z podwyższonym poziomem uprawnień:

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

OpenSSH-Server problemy z połączeniem

Próba nawiązania połączenia z serwerem SSH nie powiodła się z powodu następującego błędu: "Połączenie zamknięte przez port 127.0.0.1 22".

  1. Upewnij się, że serwer OpenSSH jest uruchomiony:

    sudo service ssh status
    

    i przeszedłeś przez ten samouczek: https://ubuntu.com/server/docs/service-openssh

  2. Zatrzymaj usługę sshd i uruchom sshd w trybie debugowania:

    sudo service ssh stop
    sudo /usr/sbin/sshd -d
    
  3. Sprawdź dzienniki uruchamiania i upewnij się, że dostępne są HostKeys oraz że nie widzisz komunikatów dziennika, takich jak:

    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
    

Jeśli widzisz takie komunikaty, a klucze są brakujące w /etc/ssh/, musisz ponownie wygenerować klucze lub po prostu przeczyścić&, aby zainstalować openssh-server.

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

Podczas włączania funkcji opcjonalnej WSL nie można odnaleźć przywoływanego zestawu.

Ten błąd jest związany z nieprawidłowym stanem instalacji. Wykonaj następujące kroki, aby spróbować rozwiązać ten problem:

  • Jeśli używasz polecenia włącz funkcję WSL w programie PowerShell, spróbuj użyć graficznego interfejsu użytkownika, otwierając menu Start, wyszukując frazę "Włącz lub wyłącz funkcje systemu Windows", a następnie na liście wybierz pozycję "Podsystem Windows dla systemu Linux", który zainstaluje składnik opcjonalny.

  • Zaktualizuj wersję systemu Windows, przechodząc do pozycji Ustawienia, Aktualizacje i klikając pozycję "Sprawdź aktualizacje"

  • Jeśli oba te elementy kończą się niepowodzeniem i musisz uzyskać dostęp do programu WSL, rozważ uaktualnienie, ponownie zainstaluj system Windows przy użyciu nośnika instalacyjnego i wybierz pozycję "Zachowaj wszystko", aby zapewnić zachowanie aplikacji i plików. Instrukcje dotyczące tego sposobu można znaleźć na stronie Zainstaluj ponownie system Windows 10.

Jeśli widzisz ten błąd:

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

Aby rozwiązać ten problem, dołącz następujący kod do pliku /etc/wsl.conf:

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

Proszę pamiętać, że dodanie tego polecenia doda metadane i zmieni uprawnienia plików systemu Windows widocznych z poziomu WSL. Aby uzyskać więcej informacji, zobacz Uprawnienia systemu plików.

Nie udaje się zdalnie użyć WSL przy pomocy OpenSSH w systemie Windows.

Jeśli używasz polecenia openssh-server w systemie Windows i próbujesz uzyskać zdalny dostęp do programu WSL, wielu widzi ten błąd: Nie można uzyskać dostępu do pliku przez system.

Jest to znany problem, w przypadku korzystania z wersji Store WSL. Można tymczasowo obejść ten problem, korzystając z WSL 1 lub z wersji WSL zintegrowanej w Windows. Aby uzyskać więcej informacji, zobacz WSL w sklepie Microsoft Store .

Uruchamianie poleceń systemu Windows kończy się niepowodzeniem wewnątrz dystrybucji

Niektóre dystrybucje dostępne w sklepie Microsoft Store nie są jeszcze w pełni zgodne z uruchamianiem poleceń systemu Windows poza urządzeniem. Jeśli zostanie wyświetlony błąd "-bash: powershell.exe: polecenie nie znaleziono" uruchomione powershell.exe /c start . lub inne polecenie systemu Windows, możesz rozwiązać ten problem, wykonując następujące kroki:

  1. W dystrybucji WSL uruchom polecenie echo $PATH. Jeśli nie zawiera: /mnt/c/Windows/system32 coś przedefiniowuje standardową zmienną PATH.
  2. Sprawdź ustawienia profilu przy użyciu cat /etc/profile. Jeśli zawiera przypisanie zmiennej PATH, zmodyfikuj plik, aby oznaczyć jako komentarz blok przypisania PATH znakiem #.
  3. Sprawdź, czy plik wsl.conf jest obecny cat /etc/wsl.conf i upewnij się, że nie zawiera appendWindowsPath=false, w przeciwnym razie zakomentuj go.
  4. Uruchom ponownie dystrybucję, wpisując wsl -t <Distro> nazwę dystrybucji lub uruchom polecenie wsl --shutdown w programie PowerShell.

Nie można uruchomić po zainstalowaniu programu WSL 2

Wiemy o problemie wpływającym na użytkowników, którzy nie mogą uruchomić się po zainstalowaniu programu WSL 2. Podczas pełnej diagnostyki problemu użytkownicy zgłosili, że zmiana rozmiaru buforu lub instalacja odpowiednich sterowników może pomóc rozwiązać ten problem. Proszę zapoznać się z tym zadaniem w serwisie GitHub, aby zobaczyć najnowsze aktualizacje dotyczące tego zadania.

Błędy protokołu WSL 2, gdy usługa ICS jest wyłączona

Udostępnianie połączeń internetowych (ICS) stanowi niezbędny składnik WSL 2. Usługa ICS jest używana przez usługę sieci hosta (HNS) do utworzenia podstawowej sieci wirtualnej, na której WSL 2 polega w kwestii NAT, DNS, DHCP oraz udostępniania połączeń hosta.

Wyłączenie usługi udostępniania połączenia internetowego (ICS - SharedAccess) lub wyłączenie funkcji ICS za pomocą zasad grupowych uniemożliwi utworzenie sieci HNS dla systemu WSL. Spowoduje to błędy podczas tworzenia nowego obrazu WSL w wersji 2 i następujący błąd podczas próby przekonwertowania obrazu w wersji 1 na wersję 2: Nie ma więcej punktów końcowych dostępnych z mapatora punktu końcowego.

Systemy, które wymagają protokołu WSL 2, powinny pozostawić usługę ICS (SharedAccess) w domyślnym stanie uruchamiania, ręczne (uruchamianie wyzwalacza) i wszelkie zasady wyłączające ICS powinny zostać zastąpione lub usunięte. Wyłączenie usługi ICS uniemożliwi działanie WSL 2, i nie zalecamy wyłączania ICS, ale przy użyciu tych instrukcji można wyłączyć części ICS

Korzystanie ze starszych wersji systemów Windows i WSL

Istnieje kilka różnic, które należy zauważyć, jeśli używasz starszej wersji systemu Windows i programu WSL, na przykład Windows 10 Creators Update (październik 2017, kompilacja 16299) lub rocznicowej aktualizacji (sierpień 2016, kompilacja 14393). Zalecamy aktualizację do najnowszej wersji systemu Windows, ale jeśli nie jest to możliwe, poniżej przedstawiamy niektóre różnice.

Różnice poleceń współdziałania:

  • bash.exe został zastąpiony wsl.exe. Polecenia systemu Linux można uruchamiać z poziomu programu PowerShell, ale w przypadku wczesnych wersji systemu Windows może być konieczne użycie bash polecenia . Na przykład: C:\temp> bash -c "ls -la". Polecenia WSL przekazane do bash -c są przekazywane do procesu WSL bez modyfikacji. Ścieżki plików muszą być określone w formacie WSL i należy zachować ostrożność, aby uniknąć odpowiednich znaków. Na przykład: C:\temp> bash -c "ls -la /proc/cpuinfo" lub C:\temp> bash -c "ls -la \"/mnt/c/Program Files\"".
  • Aby zobaczyć, jakie polecenia są dostępne dla określonej dystrybucji, uruchom polecenie [distro.exe] /?. Na przykład w systemie Ubuntu: C:\> ubuntu.exe /?.
  • Ścieżka systemu Windows jest zawarta w WSL $PATH.
  • Podczas wywoływania narzędzia systemu Windows z dystrybucji WSL we wcześniejszej wersji systemu Windows 10 należy określić ścieżkę katalogu. Aby na przykład wywołać aplikację Notatnik systemu Windows z wiersza polecenia WSL, wprowadź: /mnt/c/Windows/System32/notepad.exe
  • Aby zmienić domyślnego użytkownika na root użyj tego polecenia w programie PowerShell: C:\> lxrun /setdefaultuser root, a następnie uruchom Bash.exe, aby się zalogować: C:\> bash.exe. Zresetuj hasło przy użyciu polecenia distributions password: $ passwd username, a następnie zamknij wiersz polecenia systemu Linux: $ exit. W wierszu polecenia systemu Windows lub programie PowerShell zresetuj domyślnego użytkownika z powrotem do normalnego konta użytkownika systemu Linux: C:\> lxrun.exe /setdefaultuser username.

Odinstalowywanie starszej wersji programu WSL

Jeśli pierwotnie zainstalowano program WSL w wersji systemu Windows 10 przed aktualizacją dla twórców (październik 2017, kompilacja 16299), zalecamy przeprowadzenie migracji wszelkich niezbędnych plików, danych itp. ze starszej zainstalowanej dystrybucji systemu Linux do nowszej dystrybucji zainstalowanej za pośrednictwem Sklepu Microsoft. Aby usunąć starszą dystrybucję z maszyny, uruchom następujące polecenie z poziomu wiersza polecenia lub wystąpienia programu PowerShell: wsl --unregister Legacy. Możesz również ręcznie usunąć starszą dystrybucję, usuwając folder %LocalAppData%\lxss\ (i całą zawartość) przy użyciu Eksploratora plików systemu Windows lub programu PowerShell: Remove-Item -Recurse $env:localappdata/lxss/.

Kod błędu 0x8000FFFF nieoczekiwany błąd

Ten kod błędu zwykle oznacza, że wystąpiła nieoczekiwana, "katastrofalna" awaria podczas operacji systemowych przy próbie zainstalowania lub użycia dystrybucji systemu Linux (takiego jak Ubuntu) przy użyciu WSL. Istnieje wiele przyczyn, które mogą prowadzić do tego błędu. Zacznij od sprawdzenia następujących elementów:

  • Czy jest to problem z uprawnieniami? Sprawdź, czy jesteś zalogowany jako oczekiwany użytkownik w wierszu polecenia oraz czy masz niezbędne uprawnienia administratora podczas instalowania dystrybucji systemu Linux za pomocą WSL. (Kliknij prawym przyciskiem myszy ikonę paska zadań Terminal lub Wiersza polecenia, aby wybrać pozycję "Uruchom jako administrator".
  • Czy zaktualizowano środowisko WSL do najnowszej wersji? Użyj polecenia : wsl --update aby zaktualizować do najnowszej wersji. Może być również konieczne zaktualizowanie do najnowszej wersji systemu Windows.
  • Upewnij się, że używasz wsl --install polecenia poprawnie i określasz rozdystrybucję systemu Linux, którą chcesz zainstalować.
  • Spróbuj zamknąć i ponownie uruchomić program WSL, używając polecenia : wsl --shutdown.
  • Jeśli używasz systemu Windows Server, upewnij się, że twoja wersja jest aktualna i postępuj zgodnie z przewodnikiem instalacji systemu Windows Server.
  • Jeśli podejrzewasz, że może to być związane z brakującymi lub uszkodzonymi plikami systemowym, w wierszu polecenia z podwyższonym poziomem uprawnień (Uruchom jako administrator) możesz skanować i naprawiać pliki systemowe i/lub naprawić obraz systemu operacyjnego Windows. Aby przeprowadzić skanowanie pod kątem uszkodzonych lub brakujących plików systemowych systemu Windows i naprawić je, użyj polecenia : SFC /SCANNOW. Aby naprawić sam obraz systemu Windows, użyj polecenia : DISM /Online /Cleanup-Image /RestoreHealth.
  • Zobacz powiązane kwestię 9420 w repozytorium produktu WSL.