Ausführen von grafischen Linux-Desktop-Anwendungen aus der WSL 2 – „Error E233: cannot open display“
oder je nachdem „Fehler E233: Anzeige kann nicht geöffnet werden“ falls jemand aus irgendwelchen Gründen WSL auf deutsch gestellt hat.
Wie kann ich grafische Linux-Desktop-Anwendungen über die Befehlszeile von Windows Subsystem für Linux (WSL) ausführen?
Das Netzwerk-Subsystem in WSL2 unterscheidet sich von dem in WSL1 verwendeten. Sie müssen die Unterschiede berücksichtigen, um auf Netzwerkanwendungen zuzugreifen, die unter Windows und Linux laufen:
- In WSL1 verwendet Linux dieselben IP-Adressen wie der Windows-Host, d. h., Sie können auf die Anwendungen über localhost oder 127.0.0.1 zugreifen.
- In WSL2 läuft Linux auf einer leichtgewichtigen virtuellen Maschine und hat eine andere IP-Adresse. Für den Zugriff auf Netzwerkanwendungen, die auf dem Windows-Host laufen, müssen Sie die Windows-IP-Adresse verwenden.
Setzen der DISPLAY-Variable für WSL2
Nach der Microsoft-Dokumentation (;-)) können wir die DISPLAY-Variable zur Überprüfung des Nameservers in der Datei /etc/resolv.conf setzen.
export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):0.0
Ich hatte jedoch Probleme mit dieser Lösung, wahrscheinlich weil ich mein Notebook mit einer WiFi-Verbindung und mehreren virtuellen Netzwerken verwende. Anstelle der vorherigen Lösung ermittle ich die Windows-IP-Adresse mit route.exe und überprüfe die im Standardgateway verwendete Schnittstelle.
Einstellen der DISPLAY-Variable im .profile
Wir können die DISPLAY-Variable in deiner ~/.profile setzen. Ich habe den folgenden Code verwendet:
# set DISPLAY to use X terminal in WSL
# in WSL2 the localhost and network interfaces are not the same than windows
if grep -q WSL2 /proc/version; then
# execute route.exe in the windows to determine its IP address
DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0
else
# In WSL1 the DISPLAY can be the localhost address
if grep -q icrosoft /proc/version; then
DISPLAY=127.0.0.1:0.0
fi
fi
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!