Introducción
Screen es una aplicación de consola que permite usar varias sesiones de terminal en una misma ventana. El programa opera dentro de una sesión de shell y actúa como contenedor y administrador de otras sesiones de terminal, de forma similar a como un gestor de ventanas gestiona las ventanas.
Hay muchas situaciones en las que crear varias ventanas de terminal no es posible ni ideal. Quizás necesite administrar varias sesiones de consola sin un servidor X en ejecución, acceder a muchos servidores remotos en la nube o supervisar la salida de un programa en ejecución mientras trabaja en otra tarea.
Existen soluciones modernas y todo en uno para este problema, como tmux , pero screen
es la más madura de todas y tiene su propia sintaxis y características potentes.
Paso 1 – Instalación de la pantalla
En este tutorial, usaremos Ubuntu 22.04, pero fuera del proceso de instalación, todo debería ser igual en todas las distribuciones modernas de Linux.
Screen suele instalarse por defecto en Ubuntu. También puedes usar apt
para actualizar el código fuente de tus paquetes e instalar screen
:
sudo apt update
sudo apt install screen
Verifique que screen
se haya instalado ejecutando which screen
:
which screen
Output/usr/bin/screen
Puedes comenzar a usarlo screen
en el siguiente paso.
Paso 2 – Uso de la pantalla
Para iniciar una nueva sesión de pantalla, ejecute el screen
comando.
screen
[secondary_label Output
GNU Screen version 4.09.00 (GNU) 30-Jan-22
Copyright (c) 2018-2020 Alexander Naumov, Amadeusz Slawinski
Copyright (c) 2015-2017 Juergen Weigert, Alexander Naumov, Amadeusz Slawinski
Copyright (c) 2010-2014 Juergen Weigert, Sadrul Habib Chowdhury
Copyright (c) 2008-2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib
Chowdhury
Copyright (c) 1993-2007 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2, or (at your option) any later version.
…
[Press Space for next page; Return to end.]
Al iniciar el programa, aparecerá la página de licencias. Simplemente presione Enter para continuar.
Lo que sucede a continuación puede ser sorprendente. Se nos muestra un símbolo del sistema normal y parece que no ha ocurrido nada. ¿ screen
No se ha ejecutado correctamente? Probemos un atajo de teclado rápido para averiguarlo. Pulsa Ctrl+a
, seguido de v
:
Outputscreen 4.09.00 (GNU) 30-Jan-22
Acabamos de solicitar la información de la versión de Screen y hemos recibido algunos comentarios que nos permiten verificar que Screen funciona correctamente.
Ahora es un buen momento para presentar cómo controlaremos screen
. La pantalla se controla principalmente mediante atajos de teclado. Cada atajo de teclado para screen
va precedido de Ctrl-a
(mantenga presionada la tecla Ctrl mientras presiona la tecla “a”). Esta secuencia de pulsaciones indica screen
que debe prestar atención a las siguientes teclas que presione.
Ya usaste este paradigma una vez cuando solicitamos información sobre la versión de screen
. Utilicémoslo para obtener información más útil, introduciendo Ctrl-a ?
:
Output Screen key bindings, page 1 of 2.
Command key: ^A Literal ^A: a
break ^B b license , removebuf =
clear C lockscreen ^X x reset Z
colon : log H screen ^C c
copy ^[ [ login L select '
detach ^D d meta a silence _
digraph ^V monitor M split S
displays * next ^@ ^N sp n suspend ^Z z
dumptermcap . number N time ^T t
fit F only Q title A
flow ^F f other ^A vbell ^G
focus ^I pow_break B version v
hardcopy h pow_detach D width W
help ? prev ^H ^P p ^? windows ^W w
history { } quit \ wrap ^R r
info i readbuf < writebuf >
kill K k redisplay ^L l xoff ^S s
lastmsg ^M m remove X xon ^Q q
[Press Space for next page; Return to end.]
Esta es la pantalla de atajos de teclado internos. Probablemente quieras memorizar cómo llegar aquí, ya que es una excelente referencia rápida. Como puedes ver en la parte inferior, puedes presionar la barra espaciadora para obtener más comandos.
Bien, probemos algo más divertido. Ejecutemos un programa llamado top
en esta ventana, que nos mostrará información sobre nuestros procesos.
top
Outputtop - 16:08:07 up 1:44, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 58 total, 1 running, 57 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 507620k total, 262920k used, 244700k free, 8720k buffers
Swap: 0k total, 0k used, 0k free, 224584k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 3384 1836 1288 S 0.0 0.4 0:00.70 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0
5 root 20 0 0 0 0 S 0.0 0.0 0:00.12 kworker/u:0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.07 watchdog/0
8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
11 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
12 root 20 0 0 0 0 S 0.0 0.0 0:00.03 sync_supers
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khubd
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
Bien, ahora estamos monitoreando los procesos en nuestro VPS. Pero ¿qué pasa si necesitamos ejecutar comandos para obtener más información sobre los programas que vemos? No es necesario salir de “arriba”. Podemos crear una nueva ventana para ejecutar estos comandos.
La Ctrl-a c
secuencia crea una nueva ventana. Ahora podemos ejecutar los comandos que queramos sin interrumpir la monitorización que realizábamos en la otra ventana.
¿Dónde está la otra ventana? Podemos volver a ella usando Ctrl-a n
.
Esta secuencia pasa a la siguiente ventana que estamos ejecutando. La lista de ventanas se ajusta, por lo que, cuando no hay más ventanas que la actual, volvemos a la primera ventana.
Ctrl-a p
Cambia la ventana actual en la dirección opuesta. Por lo tanto, si tiene tres ventanas y está en la tercera, este comando lo cambiará a la segunda.
Un atajo útil para usar cuando estás alternando entre las mismas dos ventanas es Ctrl-a Ctrl-a
.
Esta secuencia te lleva a la última ventana visitada. En el ejemplo anterior, esto te llevaría de vuelta a la tercera ventana.
Llegados a este punto, quizá te preguntes cómo puedes controlar todas las ventanas que estamos creando. Afortunadamente, Screen ofrece varias maneras de gestionar tus distintas sesiones. Primero, crearemos tres ventanas nuevas para un total de cuatro y luego probaremos [Introduce] , Ctrl-a w
una de las herramientas de gestión de ventanas de Screen.Ctrl-a c Ctrl-a c Ctrl-a c Ctrl-a w
Output0$ bash 1$ bash 2-$ bash 3*$ bash
Este comando nos proporciona información útil: una lista de nuestras ventanas actuales. Aquí tenemos cuatro ventanas. Cada ventana tiene un número y están numeradas a partir del 0. La ventana actual tiene un asterisco junto al número.
Como pueden ver, estamos en la ventana n.° 3 (en realidad, la cuarta, porque la primera es la 0). Pueden regresar rápidamente a la ventana n.° 1 usando Ctrl-a 1
.
Podemos usar el número de índice para ir directamente a la ventana deseada. Veamos de nuevo nuestra lista de ventanas usando Ctrl-a w
:
Output0$ bash 1*$ bash 2$ bash 3-$ bash
Como pueden ver, el asterisco nos indica que ahora estamos en la ventana n.° 1. Probemos otra forma de cambiar de ventana con Ctrl-a “
:
OutputNum Name Flags
0 bash $
1 bash $
2 bash $
3 bash $
Esta vez tenemos un menú de navegación. Puedes navegar con las flechas arriba y abajo. Para cambiar de ventana, pulsa Intro.
Esto es bastante útil, pero ahora mismo todas nuestras ventanas se llaman “bash”. Eso no es muy útil. Asignemos nombres a algunas de nuestras sesiones. Seleccione la ventana que desee nombrar, por ejemplo, con Ctrl-a 0
y luego use Ctrl-a A
:
OutputSet window's title to: bash
Usando la Ctrl-a A
secuencia, podemos nombrar nuestras sesiones. Ahora puedes presionar la tecla de retroceso sobre “bash” y luego renombrarla como quieras. Vamos a ejecutar top
de nuevo en la ventana n.° 0, así que la llamaremos monitoring
.
Verifique el resultado con Ctrl-a “
:
OutputNum Name Flags
0 monitoring $
1 bash $
2 bash $
3 bash $
Ahora tenemos una etiqueta más útil para la ventana n.° 0. Sabemos cómo crear y nombrar ventanas, pero ¿cómo las eliminamos cuando ya no las necesitamos? Usamos la Ctrl-a k
secuencia que significa “eliminar”.
OutputReally kill this window [y/n]
Paso 3: Administrar sesiones de pantalla
Cuando desees salir screen
y cerrar todas tus ventanas, puedes usar Ctrl-a \
.
OutputReally quit and kill all your windows [y/n]
Esto destruirá nuestra sesión de pantalla. Perderemos todas las ventanas creadas y cualquier trabajo pendiente.
Pero queremos explorar una de las grandes ventajas de usar “screen”. No queremos destruir la sesión, sino desvincularla. Desvincularla permite que nuestros programas en la instancia de “screen” sigan ejecutándose, pero nos da acceso a nuestra sesión de consola base (aquella desde la que iniciamos “screen”). La sesión de “screen” sigue ahí, solo que se gestionará en segundo plano. Usa “screen” Ctrl-a d
para desvincularla.
Output[detached from 1835.pts-0.Blank]
Así que nuestra sesión ya está desconectada. ¿Cómo la retomamos?
screen –r
La -r
bandera significa “reconectar”. Volvemos a nuestra sesión de pantalla. ¿Qué pasa si tenemos varias sesiones de pantalla? ¿Qué pasaría si hubiéramos iniciado una sesión de pantalla y la hubiéramos desconectado, y luego hubiéramos iniciado una nueva sesión de pantalla y la hubiéramos desconectado también?
Intente ejecutar screen
, luego separarse con Ctrl-a d
, luego ejecutar screen
nuevamente, luego separarse con Ctrl-a d
nuevamente.
¿Cómo sabemos screen
qué sesión adjuntar?
screen –ls
OutputThere are screens on:
2171.pts-0.Blank (07/01/2013 05:00:39 PM) (Detached)
1835.pts-0.Blank (07/01/2013 03:50:43 PM) (Detached)
2 Sockets in /var/run/screen/S-justin.
Ahora tenemos una lista de nuestras sesiones. Podemos volver a adjuntar la segunda escribiendo su número de identificación después de la -r
bandera.
screen –r 1835
¿Qué sucede si desea conectar una sesión en dos computadoras o ventanas de terminal distintas? Puede usar la -x
bandera, que le permite compartir la sesión.
screen –x
Paso 4 – Administrar terminales dentro de la pantalla
Hay una serie de comandos que le ayudan a administrar las sesiones de terminal que ejecuta dentro de screen
.
Para copiar texto, puedes utilizar Ctrl-a [
.
Esto te dará un cursor que puedes mover con las flechas o con HJKL. Muévete al punto donde quieras empezar a copiar y pulsa Intro. Muévete al final del punto donde quieras copiar y pulsa Intro de nuevo. El texto se copiará al portapapeles.
Es importante tener en cuenta que este también es el mecanismo de desplazamiento de la pantalla. Si necesitas ver texto que está fuera de la pantalla, puedes pulsar Ctrl-a [
y desplazarte hacia arriba.
Podemos pegar el texto que copiamos con Ctrl-a ]
.
Otra cosa que quizás quieras hacer es monitorear los programas que se están ejecutando en otra ventana de pantalla.
Supongamos que estás compilando algo en una ventana y quieres saber cuándo se completa. Puedes solicitar screen
que se supervise esa ventana para detectar silencio con Ctrl-a _
, lo que te avisará cuando no se haya generado ninguna salida durante 30 segundos.
Intentémoslo con otro ejemplo. Que screen
nos diga cuándo nuestra ventana termina de enviar pings a Google cuatro veces.
ping –c 4 www.google.com
Luego ingrese Ctrl-a _
:
OutputThe window is now being monitored for 30 sec. Silence.
Ahora podemos trabajar en otra ventana y recibir una alerta cuando la tarea en esta ventana se complete ingresando Ctrl-a 1
:
OutputWindow 2: silence for 30 seconds
También podemos hacer lo contrario y recibir alertas cuando haya actividad en una ventana específica.
sleep 20 && echo “output”
Luego, ingresa Ctrl-a M
.
OutputWindow 2 (bash) is now being monitored for all activity.
Ahora recibiremos una alerta cuando el comando genere resultados. Para ver los resultados, use Ctrl-a 1
:
OutputActivity in window 2
Supongamos que vamos a realizar cambios importantes y queremos tener un registro de todos los comandos que ejecutamos. Podemos registrar la sesión con Ctrl-a H
.
OutputCreating logfile "screenlog.1".
Regiones de la pantalla
Si necesitamos ver varias ventanas a la vez, podemos usar algo que la pantalla llama “regiones”. Creamos más regiones dividiendo la región actual. Para dividir la región actual horizontalmente, podemos usar Ctrl-a S
.
Esto moverá nuestra ventana actual a la mitad superior de la pantalla y abrirá una nueva área vacía debajo. Podemos acceder a la pantalla inferior con Ctrl-a [tab]
.
Luego podemos crear una nueva ventana en la región inferior o cambiar la vista a una ventana diferente de la forma habitual.
Si queremos matar la región actual, podemos usar Ctrl-a X
.
Esto destruye la región sin destruir la ventana. Esto significa que si se ejecutaba un programa en esa región, aún se podía acceder a él como una ventana normal, pero la vista de esa ventana se destruyó.
Si queremos hacer una división vertical, podemos utilizar Ctrl-a |
en su lugar.
Los controles para las divisiones verticales son los mismos que para las horizontales. Si hemos añadido varias regiones y queremos volver a una sola, podemos usar Ctrl-a Q
, que destruye todas las regiones excepto la actual.
Paso 5 – Uso de Byobu con la pantalla
Una gran mejora screen
es un programa llamado byobu
. Actúa como contenedor screen
y proporciona una experiencia de usuario mejorada. En Ubuntu, puedes instalarlo con:
sudo apt install byobu
Antes de empezar, necesitamos indicarle byobu
que lo use screen
como backend. Podemos hacerlo con el siguiente comando:
byobu-select-backend
OutputSelect the byobu backend:
1. tmux
2. screen
Choose 1-2 [1]:
Podemos elegir screen
aquí establecerlo como el administrador de terminal predeterminado.
Ahora, en lugar de escribir screen
para iniciar una sesión, puedes escribir byobu
.
byobu
Cuando escribas Ctrl-a
por primera vez, tendrás que indicarle a byobu que lo reconozca como un comando de pantalla.
OutputConfigure Byobu's ctrl-a behavior...
When you press ctrl-a in Byobu, do you want it to operate in:
(1) Screen mode (GNU Screen's default escape sequence)
(2) Emacs mode (go to beginning of line)
Note that:
- F12 also operates as an escape in Byobu
- You can press F9 and choose your escape character
- You can run 'byobu-ctrl-a' at any time to change your selection
Select [1 or 2]:
Seleccione 1
para utilizar byobu de manera normal.
La interfaz ofrece mucha información útil, como una lista de ventanas e información del sistema. En Ubuntu, incluso indica cuántos paquetes tienen actualizaciones de seguridad con un número seguido de un signo de exclamación sobre fondo rojo.
Una diferencia entre usar byobu y screen es la forma en que byobu gestiona las sesiones. Si vuelves a ejecutarlo byobu
una vez desconectado, volverá a conectar tu sesión anterior en lugar de crear una nueva.
Para crear una nueva sesión, utilice byobu –S
:
byobu –S sessionname
Cambia sessionname
el nombre de tu nueva sesión. Puedes ver una lista de las sesiones actuales con:
byobu –ls
OutputThere are screens on:
22961.new (07/01/2013 06:42:52 PM) (Detached)
22281.byobu (07/01/2013 06:37:18 PM) (Detached)
2 Sockets in /var/run/screen/S-root.
Y si hay varias sesiones, al ejecutarlo byobu
, se le presentará un menú para elegir a qué sesión desea conectarse.
byobu
OutputByobu sessions...
1. screen: 22961.new (07/01/2013 06:42:52 PM) (Detached)
2. screen: 22281.byobu (07/01/2013 06:37:18 PM) (Detached)
3. Create a new Byobu session (screen)
4. Run a shell without Byobu (/bin/bash)
Choose 1-4 [1]:
Puede seleccionar cualquiera de las sesiones actuales, crear una nueva sesión de byobu o incluso obtener un nuevo shell sin usar byobu.
Una opción útil en un servidor en la nube que administras remotamente es que byobu se inicie automáticamente al iniciar sesión. Esto significa que, si alguna vez te desconectas, tu trabajo no se perderá y podrás volver a conectarte para continuar.
Para permitir que byobu se inicie automáticamente con cada inicio de sesión, escriba lo siguiente en la terminal:
byobu-enable
OutputThe Byobu window manager will be launched automatically at each text login.
To disable this behavior later, just run:
byobu-disable
Press <enter> to continue…
Como dice, si alguna vez deseas volver a desactivar esta función, escribe:
byobu-disable
Ya no se iniciará automáticamente.
Conclusión
En este tutorial, instalaste, usaste screen
y byobu
administraste sesiones de terminal. Aprendiste varios atajos para desconectar y cambiar entre múltiples entornos de ejecución sobre la marcha. Como muchas interfaces de terminal Unix maduras, Screen puede ser idiosincrásica, pero también es potente y ubicua; nunca se sabe cuándo puede ser útil.