Cambiar rápidamente entre sesiones virtuales (¿pantalla?)

Cambiar rápidamente entre sesiones virtuales (¿pantalla?)

Me gustaría tener algunas sesiones virtuales en una ventana de PuTTY y cambiar entre ellas rápidamente. ¿Cuál es la mejor manera de hacer eso? screen? Sé que puedo desconectarme ctrl+ady luego volver a conectarme a una sesión diferente, pero parece mucho escribir.

Respuesta1

Solo para ampliar lo que dijo Ansgar en caso de que no esté muy familiarizado con gnu screen, tener múltiples "ventanas" en una sola sesión de pantalla probablemente logrará lo que necesita.

ctrl+ a, ccreará una nueva "ventana" en su sesión de pantalla activa. Puede cambiar entre varias ventanas (como indicó Ansgar) con ctrl+ a, npara la siguiente ventana, y ctrl+ a, ppara la ventana anterior.

ctrl+ a, "te dará una lista de todas tus ventanas abiertas.

El uso de estos sencillos atajos le permitirá cambiar entre diferentes terminales de forma muy rápida y sencilla, logrando su objetivo sin utilizar múltiples sesiones de pantalla.

Si agrega la siguiente línea a ~/.screenrc, siempre mostrará sus ventanas abiertas y cuál está seleccionada, por lo que no necesita recordar en qué ventana se encuentra.

hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'

Esta es la línea hardstatus que me gusta usar, pero es completamente personalizable (consulte la página de manual o busque en Google "gnu screen hardstatus").

Hay muchas otras cosas que puedes hacer con él (por ejemplo, nombrar las diferentes ventanas abiertas), por lo que vale la pena leer algunos tutoriales.

Aquí hay un par que encontré con una búsqueda rápida:

http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml

http://www.ibm.com/developerworks/aix/library/au-gnu_screen/

Y por supuesto el más útil de todos:

# From your terminal:
$ man screen

Espero que ayude.

Mateo

Respuesta2

Sí, screenlo más probable es que sea el camino a seguir. Ctrl+ a, nte llevará a la siguiente ventana, Ctrl+ a, pa la anterior. Ctrl+ a, 0.. 9le permitirá cambiar a una pantalla en particular.

Respuesta3

Después de tanto tiempo, creé un script para solucionar esta característica que faltaba por completo. En primer lugar, necesita un quince:

mkdir ~/.screen
mkfifo ~/.screen/pipe

Esta canalización con nombre es útil para la comunicación entre la sesión desconectada y la sesión "principal sin pantalla".

ArchivoCarolina del Sur(en $RUTA):

#!/bin/bash
CONFIGFILE=~/.screen/"$1""rc"

if [ ! -r $CONFIGFILE ] ; then
   echo "Configurazione per $1 Assente" >&2
   exit 1
fi

exec 3<> ~/.screen/pipe

if [ "$STY" != "" ] ; then
   screen -d "$STY"
   echo "$1" >&3
else
   screen -r "$1" 2>/dev/null || screen -S "$1" -c $CONFIGFILE
   while true ; do
      read line <&3
      screen -r "$line" 2>/dev/null || screen -S "$line" -c ~/.screen/"$line""rc"
   done
fi

Un ejemplo de un "CONFIGFILE" es: ~/.screen/Monitorrc

layout new Monitor

screen -t "bash" bash --login
split -v
focus next
split 
focus bottom
screen -t "cv" sh -c "watch /usr/bin/cv -w"
split
focus bottom
screen -t "sys.log" sh -c "tail -F /var/log/sys.log"
focus up
focus up
resize 25
screen -t "top" sh -c "top"
focus left

El resultado es: cuando quieras iniciar la pantalla, escribe:

sc Monitor

u otro sessionrc que te guste inventar, uso el Session Work para varias cosas

Ej: ~/.screen/Workrc

layout new Work  
screen -t "bash" bash --login  

Ahora estamos en el Monitor de Sesión, cuando escribimos:

sc Work

el Monitor de sesión se separa y escribe "Trabajo" en la canalización con nombre. En consecuencia, el primer script sc avanza y adjunta la sesión "Trabajo".
El sc invocado desde el cierre del Monitor de sesión.

Cuando desconectamos todas las sesiones, estamos en un bucle infinito, por lo que tenemos que presionar Ctrl-c para salir.

Respuesta4

Puedes hacer esto con un script de shell simple como

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. Supongamos que tiene pocas pantallas abiertas. Supongamos también que los tiene categorizados como trabajo y datos.

    for i in {10..13}; do screen -S `printf data%02d $i`; done;
    for i in {0..5}; do screen -S `printf work%02d $i`; done;
    ...
    
  2. Al aplicar screen -ls, deberías tener tus pantallas así.

    There are screens on:
        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81607.ttys014.Mo    (Attached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
    12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
    
  3. Ahora aislemos las pantallas separadas usando grep.

    screen -ls | grep Detached
    

Deberías conseguir algo como esto

        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
  1. Ahora seleccionemos los que desee (por ejemplo, datos), nuevamente usando grep.

    screen -ls | grep Detached | grep data
    

Esto aislará sólo las pantallas de datos. Puede cambiar la palabra clave grep con expresiones regulares para buscar y personalizar su búsqueda.

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. Por suerte, el resultado está bien estructurado y delimitado por tabulaciones. Ahora dividamos las columnas en campos y elijamos el segundo campo usando cut.

    screen -ls | grep Detached | grep data | cut -d'       ' -f2
    

Deberá presionar ctrl+vy luego tab para insertar un tabdespués del parámetro delimitador -d. Los resultados deberían ser así.

81592.data13
81586.data12
81574.data10
81580.data11
  1. Ahora empaquete esto en un comando usando las ...comillas y recorra los resultados de esta manera. Siempre verifique primero los comandos formulados antes de ejecutarlos. solíaecho screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. Si todo va bien, pruébalo sin echo.

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. Listo. Cada pantalla de la que te separas te lleva a la siguiente.

¡¡Feliz proyección!!

información relacionada