Come posso impedire che XWin Server di Cygwin avvii automaticamente xterm?


12

Ogni volta che avvio il server X di Cygwin utilizzando il collegamento "XWin Server" nel menu Start o eseguendo startxwinda una shell Cygwin, viene automaticamente visualizzata una finestra xterm, che non desidero né mi serve.

Come posso evitarlo?

(Domanda ispirata da questo commento di Stijn Vanpoucke su Stack Overflow)

Risposte:


5

Sembra che il comportamento di startxwin sia cambiato da quando @me_ e originariamente ha risposto alla domanda, quindi la semplice creazione di un .startxwinrc vuoto nella directory home non funzionerà più.

Ho trovato una risposta qui . In sostanza quando termina l'ultimo comando in .startxwinrc, il server verrà chiuso. Se vuoi impedirlo, puoi inserirlo come ultima riga nel tuo .startxwinrc:

sleep inf

Ciò non avvierà alcun programma client, ma impedirà anche la chiusura di .startxwinrc.


1
Per qualche motivo questo non funziona per me. Ho dovuto digitare: exec sleep infinitycome mostrato qui: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero

17

AGGIORNAMENTO : questa risposta non è più aggiornata. Per una risposta aggiornata, vedere la risposta dell'utente551570 di seguito .

Da man startxwin:

Se nella riga di comando non viene fornito alcun programma client specifico, startxwincercherà un file nella directory home dell'utente chiamato .startxwinrcda eseguire come script shell per avviare i programmi client. Se non esiste un file simile, startxwinverrà utilizzato come predefinito:

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

Pertanto, per evitare l'avvio di qualsiasi programma all'avvio di X Server, si desidera un .startxwinrcfile vuoto . Basta eseguire quanto segue da un prompt di Cygwin:

touch ~/.startxwinrc

1
Questa soluzione è stata valida per molto tempo, ma ora con l'ultimo aggiornamento non lo è. L'uso di un valore vuoto .startxwinrccomporta l'immediata scomparsa dell'X server. :-(
Notinlist

1
@Notinlist Così fa. È un po 'triste. Proverò a indagare e troverò una nuova soluzione; sembra che il sistema sia un po 'più complicato ora, e non riesco a capire banalmente come dovrebbe funzionare ...
me_e il

3

A partire da novembre 2014 , le ultime versioni di startxwinutilizzo xinitper avviare il server Cygwin / X, che in realtà viene chiamato XWin.exe. Il processo procede in questo modo:

  1. Chiami startxwin
  2. startxwincrea un nuovo .Xauthorityfile e uno chiamato .serverauth.1234(dove 1234cambia ogni volta che si avvia X)
  3. startxwin imposta alcuni parametri client e server
  4. startxwinchiama xinitcon i parametri client e server, inclusi alcuni script shell opzionali e un riferimento al file auth.
  5. xinit avvia il server X, eseguendo alcuni degli script rc
  6. xinitavvia il client (di solito xterm) o lo script client rc. Vogliamo evitare questo
  7. Quando si chiude il client o lo script client rc termina, xinitsi arresta il server X. Se evitiamo il passaggio 6, dobbiamo anche evitare questo

È possibile eseguire XWin.exedirettamente da una shell di login Bash, senza i compiti circostanti che startxwine xiniteseguono. Il vantaggio principale di questo è che si comporta come vogliamo: il server X si avvia e rimane in esecuzione. Sfortunatamente, poiché non è stato .Xauthoritypassato alcun file durante l'avvio, il tuo server X consentirebbe a qualsiasi processo locale di connettersi ad esso, il che non è sicuro.

Fortunatamente è xinitquello che fa la maggior parte delle cose che non vogliamo. C'è un trucco rapido che ignora xinitma mantiene gli elementi rimanenti startxwinrelativi al server stesso.

TL; DR: In startxwin, c'è una riga vicino al fondo che dice:

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

Cambia quella riga in:

eval \"$server\" $display $serverargs

D'ora in poi, lo startxwinscript chiamerà XWin.exedirettamente, anziché chiamare xinit. Ovviamente questo disabiliterà qualsiasi script client rc, ma non li volevamo in primo luogo. Significa anche che X continuerà a funzionare senza che sia necessario un processo client per mantenerlo in vita (ovvero evitare xinitdi ucciderlo).


0

Ho preso l'abitudine di avviare Cygwin X con startxwin (.exe). Il mio file .startxwinrc è il seguente:

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

Finora ha funzionato. L'unico errore che vedo riguarda il fatto che il display è ancora "aperto" da un altro processo X. Questo errore specifica un determinato file che il server X genera per impostazione predefinita per ogni sessione. Le persone di Cygwin sono consapevoli che non viene eliminato al termine della sessione.

Quindi ho scritto un alias per "curare" che:

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

Ho messo la stessa riga - la parte tra le virgolette, in ogni caso - nei miei file .bashrc e .bash_profile nel caso dovessi dimenticare di farlo da solo.

HTH.

BZT


Questa non è davvero una risposta a questa domanda; con la riformulazione potrebbe essere, ma penso che questo sarebbe più adatto come una domanda e risposta separata (come ho fatto qui) sulla gestione dell'errore che stai vedendo. È quindi possibile collegare a tale domanda nei commenti a questo.
io_e il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.