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
0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert