Como evitar que o servidor XWin do Cygwin inicie automaticamente o xterm?

12

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

Como evito isso?

(Pergunta inspirada por este comentário por Stijn Vanpoucke no Stack Overflow)

    
por me_and 12.06.2012 / 15:07

4 respostas

5

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

Encontrei uma resposta aqui . Em essência, quando o último comando em .startxwinrc sair, o servidor será encerrado. Se você quiser evitar isso, você pode colocar isso como a última linha no seu .startxwinrc:

sleep inf

Isso não iniciará nenhum programa cliente, mas também impedirá que o .startxwinrc seja encerrado.

    
por 29.01.2015 / 23:02
17

UPDATE : esta resposta está desatualizada. Para obter uma resposta atualizada, consulte a resposta do user551570 abaixo .

De man startxwin :

If no specific client program is given on the command line, startxwin will look for a file in the user's home directory called .startxwinrc to run as a shell script to start up client programs. If no such file exists, startxwin will use the following as a default:

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

Assim, para evitar que qualquer programa seja inicializado quando você iniciar o X Server, você deseja um arquivo .startxwinrc em branco. Basta executar o seguinte a partir de um prompt do Cygwin:

touch ~/.startxwinrc
    
por 12.06.2012 / 15:07
3

A partir de novembro de 2014 , as versões mais recentes de startxwin use xinit para iniciar o servidor Cygwin / X, que na verdade é chamado de XWin.exe . O processo é mais ou menos assim:

  1. Você chama startxwin
  2. startxwin cria um novo arquivo .Xauthority e um chamado .serverauth.1234 (onde 1234 muda cada vez que você inicia o X)
  3. startxwin configura alguns parâmetros de cliente e servidor
  4. startxwin chama xinit com os parâmetros de cliente e servidor, incluindo alguns scripts de shell opcionais e uma referência ao arquivo de autenticação.
  5. xinit inicia o servidor X, executando alguns dos scripts rc
  6. xinit inicia o cliente (geralmente xterm ) ou o script rc do cliente. Queremos evitar isso
  7. Quando você fecha o cliente ou o script rc do cliente é concluído, xinit desliga o servidor X. Se evitarmos o passo 6, também precisamos evitar isso

É possível executar XWin.exe diretamente de dentro de um shell de login do Bash, sem as tarefas próximas que startxwin e xinit executam. A principal vantagem disso é que ele se comporta como queremos: o servidor X é iniciado e permanece em execução. Infelizmente, como não há nenhum arquivo .Xauthority passado durante a inicialização, seu servidor X permite que qualquer processo local se conecte a ele, o que é inseguro.

Felizmente é xinit que faz a maioria das coisas que não queremos. Há um hack rápido que ignora xinit , mas mantém os elementos restantes de startxwin relacionados ao próprio servidor.

TL; DR: Em startxwin , há uma linha na parte inferior que diz:

eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs

Altere essa linha para:

eval \"$server\" $display $serverargs

A partir de agora, o script startxwin chamará XWin.exe diretamente, em vez de chamar xinit . Obviamente, isso desabilitará qualquer script de cliente rc, mas nós não queremos isso em primeiro lugar. Isso também significa que o X continuará em execução sem precisar de um processo do cliente para mantê-lo ativo (isto é, manter xinit de eliminá-lo).

    
por 12.03.2015 / 23:42
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, funcionou. O único erro que recebo diz respeito à exibição ainda estar "aberta" por outro processo X. Esse erro especifica um determinado arquivo que o servidor X gera por padrão para cada sessão. O pessoal do Cygwin sabe que não é deletado 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, de qualquer forma - nos meus arquivos .bashrc e .bash_profile, caso eu esqueça de fazer isso sozinho.

HTH.

BZT

    
por 02.10.2012 / 02:06