¿Cómo sé que estoy corriendo dentro de una "pantalla" de Linux o no?

60

La "pantalla" se refiere a un programa mencionado en Cómo reconectarse a una sesión ssh desconectada . Esa es una buena instalación.

Pero hay una pregunta que realmente me gustaría saber. ¿Cómo sé si estoy corriendo dentro de una "pantalla"? La diferencia es:

  • En caso afirmativo, sé que puedo cerrar con seguridad la ventana de terminal actual, por ejemplo, cerrar una ventana PuTTY, sin perder mi sesión de shell (Bash, etc.).
  • Si no, sé que tengo que ocuparme de cualquier trabajo pendiente antes de cerrar la ventana del terminal.

Mejor, me gustaría que este estado se muestre en el indicador de PS1 para que pueda verlo en cualquier momento automáticamente.

Jimm Chen
fuente
3
Si usa tmux en lugar de pantalla, obtendrá una pequeña barra de estado por defecto. Son más o menos lo mismo para el uso básico.
Samuel Edwin Ward,
99
Coloca tu tótem sobre la mesa y déjalo girar. Si sigue girando, estás bien. De lo contrario, estás en una pantalla:]
Konerak
También puede usar byobu con pantalla y tmux. Se puede configurar para cargar automáticamente al iniciar sesión y luego presionar la tecla F6 se desconecta y se desconecta.
mp3foley
Posible duplicado de ¿Cómo verificar si estoy en sesión de pantalla?
Andrew Schulman

Respuestas:

88

(Robado de " ¿Cómo puedo saber si estoy en una pantalla? " En StackOverflow y creado por el usuario jho . PD No puede votar por un duplicado en los sitios de StackExchange).

Compruebe $STY. Si es nulo, estás en una terminal "real". Si contiene algo, es el nombre de la pantalla en la que estás.

Si no estás en la pantalla:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

Si estás en la pantalla:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

Si usa tmux en lugar de pantalla, verifique también $TMUX. Para agregar esto a su solicitud, agregue lo siguiente a su ~/.bashrc:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi
Wesley
fuente
2
si ejecuta algo a través de sudoél de forma predeterminada, no heredará las variables de entorno, incluido $STY. Sin embargo, se suele propagado al medio ambiente sudo, así que tal vez sea comprobar si hay o$TERM $STY $TERM=="screen"
rcoup
14

Busque $STYcuál proporciona detalles que screenutiliza para comunicarse consigo mismo; $WINDOWentonces será el screennúmero de ventana actual .

geekosaur
fuente
13

El simple control que suelen utilizar es simplemente pulse Ctrl- a:

  • Si el cursor salta al inicio de la línea , no estoy dentro de una sesión de pantalla.

  • Si no sucede nada , sé que estoy dentro de una sesión de pantalla y que acabo de usar la tecla de control de pantalla. Luego presiono a(salto al comienzo de la línea), w(muestra las ventanas de pantalla actuales) o ejecuto algún otro comando de pantalla "inofensivo" para volver al símbolo del sistema.

(Por supuesto, esto solo funciona si actualmente está ejecutando bash o alguna otra pieza de software que "salta al inicio de la línea" o hace algo equivalentemente inofensivo al presionar Ctrl-a).

Heinzi
fuente
3
Esto solo funciona si su tecla de control de pantalla se deja en Ctrl-a predeterminado, por supuesto.
ShreevatsaR
1
presionar la tecla de control + DD se separaría y terminaría ssh. Puede golpear esa combinación para mayor comodidad
akostadinov
Si bien la respuesta está bien para la pregunta real, este método no es programable.
Nikodemus RIP
7

Bueno, la mayoría de las veces (en ausencia de los intentos de alguien de fastidiar las cosas) TERMse establecerá en screen(o al menos mencionará en screenalguna parte).

La solución fácil al problema es simplemente ejecutar la pantalla en todas partes. No salgas de casa sin ella, digo.

womble
fuente
$TERMTambién típicamente se propaga a través sudo, ¡lo cual es una ventaja!
rcoup
7

Mantengo esto en mi .bashrc:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

No es infalible, pero cada vez que creo una nueva pantalla, pone el número de la ventana en el indicador. Si no estoy corriendo screen, no hay número.

Josh
fuente
3

Tengo una forma aún más genial.

Agregue lo siguiente a su ~ / .screenrc y verá una línea de estado en la parte inferior (que muestra en texto invertido la fecha, la hora y la carga del sistema. Más códigos de escape se encuentran en el enlace de la página del manual a continuación.

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

Fuente esto cuando en una sesión de pantalla con ctrl-a:source ~/.screenrc.

Tengo que agradecer a Kyle Rankin de Linux Journal por esto. Vea su fantástico artículo en http://www.linuxjournal.com/article/10950 . La sección de la página de manual a la que se refiere se puede encontrar en http://www.gnu.org/software/screen/manual/screen.html#String-Escapes .

HankCa
fuente
2

también puede recurrir al árbol de procesos $$para ver si encuentra una instancia de pantalla. la cadena exacta probablemente dependerá de su configuración: en mi cuadro OS X, una zshpantalla interna tiene logincomo padre, SCREENcomo abuelo y screencomo bisabuelo.

Aaron Davies
fuente