По состоянию на ноябрь 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
убивать).
exec sleep infinity
как показано здесь: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit