bashrc: comment savoir si la fenêtre X est disponible ou non?


10

Il y a une partie dans my ~/.bashrc, qui définit $ EDITOR comme gvim. Cela fonctionne bien lorsque je suis dans la fenêtre X. Cependant, si je ssh vers mon poste de travail (à partir d'un autre poste de travail), gvim commence à se plaindre "ne peut pas ouvrir l'affichage".

Par conséquent, je souhaite mettre une ifdéclaration dans bashrc, que si la fenêtre X est disponible, utilisez alors gvim, sinon laissez-le être vim.

Comment pourrais-je y parvenir?

Réponses:


11

Une façon de procéder teste l'existence de la variable d'environnement DISPLAY:

if [ "$DISPLAY" ]
then
    EDITOR=gvim
else
    EDITOR=vim
fi

Dans certains cas, DISPLAY sera défini même si votre gvim ne pourra pas contacter le serveur X. Dans ces cas, utilisez le programme RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi

if [[ $DISPLAY ]]pour les aficionados du double bracket
Serge Stroobandt

7

La $DISPLAYvariable d'environnement doit être définie sur quelque chose si vous êtes dans X et désactivée si vous n'êtes pas connecté à un écran.

Vous pouvez donc utiliser ceci:

if [ -n "$DISPLAY" ]; then
    alias vim='gvim'
else
    alias vim='vim'
fi

Mais il y a une autre solution. Cela s'appelle le transfert ssh X.

Courir

ssh -X yourworkstation

vous pouvez ensuite exécuter vim sur une machine sur laquelle vous êtes connecté, et il s'affichera sur la machine sur laquelle vous exécutez X.


3

Mettez ceci dans votre .bashrc:

if [ -z "${DISPLAY:-}" ]; then
  EDITOR='vim'
else
  EDITOR='gvim'
fi

1

Bien que ce ne soit pas une réponse à votre question, j'ai pensé qu'il serait peut-être utile de souligner que si vous utilisez un poste de travail exécutant X * vers un autre poste de travail, vous pouvez réellement utiliser gvim si vous configurez le transfert X avec ssh. Les informations de la fenêtre seront simplement envoyées sur le réseau et gvim s'affichera comme s'il était exécuté localement.

Ajoutez ce qui suit dans ~ / .ssh / config

Host *
   ForwardX11 yes 

Maintenant, vous pourrez simplement exécuter gvim.

Si votre poste de travail d'origine est Windows et n'exécute pas X, vous pouvez réellement démarrer un serveur X localement à l'aide de Cygwin. Une fois cette configuration effectuée, vous pouvez configurer des clients ssh populaires comme PuTTy pour effectuer le transfert X11, puis gvim apparaîtra dans ce qui semble être une fenêtre native décorée pour Windows.


0

Vérifiez simplement l'une des variables d'environnement que Xorg définit au démarrage, comme XLOCAL qui contient des informations sur la session X11 en cours.


0

J'ai aimé la réponse de garyjohn en utilisant RunningX car il est intelligent sur les variables DISPLAY mauvaises mais non vides.

Mais .. j'aimerais aller mieux. J'utilise souvent des sessions d'écran. Je peux démarrer une session d'écran à la maison, DISPLAY est défini. Ensuite, je viens d'ailleurs, DISPLAY est toujours défini et il s'affiche effectivement ... à la maison! Alors .. alors je vais «exporter $ DISPLAY =». C'est très bien mais puisque cette réponse a déjà été vérifiée et a trouvé une variable DISPLAY valide au moment où .bashrc a initialement exécuté EDITOR serait toujours défini sur gvim.

Je suis venu ici à la recherche d'une solution à un problème similaire, je voulais utiliser yelp pour la navigation dans les pages de manuel X-GUI mais je suis automatiquement redirigé vers la commande man traditionnelle lorsque je n'utilise pas X. D'après ce que j'ai lu ici, j'ai trouvé ceci:

man () {
    if RunningX
    then
        yelp "man:$@";
    else
        /usr/bin/man "$@";
    fi
}

Je pense que pour le problème EDITOR, on pourrait faire quelque chose comme ceci:

EDITOR=vim
vim () {
    if RunningX
    then
        gvim "$@";
    else
        vim "$@";
    fi
}

J'aurais juste posté ça sans la longue histoire mais je ne l'ai pas testée. Je me considère comme un débutant bash. J'ai testé ma 'commande man', ça marche! J'utilise emacs pour mon éditeur, il fait sa propre vérification pour X. Je n'ai même pas installé gvim.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.