¿Cómo verificar si estoy en sesión de pantalla?

75

¿De alguna manera es posible verificar si estoy ahora en sesión de pantalla? Lo necesito para determinar si presionar ctrl + d me desconectaría del servidor o simplemente cerraría la pantalla actual. Gracias.

wlk
fuente

Respuestas:

107

Puede mirar la $STYvariable (una variable establecida por el comando de pantalla ). Si no es "", entonces está en una sesión de pantalla.

Estoy en pantalla

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

No estoy en pantalla

$ echo $STY

$
Iain
fuente
12
Esto supone que todavía está dentro de una sesión en ejecución en la computadora local. Si inicia la pantalla y luego SSH en otro lugar, esto no funcionará.
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
agregado1166877
2
@DavidMackintosh si estás en SSH en otro lugar, presionar ctrl-D "me desconectará del servidor", que es exactamente de lo que se trata la pregunta.
womble
1
@ agregate1166877 Tengo esto si publicaste como un alias en cada máquina que uso ahora.
Eduardo Bezerra
44

Puedes mirar la variable $ TERM.

echo $TERM

Si es una screensesión, el término variable debería devolver "pantalla".

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (para salir de la pantalla)

root@deore:/volumes# echo $TERM
xterm

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

ewwhite
fuente
44
Esto supone que no está jugando deliberadamente con su valor de TERM por alguna razón.
David Mackintosh
1
Si está cambiando su variable TERM mientras está dentro de la pantalla, está invitando a todo tipo de problemas.
womble
Bueno, mis nodos Solaris 2.6 no funcionan bien con los valores de TERM establecidos en valores de pantalla.
David Mackintosh
3
"$TERM" = "screen"parece conservarse al ingresar al sudoentorno, a diferencia de la $STYopción.
Melebius
29

A menos que haya cambiado las combinaciones de teclas predeterminadas, puede hacer Ctrl+ a-> Ctrl+ t, que mostrará la hora, si está en la pantalla. Esto funcionará incluso si tiene ssh: d en otro lugar, a diferencia de las otras sugerencias.

Gurgeh
fuente
44
¿Por qué no estamos votando esto?
AndreKR
Esta es definitivamente la mejor solución aquí.
Felix Jen
2
@womble Si está en un programa desconocido que puede hacer cosas destructivas al azar como respuesta a secuencias de teclas y comandos, entonces nada es seguro.
Gurgeh
2
@AndreKR: No funciona en un guión
Frank Meulenaar
1
No estoy votando porque en una pantalla y en otra pantalla, y literalmente necesito ver si $ STY está configurado. que por alguna razón está volviendo vacía.
Brian Thomas
14

El captioncomando en el ~/.screenrces una buena manera de diferenciar una sesión de pantalla.

Personalmente estoy usando esto:

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

Agrega una línea como esta en la parte inferior de la pantalla:

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

Con la primera parte (nombre del sistema + carga) en verde y la fecha en rosa. ¡Útil y difícil de perder!

Gaëtan Lehmann
fuente
¡Esto es perfecto! No se interpone en el camino (posición inferior), siempre está visible (y en color) y proporciona información útil sobre el sistema.
Publiqué
6

He encontrado otra solución:
modificar su .screenrc, por lo que mi sesión de pantalla se ve completamente diferente de la terminal normal.

wlk
fuente
Creo que sé lo que estás sugiriendo, y en algunas situaciones podría evitar este problema por completo. Puede ser más útil si describe lo que quiere decir mostrando (por ejemplo) un .screenrcarchivo de ejemplo .
jvriesem
0
screen -ls

para ver tus sesiones y

screen -r sessioninfo

para reconectarse a uno desconectado, si está separado.

screen -D -r sessioninfo

para volver a conectar a uno desconectado.

Kevin
fuente
1
Esto no responde la pregunta.
womble
-1

Hacer un screen -ls. Va a indicar explícitamente Attachedversus Detachedestado.

Ejemplo adjunto:

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

Ejemplo separado:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)
Marcus Junius Brutus
fuente
66
Si hay pantallas adjuntas en otro lugar, esto podría ser un problema.
Dennis Nolte