¿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.

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

$

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


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.


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!


¡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.


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.


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)

66
Si hay pantallas adjuntas en otro lugar, esto podría ser un problema.
Dennis Nolte
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.