[Linux] Usando GNU «screen»

Me encontraba dándole una inducción remota de cómo instalar openLDAP y Samba a un compañero, cuando este se encontró con un problema, luego de múltiples *maromas y esoterismos* (el amigo estaba en una máquina Windows) que si Teamviewer, que si Skype compartiendo pantalla, le dije «mira, dame acceso por tu IP pública vía SSH», y me dijo «pero yo quiero ver lo que haces» …

Dame un minuto, déjame enseñarte *screen*, y de allí surge este artículo.

GNU Screen

Screen es una herramienta extraordinariamente útil, nos permite ejecutar múltiples cónsolas que pueden ser minimizadas y re-adjuntadas a voluntad, compartidas, guardadas, divididas y un largo etcétera de opciones.

GNU Screen es una de mis herramientas favoritas para trabajo en servidores (sobre todo, cuando debo dejar haciendo trabajo en el servidor), sin embargo, he notado lo poco que algunos conocen esta herramienta.

Por la sugerencia del amigo, que debía hacer una guía de Screen en español, es que nace este artículo.

Entendiendo SCREEN

En *screen* se manejan 3 conceptos básicos, la «sesión«, es un área de trabajo, que se crea cuando ejecutas el comando screen.

Una ventana, es cónsola shell abierta dentro de una sesión de screen, una sesión de screen puede contener múltiples ventanas.

Una región, es una división, realizada a una ventana, que dentro contiene otra ventana, uno puede dividir una sesión de screen en 2 o más partes, horizontal o verticalmente y en cada split (porción de una región) desplegar una ventana.

Instalar SCREEN

En algunas distribuciones screen ya viene por defecto instalado, en aquellas donde no lo estuviera, con ejecutar:

apt-get install screen

ó

yum install screen

Será más que suficiente.

Crear una sesión de screen

Con simplemente escribir:

screen

se creará una sesión screen.

Crear una sesión de screen con nombre

screen -S [nombre]

Y entrarás en una sesión de screen con el nombre indicado (nota: si se tienen muchísimas sesiones de screen activas, es muy útil identificarlas por nombre).

Operaciones con screens

Todas las operaciones en SCREEN se activan con la secuencia CTRL+a seguida de alguna letra y/o combinación de letras (presionas tecla CONTROL y la letra a, luego sueltas y presionas la letra siguiente).

Ejemplo:

CTRL+a K : presionar CTRL+a y luego K, matará un programa dentro de una screen.

Screen también admite «comandos», los comandos se escriben luego de escribir «:» (dos puntos), ejemplo:

CTRL+a «:multiuser off», detiene el multi-usuario de una sesión.

Dettaching, attaching and re-attaching

Una de las cosas más útiles de SCREEN es la posibilidad de ejecutar un comando muy largo (ejemplo, un rsync) y dejarlo ejecutando dentro de una cónsola y luego minimizar la misma y re-conectarse luego.

* «Minimizar» (detach) una cónsola screen:

CTRL+a d nos permitirá minimizar una cónsola.

Para retornar a la cónsola escribimos:

screen -r

De existir más de una cónsola «minimizada», veremos un listado como este:

# screen -r
There is a screen on:
4870.pts-4.lexotanil (Detached)
4638.pts-1.lexotanil (Detached)
19936.pts-1.lexotanil (18/02/13 12:46:38) (Attached)

Vemos 2 cónsolas minimizadas (Detached) y una abierta (Attached).

De existir una cónsola múlti-usuario, esta se verá:

19936.pts-1.lexotanil (18/02/13 12:46:38) (Multi, attached)

 Hablaremos de ellas más tarde.

Crear «ventanas» dentro de una screen

Cuando estén en una sesión de «screen» y desean crear una «ventana», ejecuten:

CTRL+a y luego «c» (c:create), esto habilitará otra ventana.

Para cambiar entre ventanas:

CTRL+a entonces números del 0 al 9: cambiar a la ventana según su ordinal (posición)
CTRL+a entonces «n»: «next window», próxima ventana
CTRL+a entonces » (comillas dobles) (Mayúsculas-2): Una lista de todas las ventanas creadas

Esto retorna una lista muy parecida a esto:

Num Name Flags
0       bash      $
1       bash      $
2       bash      $

Esta lista se puede «navegar» (flechas arriba y abajo) y ENTER para seleccionar una ventana.

Renombrar ventanas:

Para darle nombre a una «ventana»:

CTRL+a entonces Mayúsculas+a: Aparece un mensaje debajo solicitando el nombre de la screen (en Debian, por defecto «bash»):

Set window’s title to: bash

Borren la palabra «bash» y pongan el nombre que deseen, con CTRL+a+SHIFT+2 verán:

Num Name Flags

0 prueba $
1 bash $
2 test

El nombre correspondiente de la ventana (muy útil para saber de qué se trata cada ventana).

Dividir en regiones

Se puede dividir una ventana en varias regiones, cada región puede tener el foco de una ventana de screen diferente.

CRTL+a SHIFT-s: permite dividir una screen en dos regiones (ver imagen)

screen-split

Luego, podemos cambiar el foco a la nueva región con:

CTRL+a y TAB (tabulación): moverá el foco a la región siguiente

Al estar en esta región podemos realizar las siguientes operaciones:

CTRL+a SHIFT-C: Crear una nueva ventana en la región
CTRL+a n: nos mueve a la ventana actual (la que está arriba), podemos igual cambiar a las diferentes ventanas ya  existentes (ver imagen)

screen-split2

Para cerrar una región, simplemente se ejecuta:

CTRL+a SHIFT-x : cierra la región actual
CTRL+a SHIFT+q : al contrario, cierra todas las regiones, salvo la actual

Pantallas multi-usuario

Una de las ventajas de usar screens, es que una cónsola pueda ser operada por varios usuarios a la vez, es una de las cosas que más uno realiza y de las qué pocos novatos se enteran.

Crear una sesión SCREEN multi-usuario

screen -S prueba

Al tener la sesión screen activa, activar la cónsola de comandos (CTRL+a y luego presionar dos puntos «:» para escribir comandos de screen)

* Activar el modo multi-usuario:

CTRL+a y escribir «:multiuser on»

En este momento, la sesión puede ser accedida por múltiples personas, pero primero, debemos autorizarlos.

* Conectarse a una cónsola multiusuario:

screen -x [nombre de la screen]

ó

screen -r [PID de la sesión]

* Autorización de usuarios

CTRL+a «:acladd [lista de usuarios]»

La lista de usuarios puede ser uno o varios nombres de usuario, separados por comas:

ejemplo:

CTRL+a ":acladd jesuslara,soporte"

El usuario que creó la sesión de screen, más los usuarios «jesuslara» y «soporte» tienen derecho a acceder a la sesión screen.

* Permisos en la cónsola screen multi-usuario:

La utilidad de las cónsolas multi-usuario es que permiten a algunos trabajar y otros «ver» lo que uno está realizando, los permisos son w:write, r:read y x:execution con los valores «+» (garantizar) y «-» (revocar), luego de los permisos viene el número de la ventana donde recibirá los permisos (el símbolo «#» indica «todas las ventanas»).

ejemplo:

CTRL+a :aclchg soporte -w «#»

El usuario soporte queda sin permisos de escritura en todas las cónsolas screen abiertas.
* Ver los usuarios conectados a una cónsola screen
CTRL+a SHIFT-«+» (CTRL+a «*»)

Retorna la lista de usuarios conectados en una cónsola screen..

Ejemplo de lista de usuarios conectados:

term-type size user interface window Perms
———- ——- ———- —————– ———- —–
xterm 85×25 root@/dev/pts/1 nb 0(prueba) rwx
 

Mensaje a todas las ventanas activas

Podemos enviar un mensaje a todas las ventanas activas de una sesión usando el comando «:wall»

CTRL+a «:wall [mensaje]»

Envía el mensaje a todas las ventanas de la sesión conectadas.

Conclusiones

SCREEN es una herramienta poderosa, que nos permite trabajar de manera cooperativa y colaborativa con cónsolas activas en servidores, sin tener que recurrir a «maromas» cómo pantallas compartidas de Skype, Teamviewer ú otras soluciones «resource-hungry», algo tan sencillo como SSH y una cónsola SCREEN compartida, nos permite operar con confianza contra nuestros servidores Linux, macOSX/BSD; se puede incluso hacer trucos cómo que ssh-agent genere una screen automáticamente por cada sesión remota SSH que se genere en el servidor, o ejecutar:

CTRL+a y luego SHIFT+H: permite guardar el historial de comandos realizados por una ventana screen.

Espero que el pana @terracenter (quien pidió esta guía inicialmente) y el resto de mis lectores le saquen el provecho necesario, si no conocían screen, espero lo usen, y si ya lo conocían, espero haberles brindado algunos trucos útiles.

Happy Hacking! and screening! 😉

7 comentarios sobre “[Linux] Usando GNU «screen»

    1. Tmux es ciertamente una versión lightweight de screen, qué al ser GNU y GPL, se necesitaba una versión BSD para incorporarla en sistemas cómo macOSX.
      Al estar correctamente parcheado en Debian, screen es mi opción por defecto.
      Saludos!

    1. El split de pantalla es lo menos que uso con screen, realmente, lo uso más para multiplexar consolas, hacer dettach de comandos largos y repetir comandos en múltiples consolas a la vez, además de compartir la cónsola, para obvio, enseñar a otros o mostrar lo que hago.

Deja un comentario