Wie überprüfe ich, ob ich in einer Bildschirmsitzung bin?

75

ist es irgendwie möglich zu überprüfen, ob ich gerade in der Bildschirmsitzung bin? Ich brauche es, um festzustellen, ob das Drücken von Strg + D mich vom Server trennen oder nur den aktuellen Bildschirm schließen würde. Vielen Dank.

wlk
quelle

Antworten:

107

Sie können sich die $STYVariable ansehen (eine Variable, die mit dem Befehl screen festgelegt wurde ). Wenn es nicht "" ist, befinden Sie sich in einer Bildschirmsitzung.

Ich bin auf dem Bildschirm

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

Ich bin nicht auf dem Bildschirm

$ echo $STY

$
Iain
quelle
12
Dies setzt voraus, dass Sie sich noch in einer laufenden Sitzung auf dem lokalen Computer befinden. Wenn Sie den Bildschirm und dann an einer anderen Stelle SSH starten, funktioniert dies nicht.
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 Wenn Sie sich mit SSH an einer anderen Stelle befinden, wird durch Drücken von Strg-D die Verbindung zum Server getrennt. Genau das ist die Frage, nach der Sie gefragt werden.
womble
1
@ aggregate1166877 Ich habe dies, wenn Sie in jeder einzelnen Maschine, die ich jetzt verwende, als Alias ​​gepostet haben.
Eduardo Bezerra
44

Sie können sich die Variable $ TERM ansehen.

echo $TERM

Wenn es sich um eine screenSitzung handelt, sollte der Begriff Variable "screen" zurückgeben.

root@deore:/volumes# echo $TERM
screen

Strg-a-d (um den Bildschirm zu verlassen)

root@deore:/volumes# echo $TERM
xterm

Überprüfen Sie auch: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen

ewwhite
quelle
4
Dies setzt voraus, dass Sie aus irgendeinem Grund nicht absichtlich mit Ihrem TERM-Wert in Konflikt geraten.
David Mackintosh
1
Wenn Sie Ihre TERM-Variable ändern, während Sie sich auf dem Bildschirm befinden, verursachen Sie alle möglichen Probleme.
womble
Nun, meine Solaris 2.6-Knoten spielen mit TERM-Werten, die auf Bildschirmwerte eingestellt sind, nicht gut.
David Mackintosh
3
"$TERM" = "screen"scheint im sudoGegensatz zur $STYOption beim Betreten der Umgebung erhalten zu sein .
Melebius
29

Sofern Sie die Standardtastenbelegung nicht geändert haben, können Sie Ctrl+ a-> Ctrl+ tausführen, um die Uhrzeit anzuzeigen, wenn Sie sich auf dem Bildschirm befinden. Dies funktioniert auch, wenn Sie anderswo ssh: d haben, im Gegensatz zu den anderen Vorschlägen.

Gurgeh
quelle
4
Warum stimmen wir dem nicht zu?
AndreKR
Dies ist definitiv die beste Lösung hier.
Felix Jen
2
@womble Wenn Sie sich in einem unbekannten Programm befinden, das zufällige destruktive Aktionen als Reaktion auf Tastensequenzen und Befehle ausführt, ist nichts sicher.
Gurgeh
2
@AndreKR: Es funktioniert nicht in einem Skript
Frank Meulenaar
1
Ich bin nicht upvoting, weil in einem Bildschirm und Screening in einem anderen Bildschirm, und ich muss buchstäblich sehen, ob $ STY überhaupt gesetzt ist. Aus irgendeinem Grund ist es wieder leer.
Brian Thomas
14

Der captionBefehl in der ~/.screenrcist eine gute Möglichkeit, eine Bildschirmsitzung zu unterscheiden.

Ich persönlich benutze das:

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

Es wird eine Zeile wie die folgende am unteren Rand des Bildschirms hinzugefügt:

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

Mit dem ersten Teil (Systemname + Laden) in Grün und dem Datum in Rosa. Nützlich und schwer zu übersehen!

Gaëtan Lehmann
quelle
Dies ist perfekt! Es kommt nicht in die Quere (untere Position), es ist immer sichtbar (und farbig) und liefert nützliche Informationen über das System. Ich habe dies auch hier gepostet stackoverflow.com/a/43571028/2450431
hrvoj3e
6

Ich habe eine andere Lösung gefunden:
Ändern Sie Ihre .screenrc, so dass meine Bildschirmsitzung völlig anders aussieht als bei normalen Terminals.

wlk
quelle
Ich denke, ich weiß, was Sie vorschlagen, und es könnte in einigen Situationen dieses Problem ganz vermeiden. Es könnte hilfreicher sein, wenn Sie beschreiben, was Sie damit meinen, indem Sie (z. B.) eine Beispieldatei .screenrcanzeigen.
Jvriesem
0
screen -ls

um Ihre Sessions zu sehen und

screen -r sessioninfo

Verbindung zu einem getrennten Teilnehmer wiederherstellen, wenn dieser getrennt ist.

screen -D -r sessioninfo

Verbindung zu einem getrennten Teilnehmer wiederherstellen.

Kevin
quelle
1
Dies beantwortet die Frage nicht.
womble
-1

Mach ein screen -ls. Es wird explizit angeben , im AttachedVergleich zu DetachedStatus.

Beispiel beigefügt:

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

Beispiel abgelöst:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)
Marcus Junius Brutus
quelle
6
Wenn an anderer Stelle Bildschirme angebracht sind, liegt möglicherweise ein Problem vor.
Dennis Nolte