Od listopada 2014 r. Najnowsze wersje startxwin
używają xinit
do uruchomienia serwera Cygwin / X, który jest tak naprawdę nazywany XWin.exe
. Proces przebiega mniej więcej tak:
- Ty dzwonisz
startxwin
startxwin
tworzy nowy .Xauthority
plik i jeden o nazwie .serverauth.1234
(gdzie 1234
zmienia się przy każdym uruchomieniu X)
startxwin
ustawia niektóre parametry klienta i serwera
startxwin
wywołania xinit
z parametrami klienta i serwera, w tym niektóre opcjonalne skrypty powłoki i odniesienie do pliku auth.
xinit
uruchamia serwer X, uruchamiając niektóre skrypty rc
xinit
uruchamia xterm
skrypt klienta (zwykle ) lub klienta rc. Chcemy tego uniknąć
- Po zamknięciu klienta lub zakończeniu skryptu rc klienta
xinit
wyłącza serwer X. Jeśli unikniemy kroku 6, musimy również tego uniknąć
Możliwe jest uruchamianie XWin.exe
bezpośrednio z poziomu powłoki logowania Bash, bez otaczających zadań, które startxwin
i xinit
wykonują. Główną zaletą tego jest to, że zachowuje się tak, jak chcemy: serwer X uruchamia się i pozostaje uruchomiony. Niestety, ponieważ .Xauthority
podczas uruchamiania nie przekazano żadnego pliku, twój serwer X pozwoliłby na połączenie się z dowolnym procesem lokalnym, co jest niepewne.
Na szczęście to xinit
robi większość rzeczy, których nie chcemy. Istnieje szybki hack, który omija, xinit
ale zachowuje pozostałe elementy startxwin
związane z samym serwerem.
TL; DR: W startxwin
dolnej linii znajduje się wiersz o treści:
eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs
Zmień tę linię na:
eval \"$server\" $display $serverargs
Od tej pory startxwin
skrypt będzie dzwonił XWin.exe
bezpośrednio, a nie dzwoni xinit
. Oczywiście spowoduje to wyłączenie skryptów rc klienta, ale nie chcieliśmy ich w ogóle. Oznacza to również, że X będzie kontynuował działanie bez potrzeby korzystania z procesu klienta, aby utrzymać go przy życiu (tj. Nie xinit
zabijać go).
exec sleep infinity
jak pokazano tutaj: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit