Wie verhindere ich, dass der XWin-Server von Cygwin xterm automatisch startet?


12

Immer wenn ich Cygwins X-Server über den Link "XWin Server" in meinem Startmenü starte oder von startxwineiner Cygwin-Shell aus starte , wird automatisch ein xterm-Fenster angezeigt, das ich weder möchte noch brauche.

Wie vermeide ich das?

(Frage inspiriert durch diesen Kommentar von Stijn Vanpoucke über Stack Overflow)

Antworten:


5

Es scheint, dass sich das Verhalten von startxwin seit @me_ geändert hat und ursprünglich die Frage beantwortet hat. Daher funktioniert es nicht mehr, einfach eine leere .startxwinrc in Ihrem Home-Verzeichnis zu erstellen.

Ich habe hier eine Antwort gefunden . Im Wesentlichen wird der Server beendet, wenn der letzte Befehl in .startxwinrc beendet wird. Wenn Sie dies verhindern möchten, können Sie dies als letzte Zeile in Ihre .startxwinrc einfügen:

sleep inf

Dadurch werden keine Client-Programme gestartet, es wird jedoch auch verhindert, dass .startxwinrc beendet wird.


1
Aus irgendeinem Grund funktioniert das bei mir nicht. Ich musste Folgendesexec sleep infinity
eingeben

17

UPDATE : Diese Antwort ist nicht mehr aktuell. Eine aktuelle Antwort finden Sie in der Antwort von user551570 weiter unten .

Von man startxwin:

Wenn in der Befehlszeile kein bestimmtes Client-Programm angegeben ist, startxwinwird im Basisverzeichnis des Benutzers nach einer Datei gesucht, die .startxwinrczum Starten von Client-Programmen als Shell-Skript aufgerufen wird . Wenn keine solche Datei vorhanden ist, startxwinwird standardmäßig Folgendes verwendet:

xterm  -geometry  +1+1  -n  login  -display  :0

Um zu vermeiden, dass ein Programm beim Starten des X-Servers gestartet wird, möchten Sie eine leere .startxwinrcDatei. Führen Sie einfach Folgendes an einer Cygwin-Eingabeaufforderung aus:

touch ~/.startxwinrc

1
Diese Lösung war lange Zeit gut, aber jetzt, mit dem letzten Update, ist dies nicht mehr der Fall. Wenn Sie eine leere .startxwinrcDatei verwenden, wird der X-Server sofort ausgeblendet. :-(
Notinlist

1
@Notinlist So ist es. Das ist ein bisschen traurig. Ich werde versuchen, nachzuforschen und eine neue Lösung zu finden. Es scheint, dass das System jetzt etwas komplizierter ist, und ich kann nicht trivial herausfinden, wie es funktionieren soll ...
ich_und

3

Ab November 2014 werden die neuesten Versionen der startxwinAnwendung , xinitum die Cygwin / X - Server zu starten, die tatsächlich aufgerufen wird XWin.exe. Der Prozess läuft ungefähr so ​​ab:

  1. Du rufst an startxwin
  2. startxwinErstellt eine neue .Xauthorityund eine aufgerufene Datei .serverauth.1234( 1234ändert sich bei jedem Start von X)
  3. startxwin Richtet einige Client- und Serverparameter ein
  4. startxwinAufrufe xinitmit den Client- und Serverparametern, einschließlich einiger optionaler Shell-Skripte und eines Verweises auf die Auth-Datei.
  5. xinit Startet den X-Server und führt einige der rc-Skripte aus
  6. xinitstartet das client (normalerweise xterm) oder client rc script. Das wollen wir vermeiden
  7. Wenn Sie den Client schließen oder das Client-RC-Skript beendet ist, xinitwird der X-Server heruntergefahren. Wenn wir Schritt 6 vermeiden, müssen wir dies auch vermeiden

Es ist möglich , läuft XWin.exedirekt aus einem Bash Login - Shell, ohne die umliegenden Aufgaben, startxwinund xinitauszuführen. Der Hauptvorteil davon ist, dass es sich so verhält, wie wir es wollen: Der X-Server startet und läuft weiter. Da .Xauthoritybeim Start keine Datei übergeben wird, kann auf Ihrem X-Server kein lokaler Prozess eine Verbindung herstellen, was unsicher ist.

Glücklicherweise ist es das xinit, was die meisten Dinge, die wir nicht wollen, bewirken. Es gibt einen schnellen Hack, der umgeht, xinitaber die verbleibenden Elemente startxwin, die sich auf den Server selbst beziehen, beibehält.

TL; DR: In startxwin, es gibt eine Zeile in der Nähe des Bodens, die lautet:

eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs

Ändern Sie diese Zeile in:

eval \"$server\" $display $serverargs

Von nun an startxwinruft das Skript XWin.exedirekt auf und nicht mehr xinit. Offensichtlich werden dadurch alle Client-RC-Skripte deaktiviert, aber wir wollten diese überhaupt nicht. Dies bedeutet auch, dass X weiter ausgeführt wird, ohne dass ein Client-Prozess am Leben bleiben muss (dh ihn nicht xinitbeenden kann).


0

Ich habe es mir zur Gewohnheit gemacht, Cygwin X mit startxwin (.exe) zu starten. Meine .startxwinrc-Datei lautet wie folgt:

X :0 -rootless mrxvt  -geometry  +1+1  -n  login  -display  :0 -tt ImTabbed

Bisher hat es funktioniert. Der einzige Fehler, den ich erhalte, betrifft die Anzeige, die von einem anderen X-Prozess noch "geöffnet" wird. Dieser Fehler gibt eine bestimmte Datei an, die der X-Server standardmäßig für jede Sitzung generiert. Die Cygwin-Leute wissen, dass es nicht gelöscht wird, wenn die Sitzung beendet wird.

Also habe ich einen Alias ​​geschrieben, um das zu "heilen":

alias freex='rm /tmp/.X0-lock'

Ich setze die gleiche Zeile - jedenfalls den Teil zwischen den Anführungszeichen - in meine Dateien .bashrc und .bash_profile, falls ich vergessen sollte, dies selbst zu tun.

HTH.

BZT


Dies ist keine wirkliche Antwort auf diese Frage. Mit Umformulierung könnte es sein, aber ich denke, dies wäre besser geeignet als separate Frage und Antwort (wie ich es hier getan habe) zur Behandlung des Fehlers, den Sie sehen. Sie können dann in den Kommentaren zu dieser Frage auf diese Frage verlinken.
me_and
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.