Como evito que o XWin Server da Cygwin inicie automaticamente o xterm?

12

Sempre que inicio o servidor X do Cygwin usando o link "XWin Server" no menu Iniciar, ou executando startxwinum shell Cygwin, recebo automaticamente uma janela do xterm, que eu não quero nem preciso.

Como evito isso?

(Pergunta inspirada neste comentário de Stijn Vanpoucke sobre Stack Overflow)

eu e
fonte

Respostas:

5

Parece que o comportamento do startxwin mudou desde que @me_and respondeu originalmente à pergunta, portanto, simplesmente criar um .startxwinrc vazio no diretório inicial não funcionará mais.

Encontrei uma resposta aqui . Essencialmente, quando o último comando em .startxwinrc terminar, o servidor sairá. Se você deseja evitar isso, pode colocar isso como a última linha no seu arquivo .startxwinrc:

sleep inf

Isso não iniciará nenhum programa cliente, mas também impedirá a saída do .startxwinrc.

josmith42
fonte
1
Por alguma razão, isso não funciona para mim. Eu tive que digitar: exec sleep infinitycomo mostrado aqui: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero
17

ATUALIZAÇÃO : Esta resposta está desatualizada. Para obter uma resposta atualizada, consulte a resposta do usuário551570 abaixo .

De man startxwin:

Se nenhum programa cliente específico for fornecido na linha de comando, startxwinprocurará um arquivo no diretório inicial do usuário chamado .startxwinrcpara executar como um shell script para iniciar programas clientes. Se esse arquivo não existir, startxwinusará o seguinte como padrão:

xterm  -geometry  +1+1  -n  login  -display  :0

Portanto, para evitar a inicialização de qualquer programa ao iniciar o X Server, você deseja um .startxwinrcarquivo em branco . Basta executar o seguinte em um prompt do Cygwin:

touch ~/.startxwinrc
eu e
fonte
1
Essa solução foi boa por um longo tempo, mas agora com a última atualização não é. Usar um vazio .startxwinrcresulta no desaparecimento imediato do servidor X. :-(
Notinlist
1
@ Notinlist É o que faz. Isso é um pouco triste. Vou tentar investigar e encontrar uma nova solução; parece que o sistema está um pouco mais complicado agora, e eu não consigo calcular trivialmente como ele deve funcionar ...
me_e
3

Em novembro de 2014 , as versões mais recentes de startxwinuso xinitpara iniciar o servidor Cygwin / X, que é realmente chamado XWin.exe. O processo é mais ou menos assim:

  1. Você chama startxwin
  2. startxwincria um novo .Xauthorityarquivo e um chamado .serverauth.1234(onde 1234muda sempre que você inicia o X)
  3. startxwin configura alguns parâmetros de cliente e servidor
  4. startxwinchama xinitcom os parâmetros do cliente e do servidor, incluindo alguns scripts shell opcionais e uma referência ao arquivo auth.
  5. xinit inicia o servidor X, executando alguns dos scripts rc
  6. xinitinicia o xtermscript cliente (geralmente ) ou cliente rc. Queremos evitar isso
  7. Quando você fecha o cliente ou o script rc do cliente termina, xinitencerra o servidor X. Se evitarmos a etapa 6, também precisamos evitar isso

É possível executar XWin.exediretamente de dentro de um shell de login Bash, sem as tarefas que cercam essa startxwine xinitexecutar. A principal vantagem disso é que ele se comporta como queremos: o servidor X inicia e permanece em execução. Infelizmente, como não há .Xauthorityarquivo passado durante a inicialização, o servidor X permitiria a conexão de qualquer processo local, o que é inseguro.

Felizmente, ele xinitfaz a maioria das coisas que não queremos. Há um hack rápido que ignora, xinitmas mantém os elementos restantes startxwinrelacionados 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 startxwinscript chamará XWin.exediretamente, 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 xinitmate).

Ethan T
fonte
0

Eu criei o hábito de iniciar o Cygwin X com startxwin (.exe). Meu arquivo .startxwinrc é o seguinte:

X :0 -rootless mrxvt  -geometry  +1+1  -n  login  -display  :0 -tt ImTabbed

Até agora, deu certo. O único erro que recebo diz respeito à exibição ainda estar "aberta" por outro processo X. Este erro especifica um determinado arquivo que o servidor X gera por padrão para cada sessão. O pessoal do Cygwin sabe que ele não é excluído quando a sessão termina.

Então, eu escrevi um apelido para "curar" isso:

alias freex='rm /tmp/.X0-lock'

Eu coloquei a mesma linha - a parte entre as aspas, pelo menos - nos meus arquivos .bashrc e .bash_profile, caso eu devesse esquecer de fazer isso sozinho.

HTH.

BZT

SilversleevesX
fonte
Esta não é realmente uma resposta para esta pergunta; com a reformulação, poderia ser, mas acho que isso seria mais adequado como uma pergunta e resposta separadas (como fiz aqui) sobre como lidar com o erro que você está vendo. Em seguida, você pode vincular a essa pergunta nos comentários deste.
me_and