Wie kann ich verhindern, dass Cygwins XWin Server automatisch xterm startet?

9257
me_and

Wenn ich Cygwins X-Server über den Link "XWin-Server" im Startmenü starte oder von startxwineiner Cygwin-Shell aus laufe, wird automatisch ein Xterm-Fenster angezeigt, das ich nicht will oder brauche.

Wie vermeide ich das?

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

12

4 Antworten auf die Frage

17
me_and

UPDATE: This answer is now out of date. For an up-to-date answer, see user551570's answer below.

From man startxwin:

If no specific client program is given on the command line, startxwin will look for a file in the user's home directory called .startxwinrc to run as a shell script to start up client programs. If no such file exists, startxwin will use the following as a default:

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

Thus, to avoid having any program start up when you start the X Server, you want a blank .startxwinrc file. Just run the following from a Cygwin prompt:

touch ~/.startxwinrc 
Diese Lösung war lange Zeit gut, aber jetzt mit dem letzten Update nicht. Die Verwendung eines leeren `.startxwinrc` führt zum sofortigen Verschwinden des X-Servers. :-( Notinlist vor 9 Jahren 1
@Notinlist So ist es. Das ist ein bisschen traurig. Ich werde versuchen und nachforschen und eine neue Lösung finden; es scheint, dass das System jetzt etwas komplizierter ist, und ich kann nicht trivial herausfinden, wie es funktionieren soll… me_and vor 9 Jahren 1
5
user551570

Es scheint, dass sich das Verhalten von startxwin seit der Beantwortung der Frage durch @me_ geändert hat. Das Erstellen eines leeren .startxwinrc in Ihrem Home-Verzeichnis wird daher nicht mehr funktionieren.

Ich habe hier eine Antwort gefunden . Wenn der letzte Befehl in .startxwinrc beendet wird, wird der Server im Wesentlichen beendet. Wenn Sie das verhindern möchten, können Sie dies als letzte Zeile in Ihrem .startxwinrc eingeben:

sleep inf 

Dadurch werden keine Client-Programme gestartet, das Starten von .startxwinrc wird jedoch auch verhindert.

Aus irgendeinem Grund funktioniert das bei mir nicht. Ich musste Folgendes eingeben: `exec sleep infinity 'wie hier gezeigt: http://x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit enricoferrero vor 8 Jahren 1
3
Ethan T

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

  1. Du rufst an startxwin
  2. startxwinerstellt eine neue .XauthorityDatei und eine aufgerufene .serverauth.1234(wo 1234sich jedes Mal ändert, wenn Sie X starten)
  3. startxwin Legt einige Client- und Server-Parameter fest
  4. startxwinAufrufe xinitmit den Client- und Server-Parametern, einschließlich optionaler Shell-Skripts und einer Referenz auf die Auth-Datei.
  5. xinit Startet den X-Server und führt einige der RC-Skripts aus
  6. xinitStartet den Client (normalerweise xterm) oder das Client-RC-Skript. 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, XWin.exedirekt von einer Bash-Login-Shell aus zu laufen, ohne die umliegenden Aufgaben auszuführen 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 .Xauthoritywä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 xinittut es das meiste, was wir nicht wollen. Es gibt einen schnellen Hack, der umgeht xinit, die übrigen Elemente startxwinjedoch auf den Server selbst beziehen.

TL; DR: In startxwinder 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 startxwinruft das Skript nicht XWin.exedirekt, 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 xinittöten).

0
SilversleevesX

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

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

Bisher hat es geklappt. Der einzige Fehler, den ich bekomme, betrifft die Anzeige, die noch von einem anderen X-Prozess "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 sie nicht gelöscht werden, wenn die Sitzung beendet wird.

Also schrieb ich einen Pseudonym, um "zu heilen":

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

Ich füge dieselbe Zeile - jedenfalls den Teil zwischen den Anführungszeichen - in meine .bashrc- und .bash_profile -Dateien ein, falls ich vergessen sollte, es selbst zu machen.

HTH.

BZT

Dies ist nicht wirklich eine Antwort auf diese Frage; mit Umformulierung könnte es sein, aber ich denke, dass dies besser als separate Frage und Antwort (wie hier) zur Behandlung des Fehlers geeignet wäre. Sie können dann in den Kommentaren zu dieser Frage auf diese Frage verweisen. me_and vor 11 Jahren 0