Станом на листопад 2014 року , новітні версії startxwinвикористовуються xinitдля запуску сервера Cygwin / X, який насправді називається XWin.exe. Процес відбувається приблизно так:
- Ти телефонуєш
startxwin
startxwinстворює новий .Xauthorityфайл і той, що називається .serverauth.1234(де 1234змінюється щоразу, коли ви запускаєте X)
startxwin встановлює деякі параметри клієнта та сервера
startxwinдзвінки xinitз параметрами клієнта та сервера, включаючи деякі необов’язкові сценарії оболонки та посилання на файл auth.
xinit запускає сервер X, виконуючи деякі сценарії rc
xinitзапускає xtermсценарій клієнта (як правило ) або клієнта rc. Ми хочемо цього уникнути
- Коли ви закриваєте клієнта або завершується сценарій rc клієнта,
xinitвимикає X-сервер. Якщо ми уникаємо кроку 6, ми також мусимо цього уникати
Можна запустити XWin.exeбезпосередньо з логіна оболонки Bash, без оточуючих завдань , які startxwinі xinitвиконують. Основна перевага цього полягає в тому, що він веде себе так, як ми хочемо: X-сервер запускається і продовжує працювати. На жаль, оскільки .Xauthorityпід час запуску не передано жодного файлу, ваш X-сервер дозволить підключитися до нього будь-який локальний процес, що є небезпечним.
На щастя, це те, xinitщо робить більшість речей, які ми не хочемо. Існує швидкий злом, який обходить, xinitале зберігає решта елементів startxwin, пов’язаних із самим сервером.
TL; DR: В startxwin, є лінія в нижній частині, де йдеться:
eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs
Змініть цей рядок на:
eval \"$server\" $display $serverargs
Відтепер startxwinсценарій буде дзвонити XWin.exeбезпосередньо, а не викликати xinit. Очевидно, що це відключить будь-які сценарії клієнтських rc, але ми їх не хотіли в першу чергу. Це також означає, що X продовжуватиме працювати, не потребуючи клієнтського процесу, щоб тримати його живим (тобто не xinitвбивати його).
exec sleep infinityяк показано тут: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit