it-swarm-es.tech

GNU Guía de supervivencia de pantalla

¿Qué piensan las personas que no solo son las cosas esenciales que necesita saber sobre la excelente utilidad de pantalla, sino las cosas que consideraría valiosas para enseñar a alguien, un principiante, desde cero?

Acabo de presentar a un amigo a Screen y están teniendo dificultades para acostumbrarse. Así que las analogías y los consejos prácticos para recordar enlaces, etc. serían impresionantes.

105
Henry B

He estado usando la pantalla durante más de 10 años y probablemente use menos de la mitad de las funciones. Por lo tanto, definitivamente no es necesario aprender todas sus características de inmediato (y no recomendaría intentarlo). Mis comandos del día a día son:

^A ^W - window list, where am I
^A ^C - create new window
^A space - next window
^A p - previous window
^A ^A - switch to previous screen (toggle)
^A [0-9] - go to window [0-9]
^A esc - copy mode, which I use for scrollback

Creo que eso es todo. A veces uso las funciones de pantalla dividida, pero ciertamente no a diario. La otra sugerencia es si la pantalla parece haberse bloqueado porque, por accidente, pulsaste una combinación aleatoria de teclas, haz ^ Q y ^ A ^ Q para intentar desbloquearla.

91
Greg Hewgill

No podía acostumbrarme a la pantalla hasta que encontré una manera de establecer una 'barra de estado' en la parte inferior de la pantalla que muestra en qué 'pestaña' o 'pantalla virtual' estás y cuáles otras hay. He aquí mi arreglo:

[[email protected] ~]$ cat .screenrc
# Here comes the pain...
caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"

backtick 2 5 5 $HOME/scripts/meminfo
hardstatus alwayslastline "%{+b dw}:%{-b dw}:%{+b dk}[%{-b dg} %0C:%s%a %{=b dk}]-[   %{-b dw}Load%{+b dk}:%{-b dg}%l %{+b dk}] [%{-b dg}%2`%{+b dk}] %=[ %{-b dg}%1`%{=b dk} ]%{-b dw}:%{+b dw}:%<"

sorendition "-b dw"
[[email protected] ~]$ cat ~/scripts/meminfo
#!/bin/sh
RAM=`cat /proc/meminfo | grep "MemFree" | awk -F" " '{print $2}'`
SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print $2}'`
echo -n "${RAM}kb/ram ${SWAP}kb/swap"
[[email protected] ~]$
36
Roel

Ctrl+A ? - Muestra la pantalla de ayuda!

30
James Muscat

Si su amigo tiene la costumbre de presionar ^A para llegar al principio de la línea en bash, tendrá algunas sorpresas, ya que ^A es el enlace de la tecla de comando de la pantalla. Normalmente termino con una pantalla congelada, posiblemente debido a alguna tecla aleatoria que presioné después de ^A :-)

En esos casos lo intento.

^A s y ^A q bloquean/desbloquean el desplazamiento de la terminal

para arreglar eso. Para ir al principio de una línea dentro de la pantalla, la secuencia de teclas es ^A a

26
agnul

Puede volver a asignar la clave de escape de ctrl-A para que sea otra clave de su elección, así que si la usa para otra cosa, por ejemplo. para ir al principio de la línea en bash, solo necesita agregar una línea a su archivo ~/.screenrc. Para hacerlo ^ b o ^ B usa:

escape ^bB

Desde la línea de comandos, use las sesiones de nombres para mantener varias sesiones bajo control. Uso una sesión por tarea, cada una con múltiples pestañas:

La pantalla 
 -ls muestra sus sesiones de pantalla actuales 
 pantalla -S <nombre> crea una nueva sesión de pantalla llamada nombre 
 pantalla -r <nombre> se conecta a las sesiones de pantalla nombradas 

Cuando usas la pantalla solo necesitas unos pocos comandos:

 ^ A c c crea una nueva Shell 
 ^ A [0-9] cambia Shell 
 ^ A k mata a la Shell actual 
 ^ A d desconecta de la pantalla 
 ^ A? mostrar la ayuda 

Se puede encontrar una referencia rápida excelente aquí . Vale la pena marcar.

12
Andrew Johnson

Algunos consejos para los que están familiarizados con la pantalla, pero que tienden a no recordar las cosas que leen en la página del manual:

  • Para cambiar el nombre de una ventana de pantalla es muy fácil: ctrl+Ashift+A.
  • ¿Te perdiste el último mensaje de la pantalla? ctrl+actrl+m Se lo mostrará de nuevo por ti.
  • Si desea ejecutar algo (como seguir un archivo) y tener una pantalla que le diga cuándo hay un cambio, use ctrl+Ashift+m en la ventana de destino. Advertencia: le avisará si cualquier cosa cambia.
  • ¿Quieres seleccionar la ventana 15 directamente? Prueba esto en tu archivo .screenrc:
bind  ! select 11
bind  @ select 12
bind \# select 13
bind  $ select 14
bind  % select 15
bind \^ select 16
bind  & select 17
bind  * select 18
bind  ( select 19
bind  ) select 10

Que asigna ctrl+ashift+0 through 9 Para ventanas 10 a 19.

8
staticsan

ctrl+a Es una llave especial.

ctrl+ad - [d] etach, deja los programas (irssi?) en segundo plano, vete a casa.

ctrl+ac [c] reate una nueva ventana ctrl+a0-9 cambiar entre ventanas por número

screen -r - vuelve a la sesión separada

Eso cubre el 90% de los casos de uso. No intente mostrar toda la funcionalidad a la vez.

6
tadeusz

Ctrl+A es el comando base

Ctrl+AN = ir a la pantalla *** N *** ext

Ctrl+AP = ir a la pantalla *** P *** revious

Ctrl+AC = *** C *** reate nueva pantalla

Ctrl+AD = *** D *** etach su pantalla

6
Niko Gunadi

http://www.debian-administration.org/articles/34

Lo escribí hace un par de años, pero sigue siendo una buena introducción que recibe muchos comentarios positivos.

6
user14038

Yo "debo" añadir esto: añadir

bind s

a su .screenrc, si usted, como yo, solía usar ventanas divididas, como C-a S divide la ventana real, pero C-a s lo congela. Así que acabo de desactivar el atajo de congelación.

6
Zsolt Botykai

No es realmente esencial, no solo relacionado con la pantalla, pero habilitando 256 colores en mi terminal, GNU Screen y Vim mejoré mi experiencia en la pantalla a lo grande (especialmente porque codifico en Vim aproximadamente 8h al día - Hay algunos grandes esquemas de colores amigables con los ojos).

4
jkramer

Hay algunos trabajos interesantes se está realizando para que se realice una buena configuración de la pantalla gnu por defecto en la próxima versión de Ubuntu Server, que incluye usar la parte inferior de la pantalla para mostrar todas las ventanas, así como otros detalles útiles de la máquina (como # actualizaciones disponibles y si la máquina necesita reiniciarse). Probablemente pueda tomar su .screenrc y personalizarlo según sus necesidades.

Los comandos más útiles que tengo en mi .screenrc son los siguientes

shelltitle "$ |bash" # make screen assign window titles automatically
hardstatus alwayslastline "%w" # show all window titles at bottom line of term

De esta manera, siempre sé qué ventanas están abiertas y qué se está ejecutando en ellas en este momento también.

3
David Dean

La primera modificación que hago en .screenrc es cambiar el comando de escape. No a diferencia de muchos de ustedes, no me gusta la secuencia predeterminada Ctrl-A debido a su interferencia con esa funcionalidad fundamental en casi todos los demás contextos. En mi archivo .screenrc, agrego:

escapar `e

Eso es backtick-e.

Esto me permite usar el backtick como tecla de escape (por ejemplo, para crear una nueva pantalla, presiono backtick-c, separar es backtick-d, backtick-? Es ayuda, backtick-backtick es pantalla anterior, etc.). La única forma en que interfiere (y tuve que deshacerme del hábito) es usar backtick en la línea de comandos para capturar la salida de ejecución, o pegar cualquier cosa que contenga un backtick. Para el primero, he modificado mi hábito usando la convención BASH $ (comando). Para este último, normalmente abro otro xterm o se separa de la pantalla y luego pego el contenido que contiene el backtick. Finalmente, si deseo insertar un retroceso literal, simplemente presiono retroceder-e.

3
Gary Chambers

No puedo recordar de quién robé esto (alguien en dotfile.org). Lo he modificado ligeramente para ssh:

#!/bin/sh
# scr - Runs a command in a fresh screen
#
# Get the current directory and the name of command

wd=`pwd`
cmd=$1
shift

# We can tell if we are running inside screen by looking
# for the STY environment variable.  If it is not set we
# only need to run the command, but if it is set then
# we need to use screen.

if [ -z "$STY" ]; then
        $cmd $*
else
        # Screen needs to change directory so that
        # relative file names are resolved correctly.
        screen -X chdir $wd

        # Ask screen to run the command
        if [ $cmd == "ssh" ]; then
                screen -X screen -t ""${1##*@}"" $cmd $*
        else
                screen -X screen -t "$cmd $*" $cmd $*
        fi
fi

Luego configuro los siguientes alias de bash:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

Abre una nueva pantalla para los alias anteriores y si usa ssh, cambia el nombre de la pantalla con el nombre de host ssh.

Saludos z0mbix

3
user203445

Me gusta configurar una sesión de pantalla con nombres descriptivos para las ventanas. ^ a A le permitirá dar un nombre a la ventana actual y ^ a "le dará una lista de sus ventanas. Cuando termine, separe la pantalla con ^ a d y vuelva a adjuntar con pantalla -R

2
innaM

Alguien ha publicado una pregunta similar a esta en Falla del servidor .

2
Vagnerr

Me gusta usar screen -d -RR para crear/adjuntar automáticamente a una pantalla determinada. Creé funciones de bash para hacerlo más fácil ...

function mkscreen
{
    local add=n

    if [ "$1" == '-a' ]; then
        add=y
        shift;
    fi

    local name=$1;
    shift;
    local command="$*";

    if [ -z "$name" -o -z "$command" ]; then
        echo 'Usage: mkscreen [ -a ] name command

    -a          Add to .bashrc.' 1>&2;
        return 1;
    fi

    if [ $add == y ]; then
        echo "mkscreen $name $command" >> $HOME/.bashrc;
    fi

    alias $name="/usr/bin/screen -d -RR -S $name $command";

    return 0;
}

function rmscreen
{
    local delete=n

    if [ "$1" == '-d' ]; then
        delete=y
        shift;
    fi

    local name=$1;

    if [ -z "$name" ]; then
        echo 'Usage: rmscreen [ -d ] name

    -d          Delete from .bashrc.' 1>&2;
        return 1;
    fi

    if [ $delete == y ]; then
        sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
    fi

    unalias $name;

    return 0;
}

Crean un alias para /usr/bin/screen -d -RR -S $name $command. Por ejemplo, me gusta usar irssi en una sesión de pantalla, así que en mi .bashrc (debajo de esas funciones), tengo:

mkscreen irc /usr/bin/irssi

Entonces puedo escribir irc en un terminal para entrar en irssi. Si la pantalla 'irc' aún no existe, se crea y se ejecuta/usr/bin/irssi desde ella (que se conecta automáticamente, por supuesto). Si ya se está ejecutando, simplemente lo vuelvo a conectar, separando por la fuerza cualquier otra instancia que ya esté adjunta. Es bastante agradable.

Otro ejemplo es crear alias de pantalla temporales para perldocs a medida que los encuentro:

mkscreen perlipc perldoc perlipc
perlipc # Start reading the perldoc, ^A d to detach.
...
# Later, when I'm done reading it, or at least finished
# with the alias, I remove it.
rmscreen perlipc 

La opción -a (debe ser el primer argumento) agrega el alias de la pantalla a .bashrc (por lo que es persistente) y -d lo elimina (esto puede ser potencialmente destructivo, así que use bajo su propio riesgo). xD

Adjuntar:

Otro juego de bash que me parece conveniente cuando trabajo mucho con la pantalla:

alias sls='/usr/bin/screen -ls'

De esa manera, puedes enumerar tus pantallas con menos pulsaciones de teclas. No sé si sls choca con alguna de las utilidades existentes, pero no lo hizo en mi sistema en ese momento, así que lo hice.

1
bambams

^ A es un gran personaje especial para las personas de UNIX, pero si usa la pantalla para hablar con OpenVMS, no poder hacerlo ^ A lo hará calvo prematuramente. En VMS, si está editando un comando DCL antes de la ejecución desde el búfer del historial, el modo Insertar está desactivado (tiene que ser por algunas razones por las que no entraré aquí). escribe tu comando en lugar de espaciar las cosas, tienes que golpear ^ A

0
user2146463

^ A A vuelve a la pantalla de la que vienes.

0
dummy