Eine effiziente Möglichkeit, eine grafische Anwendung mit mehreren Monitoren mit WSL2 und VcXsrv unter Windows zu starten

Eine effiziente Möglichkeit, eine grafische Anwendung mit mehreren Monitoren mit WSL2 und VcXsrv unter Windows zu starten

Ich verwende WSL2 unter Windows, im Moment hauptsächlich, um meinen angepassten Emacs zu starten. Mein Workflow zum Starten von Emacs ist etwas umständlich. Nach jedem Booten muss ich die Xsrv-Anwendung mit mehreren Monitoreinstellungen starten. Dann öffne ich das neue Windows-Terminal, öffne Ubuntu 18.04 und starte die grafische Umgebung von Xfce4. Dann starte ich in dieser grafischen Umgebung ein Terminal und verwende schließlich den emacsBefehl, um Emacs zu starten.

Wie ihr seht, sind das ziemlich viele Schritte, nur um eine grafische Version von Emacs zum Laufen zu bringen, die auf mehreren Monitoren verwendet werden kann. Meine Frage ist, wie man den Prozess beschleunigen könnte. Im Moment habe ich die Idee, ein Autohotkey-Skript zu erstellen und zu prüfen, ob man die grafische Sitzung standardmäßig mit WSL2 starten kann. Ich wäre sehr dankbar, wenn ihr mir ein paar Tipps geben könntet. Sind diese Ideen schon das Beste, was ich tun kann, oder gibt es noch andere Tricks, wie ich die grafische Version von Emacs mit wenigen Aktionen zum Laufen bringen könnte?

Antwort1

Sie können den Start von VcXsrv mit Ihren Einstellungen automatisieren. Das habe ich getan.

Teil 1: VcXsrv automatisch starten lassen

Wenn Sie vcxsrv ausführen, wird jedes Mal ein Konfigurationsbildschirm angezeigt.
Wenn Sie zum letzten Konfigurationsbildschirm gelangen, haben Sie die Möglichkeit, ihn zu speichern. Anschließend erstellen Sie eine Verknüpfung, die auf die gespeicherte Konfiguration verweist, und legen sie im Autostart ab. Hier ist ein SuperUser-BeitragWir sprechen über verschiedene Möglichkeiten, vcxsrv automatisch zu starten.

Teil 2: Exportieren Sie Ihre Anzeige

x11 unterstützt das „Weiterleiten“ von Fensterbefehlen an verschiedene IP-Adressen (und Desktops), um so etwas wie Windows Remote Desktop zu ermöglichen. In vielerlei Hinsicht besser, aber nicht in jeder Hinsicht. Diese Funktion ist seit Beginn in x11 enthalten.

Um Ihre Anzeige zu exportieren, müssen Sie die Umgebungsvariable DISPLAY festlegen, bevor Sie eine x11-Anwendung starten. Normalerweise ist es am besten, den Exportbefehl in Ihre Datei ~/.bashrc einzufügen (vorausgesetzt, Sie verwenden Bash), damit dies nicht jedes Mal ausgeführt werden muss. Die Zeile sieht folgendermaßen aus: „ export DISPLAY=<ip_address>:0.0 0.0 bezieht sich auf den Desktop, auf den Sie abzielen, aber damit es hier nicht zu Verwirrungen kommt, verwenden Sie einfach 0.0.“

Sie können dies schnell erreichen, indem Sie die folgenden Befehle im Bash-Terminal ausführen.

  1. echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
  2. source ~/.bashrc(oder Sie können Ihr Terminal hier neu starten)

Sie sollten jetzt bereit sein, jede gewünschte x11-Anwendung zu starten und in Windows anzuzeigen.

Ich möchte darauf hinweisen, dass Sie bei Problemen mit einer bestimmten Anwendung versuchen sollten, die OpenGL-Unterstützung in VcXsrv zu deaktivieren. Ich konnte VisualStudio Code erst starten, nachdem ich diese Einstellung deaktiviert hatte.

Teil 3: Eine Windows-Verknüpfung zum Ausführen Ihres Linux x11-Dings!

  1. Erstellen Sie eine Windows-Verknüpfung zu bash.exe (oder wsl.exe).
  2. Fügen Sie nach „.exe“ im Feld „Ziel:“ „-c [x11_thing_to_run]“ hinzu (für wsl.exe ist es --exec, nicht -c).
  3. Wenn es nicht im grafischen Modus startet, fügen Sie Ihre DISPLAY-Umgebung erneut zur Zeile hinzu ... sobash.exe -c "DISPLAY=127.0.0.1:0.0 xemacs"
  4. Benennen Sie Ihre Verknüpfung in das x11-Ding um und weisen Sie ihm ein Super-Spiffo-Symbol zu. Bildbeschreibung hier eingeben

Das fertige Produkt Bildbeschreibung hier eingeben

Antwort2

DerAntwort von Señor CMasMasist in jeder Hinsicht richtig. Aber wenn Sie WSL 2 verwenden, localhostfunktioniert es nicht. Zumindest funktioniert es zum Zeitpunkt des Schreibens nicht. (Es gibt Gerüchte, dass das WSL-Team an einer Lösung arbeitet.)

Der Grund dafür ist, dass WSL 2 Ihr Ubuntu (oder was auch immer) in einer separaten (virtuellen) Maschine platziert, anstatt als Teil der Windows-Maschine (wie es WSL 1 tat).

DISPLAYUm dies zu beheben, müssen Sie es wie folgt berechnen :

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

Eine gute Möglichkeit, dies zu tun und es dann zu vergessen, besteht darin, es in die Datei einzufügen ~/.bashrc. Dann muss die Anmeldung bei der WSL jedoch über eine Login-Shell erfolgen, sonst wird sie nicht ausgeführt.

Wenn Sie einen Link zu verwenden bash.exe, was meiner Meinung nach der einfachere Weg ist, sollte Ihr Befehl ungefähr so ​​aussehen:

 bash.exe -i -c emacs

Das -ibedeutet, dass die Shell interaktiv sein sollte, also das gesamte Login-Skripting durchführen sollte.

Das lässt das Bash-Fenster jedoch so lange geöffnet, wie der Befehl (Emacs) ausgeführt wird. Da ich Cygwin installiert habe, nutze ich dessen runBefehl, der den Befehl startet und dann verschwindet. Das ist also mein Befehl

C:\cygwin64\bin\run.exe bash -i -c emacs

verwandte Informationen