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


19

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

Respuestas:


22

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

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

ctrl+ a, "le dará una lista de todas sus ventanas abiertas.

El uso de estos atajos sencillos le permitirá cambiar entre diferentes terminales de manera muy rápida y fácil, logrando su objetivo sin usar 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 es necesario que recuerde 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 (vea la página de manual o busque en google "gnu screen hardstatus").

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

Aquí hay una pareja 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


2

Sí, screenes muy probable que sea el camino a seguir. Ctrl+ a, nlo llevará a la siguiente ventana, Ctrl+ a, pa la anterior. Ctrl+ a, 0.. 9le permitirá cambiar a una pantalla en particular.


Puede configurar combinaciones de teclas mucho más rápidas, como F11 para la anterior, F12 para la siguiente ventana. Y cambie el carácter de escape de la pantalla ^aa otra cosa, por lo que no es ridículamente molesto usar la edición de líneas de estilo emacs en bash, cualquier otra cosa. Yo uso ^t.
Peter Cordes

1

Lo que dicen los demás es correcto. Sólo quiero mencionar tmuxes una alternativa a screen. Tienen comandos muy similares.

Ambos screeny tmuxofrecen múltiples ventanas para una sesión en ejecución, y esto es probablemente lo que desea. tmuxademás ofrece saltos entre varias sesiones (cada una con sus propias ventanas). Necesitarías eso muy raramente.

Aquí hay algunos enlaces a la documentación de la pantalla y un curso intensivo sobre tmux .


1

Después de tanto tiempo, hice un script para solucionar esta característica que faltaba por completo. Antes que nada necesita un fifo:

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

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

Archivo sc (en $ PATH):

#!/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 desea iniciar el tipo de pantalla:

sc Monitor

u otra sesión que quieras inventar, yo uso el trabajo de sesión 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 tubería nombrada. En consecuencia, el primer script sc avanza y adjunta la sesión "Trabajo".
El sc invocado desde la sesión Monitor se cierra.

Cuando separamos todas las sesiones, estamos en un bucle infinito, así que tenemos que hacer Ctrl-c para salir.


1

Puede hacer esto con un simple script de shell 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 vamos a aislar las pantallas separadas usando grep.

    screen -ls | grep Detached
    

Deberías obtener 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á solo 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. Afortunadamente, el resultado está bien estructurado y delimitado por tabuladores. Ahora vamos a dividir las columnas en campos y elegir el segundo campo usando cut.

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

Deberá presionar la ctrl+vpestaña y luego insertar un tabparámetro después del delimitador -d. Los resultados deberían ser así.

81592.data13
81586.data12
81574.data10
81580.data11
  1. Ahora empaque esto en un comando usando las ...comillas y repita los resultados de esta manera. Compruebe siempre los comandos formulados primero antes de ejecutarlo realmente. 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 él echo.

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

Feliz proyección !!


Esta es una respuesta REALMENTE agradable y aumenta la calidad general de este sitio.
123456789123456789123456789

1

Escribí un script de nodo para permitir al usuario seleccionar la sesión de pantalla para adjuntar desde una lista, usando las teclas de flecha. Lo hice un paquete npm. Puedes verlo aquí: comando de pantalla . O simplemente npm i -g screen-commandpara probarlo, suponiendo que ya tenga node.js instalado. Después de instalar el paquete, use el comando scpara invocar la lista de pantallas.

Espero que esto facilite el cambio a la pantalla exacta que deseas.

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.