Cómo instalar y usar Screen en un servidor en la nube de Ubuntu

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 screenes 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 aptpara actualizar el código fuente de tus paquetes e instalar screen:

sudo apt update
sudo apt install screen

Verifique que screense haya instalado ejecutando which screen:

which screen

Output/usr/bin/screen

Puedes comenzar a usarlo screenen el siguiente paso.

Paso 2 – Uso de la pantalla

Para iniciar una nueva sesión de pantalla, ejecute el screencomando.

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. ¿ screenNo 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 screenva precedido de Ctrl-a(mantenga presionada la tecla Ctrl mientras presiona la tecla “a”). Esta secuencia de pulsaciones indica screenque 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 topen 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 csecuencia 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 pCambia 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 wuna 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 &ldquo;:

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 0y luego use Ctrl-a A:

OutputSet window's title to: bash

Usando la Ctrl-a Asecuencia, podemos nombrar nuestras sesiones. Ahora puedes presionar la tecla de retroceso sobre “bash” y luego renombrarla como quieras. Vamos a ejecutar topde nuevo en la ventana n.° 0, así que la llamaremos monitoring.

Verifique el resultado con Ctrl-a &ldquo;:

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 ksecuencia que significa “eliminar”.

OutputReally kill this window [y/n]

Paso 3: Administrar sesiones de pantalla

Cuando desees salir screeny 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 dpara desvincularla.

Output[detached from 1835.pts-0.Blank]

Así que nuestra sesión ya está desconectada. ¿Cómo la retomamos?

screen –r

La -rbandera 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 screennuevamente, luego separarse con Ctrl-a dnuevamente.

¿Cómo sabemos screenqué 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 -rbandera.

screen –r 1835

¿Qué sucede si desea conectar una sesión en dos computadoras o ventanas de terminal distintas? Puede usar la -xbandera, 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 screenque 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 screennos 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 screenes un programa llamado byobu. Actúa como contenedor screeny proporciona una experiencia de usuario mejorada. En Ubuntu, puedes instalarlo con:

sudo apt install byobu

Antes de empezar, necesitamos indicarle byobuque lo use screencomo backend. Podemos hacerlo con el siguiente comando:

byobu-select-backend

OutputSelect the byobu backend:
  1. tmux
  2. screen

Choose 1-2 [1]:

Podemos elegir screenaquí establecerlo como el administrador de terminal predeterminado.

Ahora, en lugar de escribir screenpara iniciar una sesión, puedes escribir byobu.

byobu

Cuando escribas Ctrl-apor 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 1para 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 byobuuna 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 sessionnameel 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 screeny byobuadministraste 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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post