¿Cómo evito que el servidor XWin de Cygwin inicie xterm automáticamente?


12

Cada vez que inicio el servidor X de Cygwin usando el enlace "Servidor XWin" en mi menú Inicio, o ejecutándome startxwindesde un shell de Cygwin, automáticamente aparece una ventana xterm, que no quiero ni necesito.

¿Cómo evito eso?

(Pregunta inspirada en este comentario de Stijn Vanpoucke sobre Stack Overflow)

Respuestas:


5

Parece que el comportamiento de startxwin ha cambiado desde que @me_y originalmente respondió a la pregunta, por lo que simplemente crear un .startxwinrc vacío en su directorio de inicio ya no funcionará.

Encontré una respuesta aquí . En esencia, cuando el último comando en .startxwinrc se cierra, el servidor se cerrará. Si desea evitar eso, puede poner esto como la última línea en su .startxwinrc:

sleep inf

Esto no iniciará ningún programa cliente, pero también evitará que .startxwinrc salga.


1
Por alguna razón, esto no funciona para mí. Tuve que escribir: exec sleep infinitycomo se muestra aquí: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero

17

ACTUALIZACIÓN : Esta respuesta ahora está desactualizada. Para obtener una respuesta actualizada, consulte la respuesta del usuario 551570 a continuación .

De man startxwin:

Si no se proporciona un programa de cliente específico en la línea de comando, startxwinbuscará un archivo en el directorio de inicio del usuario llamado .startxwinrcpara ejecutarse como un script de shell para iniciar programas de cliente. Si no existe tal archivo, startxwinutilizará lo siguiente como predeterminado:

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

Por lo tanto, para evitar que cualquier programa se inicie cuando inicia el servidor X, desea un .startxwinrcarchivo en blanco . Simplemente ejecute lo siguiente desde un indicador de Cygwin:

touch ~/.startxwinrc

1
Esta solución fue buena durante mucho tiempo, pero ahora con la última actualización no lo es. El uso de un .startxwinrcresultado vacío en la desaparición inmediata del servidor X. :-(
Notinlist

1
@Notinlist Así es. Eso es un poco triste. Trataré de investigar y encontrar una nueva solución; parece que el sistema es algo más complicado ahora, y no puedo entender trivialmente cómo se supone que debe funcionar ...
yo_y el

3

A partir de noviembre de 2014 , las últimas versiones de startxwinuso xinitpara iniciar el servidor Cygwin / X, que en realidad se llama XWin.exe. El proceso es algo como esto:

  1. Llama startxwin
  2. startxwincrea un nuevo .Xauthorityarchivo y uno llamado .serverauth.1234(donde 1234cambia cada vez que inicia X)
  3. startxwin configura algunos parámetros de cliente y servidor
  4. startxwinllamadas xinitcon los parámetros del cliente y el servidor, incluidos algunos scripts de shell opcionales y una referencia al archivo de autenticación.
  5. xinit inicia el servidor X, ejecutando algunos de los scripts rc
  6. xinitinicia el cliente (generalmente xterm) o el script rc del cliente. Queremos evitar esto
  7. Cuando cierra el cliente o finaliza el script rc del cliente, xinitapaga el servidor X. Si evitamos el paso 6, también debemos evitarlo.

Es posible ejecutar XWin.exedirectamente desde un shell de inicio de sesión Bash, sin las tareas que lo rodean startxwiny xinitrealizar. La principal ventaja de esto es que se comporta como queremos: el servidor X se inicia y sigue ejecutándose. Desafortunadamente, dado que no se pasa ningún .Xauthorityarchivo durante el inicio, su servidor X permitiría que cualquier proceso local se conecte a él, lo cual es inseguro.

Afortunadamente, es lo xinitque hace la mayoría de las cosas que no queremos. Hay un truco rápido que omite xinitpero mantiene los elementos restantes startxwinrelacionados con el servidor en sí.

TL; DR: En startxwin, hay una línea cerca de la parte inferior que dice:

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

Cambia esa línea a:

eval \"$server\" $display $serverargs

A partir de ahora, el startxwinscript llamará XWin.exedirectamente, en lugar de llamar xinit. Obviamente, esto deshabilitará los scripts de cliente rc, pero no queríamos esos en primer lugar. También significa que X continuará ejecutándose sin necesidad de un proceso de cliente para mantenerlo vivo (es decir, evitar xinitmatarlo).


0

Me he acostumbrado a iniciar Cygwin X con startxwin (.exe). Mi archivo .startxwinrc dice lo siguiente:

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

Hasta ahora, ha funcionado. El único error que obtengo se refiere a que la pantalla todavía está "abierta" por otro proceso X Este error especifica un determinado archivo que el servidor X genera de forma predeterminada para cada sesión. La gente de Cygwin es consciente de que no se elimina cuando finaliza la sesión.

Entonces escribí un alias para "curar" que:

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

Pongo la misma línea, la parte entre comillas, en cualquier caso, en mis archivos .bashrc y .bash_profile en caso de que me olvide de hacerlo yo mismo.

HTH

BZT


Esto no es realmente una respuesta a esta pregunta; con una nueva redacción podría ser, pero creo que esto sería más adecuado como una pregunta y respuesta por separado (como hice aquí) sobre cómo manejar el error que está viendo. Luego puede vincular a esa pregunta en los comentarios a esta.
yo_y
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.