Comment vérifier si je suis en session d'écran?

75

est-il possible de vérifier si je suis en train de passer à l'écran? J'en ai besoin pour déterminer si appuyer sur ctrl + d me déconnecterait du serveur ou fermerait simplement l'écran actuel. Merci.

wlk
la source

Réponses:

107

Vous pouvez regarder la $STYvariable (une variable définie par la commande screen ). Si ce n'est pas "" alors vous êtes dans une session d'écran.

Je suis à l'écran

$ echo $STY 
29624.pts-1.iain-10-04
$

Je ne suis pas à l'écran

$ echo $STY

$
Iain
la source
12
Cela suppose que vous êtes toujours dans une session en cours d'exécution sur l'ordinateur local. Si vous démarrez screen puis SSH ailleurs, cela ne fonctionnera pas.
David Mackintosh
2
if test -n "$STY"; then printf "This is a screen session named '$STY'.\n"; else printf "This is NOT a screen session.\n"; fi
aggregate1166877
2
@DavidMackintosh si vous êtes SSH ailleurs, frapper ctrl-D "me déconnectera du serveur", c'est exactement ce que la question demande.
femme
1
@ aggreg1166877 Je l'ai si vous avez posté comme un alias dans chaque machine que j'utilise maintenant.
Eduardo Bezerra
44

Vous pouvez regarder la variable $ TERM.

echo $TERM

S'il s'agit d'une screensession, le terme variable devrait renvoyer "screen".

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (pour quitter l'écran)

root@deore:/volumes# echo $TERM
xterm

Consultez également: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen

ewwhite
la source
4
Cela suppose que vous ne modifiez pas délibérément votre valeur TERM pour une raison quelconque.
David Mackintosh
1
Si vous modifiez votre variable TERM à l'intérieur de l'écran, vous vous exposez à toutes sortes de problèmes.
femme
Eh bien, mes nœuds Solaris 2.6 ne fonctionnent pas bien avec les valeurs TERM définies sur les valeurs d'écran.
David Mackintosh
3
"$TERM" = "screen"semble être préservé en entrant dans l' sudoenvironnement, contrairement à l' $STYoption.
Melebius
29

Sauf si vous avez modifié les raccourcis clavier par défaut, vous pouvez faire Ctrl+ a-> Ctrl+ t, ce qui affichera l'heure si vous êtes à l'écran. Cela fonctionnera même si ssh: d est absent quelque part, contrairement aux autres suggestions.

Gurgeh
la source
4
Pourquoi ne votons-nous pas contre cela?
AndreKR
C'est certainement la meilleure solution ici.
Felix Jen
2
@womble Si vous êtes dans un programme inconnu capable de faire des choses destructives aléatoires en réponse à des séquences de touches et à des commandes, rien n'est sûr.
Gurgeh
2
@AndreKR: Cela ne marche pas dans un script
Frank Meulenaar le
1
je ne vote pas parce que dans un écran et je passe à un autre écran, et j’ai littéralement besoin de voir si $ STY est même défini. qui pour une raison quelconque son retour vide.
Brian Thomas
14

La captioncommande dans ~/.screenrcest un bon moyen de différencier une session d’écran.

J'utilise personnellement ceci:

$ cat ~/.screenrc
caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m}%D %d.%m.%Y %0c"

Il ajoute une ligne comme celle-ci en bas de l'écran:

Screen session on gbook (system load: 1,75 1,74 1,68)                   Lun 05.01.2015 13:01

Avec la première partie (nom du système + charge) en vert et la date en rose. Utile et difficile à manquer!

Gaëtan Lehmann
la source
C'est parfait! Il ne gêne pas (position du bas), il est toujours visible (et coloré) et fournit des informations utiles sur le système. J'ai posté ceci ici aussi stackoverflow.com/a/43571028/2450431
hrvoj3e
6

J'ai trouvé une autre solution:
Modifiez votre .screenrc, de sorte que ma session d'écran est complètement différente de celle d'un terminal normal.

wlk
la source
Je pense que je sais ce que vous suggérez et cela pourrait dans certains cas éviter complètement ce problème. Il serait peut-être plus utile de décrire ce que vous voulez dire en montrant (par exemple) un .screenrcfichier exemple .
jvriesem
0
screen -ls

pour voir vos sessions et

screen -r sessioninfo

pour vous reconnecter à un serveur déconnecté, s'il est déconnecté.

screen -D -r sessioninfo

pour vous reconnecter à un réseau déconnecté.

Kevin
la source
1
Cela ne répond pas à la question.
femme
-1

Faire un screen -ls. Cela va explicitement indiquer le statut Attachedversus Detached.

Exemple ci-joint:

$ screen -ls | grep tached
3132.pts-0.esavo00      (Attached)

Exemple détaché:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)
Marcus Junius Brutus
la source
6
s'il y a des écrans attachés ailleurs, cela pourrait être un problème.
Dennis Nolte