Em novembro de 2014 , as versões mais recentes de startxwin
uso xinit
para iniciar o servidor Cygwin / X, que é realmente chamado XWin.exe
. O processo é mais ou menos assim:
- Você chama
startxwin
startxwin
cria um novo .Xauthority
arquivo e um chamado .serverauth.1234
(onde 1234
muda sempre que você inicia o X)
startxwin
configura alguns parâmetros de cliente e servidor
startxwin
chama xinit
com os parâmetros do cliente e do servidor, incluindo alguns scripts shell opcionais e uma referência ao arquivo auth.
xinit
inicia o servidor X, executando alguns dos scripts rc
xinit
inicia o xterm
script cliente (geralmente ) ou cliente rc. Queremos evitar isso
- Quando você fecha o cliente ou o script rc do cliente termina,
xinit
encerra o servidor X. Se evitarmos a etapa 6, também precisamos evitar isso
É possível executar XWin.exe
diretamente de dentro de um shell de login Bash, sem as tarefas que cercam essa startxwin
e xinit
executar. A principal vantagem disso é que ele se comporta como queremos: o servidor X inicia e permanece em execução. Infelizmente, como não há .Xauthority
arquivo passado durante a inicialização, o servidor X permitiria a conexão de qualquer processo local, o que é inseguro.
Felizmente, ele xinit
faz a maioria das coisas que não queremos. Há um hack rápido que ignora, xinit
mas mantém os elementos restantes startxwin
relacionados ao próprio servidor.
TL; DR: No startxwin
, há uma linha na parte inferior que lê:
eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs
Mude essa linha para:
eval \"$server\" $display $serverargs
A partir de agora, o startxwin
script chamará XWin.exe
diretamente, em vez de chamar xinit
. Obviamente, isso desativará os scripts rc do cliente, mas não os queremos em primeiro lugar. Isso também significa que o X continuará sendo executado sem a necessidade de um processo do cliente para mantê-lo vivo (ou seja, não o xinit
mate).
exec sleep infinity
como mostrado aqui: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit