Comment empêcher le serveur XWin de Cygwin de démarrer automatiquement xterm?

12

À chaque démarrage du serveur X de Cygwin à l'aide du lien "Serveur XWin" de mon menu Démarrer ou à startxwinpartir d'un shell Cygwin, une fenêtre xterm apparaît automatiquement, ce que je ne veux ni n'ai besoin.

Comment puis-je éviter cela?

(Question inspirée par ce commentaire de Stijn Vanpoucke à propos de Stack Overflow)

moi et
la source

Réponses:

5

Il semble que le comportement de startxwin ait changé depuis @me_ et que, à l'origine, il répondait à la question. Il ne suffit donc pas de créer un .startxwinrc vide dans votre répertoire personnel.

J'ai trouvé une réponse ici . En substance, lorsque la dernière commande de .startxwinrc se ferme, le serveur se ferme. Si vous voulez empêcher cela, vous pouvez mettre ceci comme dernière ligne de votre .startxwinrc:

sleep inf

Cela ne démarrera aucun programme client, mais empêchera également .startxwinrc de se fermer.

utilisateur551570
la source
1
Pour une raison quelconque, cela ne fonctionne pas pour moi. Il me fallait taper: exec sleep infinitycomme indiqué ici: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero le
17

MISE À JOUR : Cette réponse est maintenant obsolète. Pour une réponse à jour, voir la réponse de l'utilisateur551570 ci-dessous .

De man startxwin:

Si aucun programme client spécifique n'est indiqué sur la ligne de commande, startxwinun fichier figurant dans le répertoire de base de l'utilisateur est appelé .startxwinrcpour s'exécuter en tant que script shell afin de démarrer les programmes client. Si aucun fichier de ce type n'existe, startxwinutilisera par défaut les éléments suivants:

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

Par conséquent, pour éviter tout programme démarrant lorsque vous démarrez le serveur X, vous souhaitez un .startxwinrcfichier vide . Il suffit d’exécuter ce qui suit à partir d’une invite Cygwin:

touch ~/.startxwinrc
moi et
la source
1
Cette solution était bonne pendant longtemps, mais maintenant, avec la dernière mise à jour, elle ne l’est plus. L'utilisation d'un vide .startxwinrcentraîne la disparition immédiate du serveur X. :-(
Notinlist
1
@Notinlist Donc, c'est le cas. C'est un peu triste. Je vais essayer de rechercher et de trouver une nouvelle solution; il semble que le système soit un peu plus compliqué maintenant, et je ne peux pas trivialement comprendre comment il est censé fonctionner…
me_and
3

A partir de Novembre 2014 , les dernières versions de l' startxwinutilisation xinitpour démarrer le serveur Cygwin / X, qui est en fait appelé XWin.exe. Le processus ressemble à ceci:

  1. Tu appelles startxwin
  2. startxwincrée un nouveau .Xauthorityfichier et un appelé .serverauth.1234(où 1234change à chaque démarrage de X)
  3. startxwin configure certains paramètres du client et du serveur
  4. startxwinappels xinitavec les paramètres client et serveur, y compris certains scripts shell facultatifs et une référence au fichier auth.
  5. xinit démarre le serveur X en exécutant certains des scripts rc
  6. xinitdémarre le xtermscript client (généralement ) ou client rc. Nous voulons éviter cela
  7. Lorsque vous fermez le client ou que le script client rc est terminé, xinitarrêtez le serveur X. Si nous évitons l’étape 6, nous devons également éviter cela.

Il est possible d'exécuter XWin.exedirectement à partir d'un shell de connexion Bash, sans les tâches qui entourent startxwinet xinitexécutent. Le principal avantage de cela est qu’il se comporte comme nous le souhaitons: le serveur X démarre et reste actif. Malheureusement, aucun .Xauthorityfichier n’ayant été transmis au démarrage, votre serveur X permettrait à tout processus local de s'y connecter, ce qui n’est pas sécurisé.

Heureusement, c'est ce xinitqui fait la plupart des choses que nous ne voulons pas. Il y a un piratage rapide qui contourne xinitmais garde les éléments restants startxwinqui sont liés au serveur lui-même.

TL; DR: Dans startxwin, il y a une ligne vers le bas qui se lit comme suit:

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

Changer cette ligne à:

eval \"$server\" $display $serverargs

A partir de maintenant, le startxwinscript appellera XWin.exedirectement plutôt que d'appeler xinit. Évidemment, cela désactivera tous les scripts rc client, mais nous ne les voulions pas au départ. Cela signifie également que X continuera à fonctionner sans recourir à un processus client pour le maintenir en vie (c.-à- xinitd. Ne pas le tuer).

Ethan T
la source
0

J'ai pris l'habitude de démarrer Cygwin X avec startxwin (.exe). Mon fichier .startxwinrc se lit comme suit:

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

Jusqu'ici, ça a fonctionné. La seule erreur que je reçois concerne l'affichage toujours "ouvert" par un autre processus X. Cette erreur spécifie un certain fichier que le serveur X génère par défaut pour chaque session. Les utilisateurs de Cygwin savent qu’il ne sera pas supprimé à la fin de la session.

Alors j'ai écrit un alias pour "guérir" que:

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

Je mets la même ligne - la partie entre les guillemets, en tout cas - dans mes fichiers .bashrc et .bash_profile au cas où j'oublierais de le faire moi-même.

HTH.

BZT

SilversleevesX
la source
Ce n'est pas vraiment une réponse à cette question; avec une reformulation possible, mais je pense que cela conviendrait mieux en tant que question et réponse distinctes (comme je l’ai fait ici) sur le traitement de l’erreur que vous constatez. Vous pouvez ensuite créer un lien vers cette question dans les commentaires de celui-ci.
me_and