Introducción a GNU Screen, un multiplexor de terminales.
GNU Screen es una herramienta que permite multiplexar varias consolas virtuales en un único terminal, es el equivalente de texto de un gestor gráfico de ventanas.
Es una herramienta muy útil que por defecto está instalada en prácticamente cualquier distribución de GNU/Linux, gracias a ella se puede:
- Conectar con un equipo remoto y abrir una pantalla con un shell.
- Trabajar en modo interactivo durante un rato o lanzar algún trabajo que va a tardar mucho tiempo en completarse.
- Desconectar la pantalla (que seguirá existiendo en el equipo remoto) y cerrar la sesión en el equipo remoto.
- Cuando sea conveniente se puede volver a conectar con el equipo remoto y recuperar la pantalla, que tendrá el terminal tal y como lo dejamos.
Así es posible cambiar de equipo de trabajo y recuperar el mismo terminal desde cualquier ordenador, sin necesidad de mantener una conexión SSH abierta todo el tiempo.
Con esto ya tenemos una herramienta muy útil, pero además GNU Screen implementa muchas funciones avanzadas como: dividir de manera horizontal o vertical un terminal para tener paneles (o ventanas), permitir diferentes pantallas, registrar la salida de cualquier pantalla, copiar/pegar, nombrar las pantallas, proteger el acceso mediante contraseña, etc...
Primeros pasos con GNU Screen.
El funcionamiento básico de GNU Screen es muy sencillo. Al ejecutar el programa screen se lanza un nuevo terminal que está dentro de la pantalla virtual. Se puede trabajar en este terminal con total normalidad pero, aquí radica la novedad, cuando sea necesario es posible enviar comandos a screen. Para ello se utilizará la combinación de teclas CTRL + a seguida del comando. Por ejemplo el comando d sirve para desconectar de una pantalla, dejándola en segundo plano.
Veamos paso a paso cómo es posible conectar con una máquina remota, lanzar una sesión screen, desconectar y posteriormente recuperar la sesión screen.
- En primer lugar podemos establecer una sesión ssh con la máquina remota:
vcarceler@mir:~$ ssh usuario@192.168.1.141
- Después podemos lanzar screensin ningún argumento, lo que abrirá una nueva sesión. Después de la pantalla informativa se mostrará un shell convencional.
usuario@soyuz:~$ screen
- Como ejemplo, en este terminal dejaremos top en ejecución.
- Cuando queramos desconectar deberemos pulsar CTRL + a seguido de d. En este momento se desconecta de screen, cuya ejecución continúa en segundo plano. Ahora incluso se puede cerrar la sesión ssh con el equipo remoto.
- En el momento en que se quiera volver a conectar con la sesión screen bastará con establecer una nueva conexión con la máquina y ejecutar el comando screen -r
- Finalmente, cuando se quiera cerrar definitivamente una sesión screen bastará con terminar la ejecución del programa que se esté ejecutando (top en nuestro caso) y hacer exit como en cualquier shell.
Otros detalles:
Listar las pantallas screen:
Se puede utilizar el comando screen -ls o el comando screen -list para listar las sesiones screen abiertas. Para cada una se indicará su estado (conectada, desconectada, compartida). El comando screen -r acepta como parámetro la sesión a la que se debe conectar.
Lanzar una nueva sesión para un comando:
Si en lugar de un shell se desea una nueva sesión para ejecutar determinado comando se puede especificar directamente. Por ejemplo: screen top. En este caso se crea la nueva sesión y en ella se ejecuta de manera automática el comando especificado. Cuando termina la ejecución del comando también termina la sesión screen.
Comandos de GNU Screen:
Cuando se está conectado a una sesión, es posible enviar comandos a GNU Screen mediante la combinación de teclas CTRL + a seguida del comando.
Algunos de los comandos son:
Comando | Función |
---|---|
? | Muestra el listado de comandos de GNU Screen. |
c | Crea una nueva pantalla. |
n | Cambia a la siguiente pantalla. |
p | Cambia a la pantalla previa. |
0 .. 9 | Cambia a la pantalla indicada. |
" | Presenta un menú con el listado de pantallas para escoger una. |
A | Permite editar el título de la pantalla. |
S |
Divide horizontalmente una pantalla. |
| |
Divide verticalmente una pantalla. |
TAB |
Cambia el foco a la siguiente división de la pantalla. |
De este modo, con un poco de práctica es posible componer una pantalla con los paneles que necesitemos:
Más información:
- GNU Screen
- GNU Screen quick reference
- Otras herramientas relacionadas:
- tmux, otro multiplexor de terminales.
- Introducción a tmux, un multiplexor de terminales.
- Byobu, utiliza GNU Screen o tmux para ofrecer un multiplexador de terminales con funciones avanzadas y muy amigable.