22/7/09

Uso básico de screen

Cuando accedemos remotamente ssh a un sistema se suele obtener acceso a una única shell donde ejecutar comandos.

Ejemplo: si queremos ejecutar simultáneamente el lector de correo electrónico mutt y navegar por directorios para copiar o mover archivos, vamos a tener que realizar 2 conexiones para disponer de 2 shells: En una ejecutaríamos mutt mientras usamos la otra para navegar por los directorios.
Adicionalmente, si perdemos la conexión con el servidor no podremos recuperar el estado en el que se encontraban las terminales. Por ejemplo, si estábamos comprimiendo un directorio y se corta la conexión, esta acción se quedará a medias y tendremos que repetirla.

Sin embargo, si hacemos uso de screen podemos solventar esos inconvenientes:
  • Únicamente nos bastará con realizar una conexión dado que nos permite mantener diversas “ventanas” virtuales dentro de la misma terminal. Similar al concepto de un navegador con diferentes pestañas.
  • Si la conexión se pierde, screen continuará funcionando y al volver a reconectar con el servidor podremos recuperar el estado original.
Para instalarlo, lo de siempre:
# apt-get install screen
Veamos algunos ejemplos:
  • screen -R -D
    Restaura la sesión anterior de screen en caso de existir o, de lo contrario, creará una sesión nueva.
Podemos utilizar diversas combinaciones de teclas para crear nuevas ventanas o realizar otras acciones:
  • ctrl-a c
    Crear una nueva ventana con una shell
  • ctrl-a k
    Destruye la ventana actual
  • ctrl-a n
    Ir a la ventana siguiente
  • Ctrl-a y luego 0 – 9
    Para cambiar entre ventanas o screens
  • ctrl-a p
    Ir a la ventana anterior
  • ctrl-a ctrl-a
    Ir a la última ventana visualizada
  • ctrl-a A
    Ir a la última ventana visualizada
  • ctrl-a ESC
    Ver el historial (scrolling buffer)
  • ctrl-a x
    Bloquea terminal
  • ctrl-a d
    Desasignar screen (recuperar después con screen -R -D)
Podemos realizar pantallazos o llevar un registro de todos los comandos que ejecutamos:
  • ctrl-a h
    Guarda pantallazo en “hardcopy.n”
  • ctrl-a x
    Bloquea terminal
  • ctrl-a H
    Inicia/para registro de la ventana actual en “screenlog.n”
O incluso podemos compartir una terminal entre diversos usuarios de forma remota con screen, los pasos a seguir son:
  1. Activar el setuid de screen mediante: chmod +s /usr/bin/screen
  2. Ejecutar en local: screen -S nombreSesion
  3. Activar acceso multiusuario mediante “Ctrl+a :multiuser on”
  4. Dar permisos a un usuario con “Ctrl+a :acladd usuario”
  5. Si se quiere que el usuario no pueda interactuar con la terminal (solo permisos para observar): Ctrl-a :aclchg student -w “#”
  6. El usuario remoto deberá conectar por SSH con la máquina y ejecutar: screen -x usuario/nombreSesion
Finalmente, si deseamos tener una barra inferior donde aparecerá el nombre de las diferentes ventanas, así como la carga del sistema y la hora actual (entre otras cosas), podemos modificar el fichero de configuración ~/.screenrc:

screen -t shell 0
#screen -t shell 0 motd+shell
#screen -t shell2 1
#screen -t server 2
#screen -t Mail 9 tail -f /var/log/messages

select 0
shelltitle "shell"

# skip the startup message
startup_message off

# go to home dir
chdir

# Automatically detach on hangup.
autodetach on

# Change default scrollback value for new windows
defscrollback 1000

# Turns off alternate screen switching in xterms,
# so that text in screen will go into the xterm's scrollback buffer:
termcapinfo xterm* ti@:te@
altscreen on

# start with visual bell as default
vbell on
vbell_msg "bell on %t (%n)"
activity "Activity in %t(%n)"

# Run a screensaver if there's nothing happening for a while.
#idle 600 eval "screen cmatrix -f -o -u 10" "idle 0"
idle 600 lockscreen

### White
#caption always "%{kW}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{kW}%?%+Lw%? %= %{= Wk}%110`%109`%111` %H load: %l | %D %d-%m-%Y %0c:%s"

### Black
caption always "%{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw%? %= %{= kw}%110`%109`%111` %H load: %l | %D %d-%m-%Y %0c:%s"
Jojo, lindo ehh??!! Extraido de aqui...

No hay comentarios.: