gnu-screen - traduccion - screen terminal
GNU Screen Survival Guide (19)
¿Qué piensa la gente no son solo las cosas esenciales que necesita saber acerca de la excelente utilidad de pantalla, sino las cosas que podría pensar que vale la pena enseñar a alguien, un principiante, desde cero?
Acabo de presentar un amigo a Screen y les está costando acostumbrarse. Así que las analogías y los consejos útiles para recordar ataduras, etc. serían increíbles.
Alguien ha publicado una pregunta similar a esto en Server Fault .
Algunos consejos para aquellos que están familiarizados con la pantalla, pero que tienden a no recordar las cosas que leen en la página del manual:
- Cambiar el nombre de una ventana de pantalla es muy fácil: ctrl + A shift + A.
- ¿Te perdiste el último mensaje de la pantalla? ctrl + a ctrl + m se lo mostrará nuevamente.
- Si desea ejecutar algo (como rastrear un archivo) y que la pantalla le indique cuándo hay un cambio, use ctrl + A shift + m en la ventana de destino. Advertencia: le avisará si algo cambia.
- ¿Quieres seleccionar la ventana 15 directamente? Pruébalos 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
Eso asigna ctrl + a shift + 0 a 9 para windows 10 a 19.
Hay un trabajo interesante que se realiza para obtener una buena configuración de pantalla gnu por defecto en la próxima versión de Ubuntu Server, que incluye el uso de la parte inferior de la pantalla para mostrar todas las ventanas y otros detalles útiles de la máquina (como # actualizaciones disponible y si la máquina necesita un reinicio). 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.
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 conocer todas sus características de inmediato (y no recomendaría intentarlo). Mis órdenes diarias 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 todos los días. La otra sugerencia es si la pantalla parece haberse bloqueado porque golpeas accidentalmente una combinación de teclas aleatorias, haz ambas ^ Q y ^ A ^ Q para intentar desbloquearla.
La primera modificación que hago en .screenrc es cambiar el comando de escape. A diferencia de muchos de ustedes, no me gusta la secuencia Ctrl-A predeterminada debido a su interferencia con esa funcionalidad fundamental en casi cualquier otro contexto. En mi archivo .screenrc, agrego:
escape `e
Eso es backtick-e.
Esto me permite utilizar el backtick como la tecla de escape (por ejemplo, para crear una nueva pantalla, presiono back-tick-c, detach es back-tick-d, backtick-? Es help, backtick-backtick es la pantalla anterior, etc.). La única forma en que interfiere (y tuve que abandonar el hábito) es utilizar el control invertido en la línea de comando para capturar la salida de ejecución, o pegar cualquier cosa que contenga un backtick. Para el primero, modifiqué mi hábito al usar la convención BASH $ (comando). Para este último, suelo abrir otro xterm o separarme de la pantalla y luego pegar el contenido que contiene el backtick. Finalmente, si deseo insertar un backtick literal, simplemente presiono backtick-e.
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 ^ ad y vuelva a colocarla con la pantalla -R
Me gusta usar la screen -d -RR
para crear / adjuntar automáticamente a una pantalla determinada. Creé funciones 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, por lo que en mi .bashrc (debajo de esas funciones), tengo:
mkscreen irc /usr/bin/irssi
Entonces puedo simplemente escribir irc
en una terminal para entrar en irssi. Si la pantalla ''irc'' aún no existe, entonces se crea y / usr / bin / irssi se ejecuta desde allí (que se conecta automáticamente, por supuesto). Si ya se está ejecutando, simplemente vuelvo a conectarlo, separando por la fuerza cualquier otra instancia que ya esté conectada. 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 (estos pueden ser potencialmente destructivos, por lo tanto, use bajo su propio riesgo). xD
Adjuntar:
Otro bash-ismo que encuentro conveniente cuando trabajo mucho con la pantalla:
alias sls=''/usr/bin/screen -ls''
De esta forma, puede listar sus pantallas con muchas menos teclas. No sé si sls
colisiona con las utilidades existentes, pero en ese momento no funcionaba en mi sistema, así que lo sls
.
No es realmente esencial, no solo relacionado con la pantalla, pero al habilitar 256 colores en mi terminal, GNU Screen y Vim mejoraron mi experiencia de pantalla a lo grande (especialmente porque codigo en Vim unas 8 horas al día - hay algunos colores buenos para los ojos).
No pude acostumbrarme a la pantalla hasta que encontré una forma 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:
[roel@roel ~]$ 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"
[roel@roel ~]$ 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"
[roel@roel ~]$
No puedo recordar a quién le 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 configuré 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, renombra el título de la pantalla con el nombre de host ssh.
Cheers z0mbix
Puedes reasignar la clave de escape de ctrl-A para que sea otra clave de tu elección, así que si la usas para otra cosa, por ejemplo, para ir al principio de la línea en bash, solo tienes que agregar una línea a tu ~ /.screenrc archivo. Para que sea ^ b o ^ B use:
escape ^bB
Desde la línea de comandos, use sesiones de nombres para mantener múltiples sesiones bajo control. Utilizo una sesión por tarea, cada una con múltiples pestañas:
screen -ls lists your current screen sessions screen -S <name> creates a new screen session called name screen -r <name> connects to the named screen sessions
Cuando usa la pantalla, solo necesita algunos comandos:
^A c create a new shell ^A [0-9] switch shell ^A k kill the current shell ^A d disconnect from screen ^A ? show the help
Una excelente referencia rápida se puede encontrar here . Digno de marcar.
Si su amigo tiene el hábito de presionar ^A
para llegar al comienzo de la línea en bash, él / ella se llevará algunas sorpresas, ya que ^A
es la combinación de teclas de comando de pantalla. Normalmente termino con una pantalla congelada, posiblemente debido a alguna clave aleatoria que presioné después de ^A
:-)
En esos casos, intento
^A s
y ^A q
bloquear / desbloquear el desplazamiento del terminal
arreglar eso Para ir al comienzo de una línea dentro de la pantalla, la secuencia de teclas es ^A a
Yo "debo" agregar esto: agregar
bind s
a su .screenrc
, si Usted, como yo, solía usar ventanas divididas, ya que Ca S
divide la ventana real, pero Ca s
congela. Así que deshabilité el atajo de congelación.
^ A es un gran char especial para la gente de UNIX, pero si usa la pantalla para hablar con OpenVMS, entonces no poder ^ A lo calzará prematuramente. En VMS, si está editando un comando DCL antes de la ejecución desde el búfer de historial, el modo Insertar está desactivado (tiene que ser por algunas razones por las que no entraré aquí) ... para encenderlo y no excederse. escriba su comando en lugar de espaciar las cosas, tiene que golpear ^ A
^ AA vuelve a la pantalla de la que recién salió.
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.
Ctrl + A ? - muestra la pantalla de ayuda!
Ctrl + A es el comando base
Ctrl + A N = ir a la pantalla *** N *** ext
Ctrl + A P = ir a la pantalla *** P *** revious
Ctrl + A C = *** C *** reate new screen
Ctrl + A D = *** D *** etach tu pantalla
ctrl + a es una clave especial.
ctrl + a d - [d] etach, deja los programas (irssi?) en el fondo, ve a casa.
ctrl + a c [c] reate una nueva ventana ctrl + a 0-9 alternar entre ventanas por número
screen -r - vuelve a la sesión desconectada
Eso cubre el 90% de los casos de uso. No intente mostrar toda la funcionalidad a la vez.