Ab November 2014 werden die neuesten Versionen der startxwin
Anwendung xinit
starten Sie den Cygwin / X - Server, der tatsächlich aufgerufen wird XWin.exe
. Der Prozess läuft ungefähr so ab:
- Du rufst an
startxwin
startxwin
erstellt eine neue .Xauthority
Datei und eine aufgerufene .serverauth.1234
(wo 1234
sich jedes Mal ändert, wenn Sie X starten) startxwin
Legt einige Client- und Server-Parameter fest startxwin
Aufrufe xinit
mit den Client- und Server-Parametern, einschließlich optionaler Shell-Skripts und einer Referenz auf die Auth-Datei. xinit
Startet den X-Server und führt einige der RC-Skripts aus xinit
Startet den Client (normalerweise xterm
) oder das Client-RC-Skript. Das wollen wir vermeiden - Wenn Sie den Client schließen oder das Client-RC-Skript beendet ist,
xinit
wird der X-Server heruntergefahren. Wenn wir Schritt 6 vermeiden, müssen wir dies auch vermeiden
Es ist möglich, XWin.exe
direkt von einer Bash-Login-Shell aus zu laufen, ohne die umliegenden Aufgaben auszuführen startxwin
und xinit
auszuführen. Der Hauptvorteil davon ist, dass es sich so verhält, wie wir es wollen: Der X-Server startet und läuft weiter. Da .Xauthority
während des Startvorgangs keine Datei übergeben wird, lässt Ihr X-Server leider zu, dass sich ein lokaler Prozess mit ihm verbindet, was unsicher ist.
Glücklicherweise xinit
tut es das meiste, was wir nicht wollen. Es gibt einen schnellen Hack, der umgeht xinit
, die übrigen Elemente startxwin
jedoch auf den Server selbst beziehen.
TL; DR: In startxwin
der Zeile unten in der Zeile lautet:
eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs
Ändern Sie diese Zeile in:
eval \"$server\" $display $serverargs
Von jetzt an startxwin
ruft das Skript nicht XWin.exe
direkt, sondern direkt auf xinit
. Offensichtlich werden dadurch alle Client-Skripts deaktiviert, aber wir wollten diese überhaupt nicht. Dies bedeutet auch, dass X weiterläuft, ohne einen Client-Prozess zu benötigen, um ihn am Leben zu halten (dh ihn nicht zu xinit
töten).