Станом на листопад 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