По состоянию на ноябрь 2014 года последние версии startxwin
используют xinit
для запуска сервера Cygwin/X, который на самом деле называется XWin.exe
. Процесс идет примерно так:
- Вы звоните
startxwin
startxwin
создает новый .Xauthority
и один .serverauth.1234
(где 1234
меняется каждый раз, когда вы запускаете X)
startxwin
устанавливает некоторые параметры клиента и сервера
startxwin
вызывает xinit
с параметрами клиента и сервера, включая некоторые необязательные сценарии оболочки и ссылку на файл аутентификации.
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
убивать его).