Récemment, j'ai mis xset b off
mon .bashrc. Maintenant, je suis ennuyé par l'erreur qui apparaît lorsque je me connecte via tty ou via ssh, c'est-à-dire en dehors de la session X.
La première chose qui m'est venue à l'esprit était [[ -z "$SOME_VAR" ]] && xset b off
(eh bien, il s'avère que tester la variable définie par rapport à être vide est une question différente). Mais quel SOME_VAR est le bon?
J'ai donc différencié la set
sortie de tty et la sortie d'urxvt set
pour voir quelles variables sont définies dans X et manquantes dans tty. Comme prévu, il y a eu beaucoup de différences (en ne listant que celles qui me semblaient pertinentes):
DESKTOP_SESSION
DISPLAY
GDMSESSION
SESSION_MANAGER
WINDOWID
WINDOWPATH
XAUTHORITY
XDG_SESSION_COOKIE
XDG_CONFIG_DIRS
XDG_DATA_DIRS
XDG_MENU_PREFIX
Laquelle est la plus correcte et la plus universelle à tester pour détecter si je suis en session X ou non? Quelque chose qui fonctionnerait sur autant de distributions et de plateformes et d'environnements de bureau que possible?
Ou existe-t-il un meilleur moyen que de tester les variables d'environnement?
la source
ssh -X
; fonctionne bien!Je pense que la vérification
DISPLAY
serait la meilleure approche.la source
DISPLAY
, ou supprimerais simplement le message d'erreur en général. Donnez de l'/dev/null
amour de temps en temps.ssh
s simples jusqu'à présent, quand j'ai commencé à le fairessh -X
--- pour pouvoir utiliser Vim sur ssh afin que le contenu sélectionné par le mode visuel parvienne au presse-papiers X local, pour lequel vous n'avez pas besoin de xserver côté serveur. DISPLAY est donc défini comme un simple effet d'activation du transfert, même si xserver et xset ne sont pas présents.if [[ $DISPLAY ]]; then … fi
DISPLAY
variable peut pointer vers un affichage qui n'a pas réellement de serveur X en cours d'exécution (par exemple, lorsqu'il est codé en dur dans un script ou que le serveur X a été arrêté après la définition de la variable).J'utilise généralement la
TERM
variable pour tester X dans mes scripts.TERM
est généralement réglélinux
sur TTY etxterm
sur X.J'utilise ici le mot "habituellement", car des applications comme GNU Screen et TMux semblent jouer avec la
TERM
variable.la source
echo $TERM
de découvrir le paramètre richt sur votre mashine dans différentes consoles. J'utilise[ $TERM == "linux" ] && echo do some stuff
sur UbuntuCela devrait parfaitement fonctionner:
http://tldp.org/LDP/abs/html/fto.html
Donc, lorsque cela est évalué à false (
[ ! -t 0 ]
), nous sommes dans un environnement GUI.la source
[ -t 0 ]
et[ -t 1 ]
sont tous les deux vrais.[ -t 0 ]
fonctionne bien sur la console dans Ubuntu (en utilisant CTRL ALT F1)Il y a plusieurs façons de procéder.
En bash, essayez
Ou, en zsh, essayez
la source
echo 1
si X est en cours d'exécution et que vous vous connectez via tty1-6 ou ssh. L'autre fait toujours du "non-X" - je pense que cela${CURRENT_VT[6]}
signifie plutôt 6ème ligne que 6ème caractère.zsh
) et éventuellement faire quelques modifications si vous l'aimez, pour le faire fonctionner en bash..zshrc
et recherchezexport VT
. J'utilise la variable pour contenir dans quel Linux VT / console / tty je suis (pour l'invite zsh) mais dans X, je le mets juste à "X" (mais pas un VT). Mais ce sont des détails, vous pouvez le calculer comme vous le souhaitez dans bash en utilisant le même principe.if [[ $DISPLAY ]]
Sur le même ordinateur,
$DISPLAY
on reviendra par exemple0:0
dans un émulateur de terminal, mais rien dans un vrai terminal. Cela peut facilement être testé avec CtrlAltF1versus CtrlAltF7.Une
bash
condition basée sur$DISPLAY
se présenterait comme suit:la source