La pantalla o GNU screen es un multiplexor de terminal. Usándolo, puedes ejecutar cualquier número de aplicaciones basadas en la consola, shells de comandos interactivos, aplicaciones basadas en el curso, etc. Puedes usar screen para seguir ejecutando el programa después de cerrar accidentalmente la terminal, o incluso después de cerrar la sesión y reanudarla más tarde justo donde estás.
Un ejemplo práctico es cuando estás ejecutando una tarea en una máquina Linux remota en la que tienes una sesión ssh. Muchas veces has visto que esta sesión ssh se termina y ya no puedes trabajar. Aquí viene la utilidad screen para ayudar a reanudar las sesiones.
¿Cómo funciona screen?
Cuando se llama a screen, crea una única ventana con un shell en ella (o el comando especificado) y luego se aparta de tu camino para que puedas usar el programa como lo harías normalmente. Luego, en cualquier momento, puede crear nuevas ventanas (a pantalla completa) con otros programas en ellas (incluyendo más shells), matar la ventana actual, ver una lista de las ventanas activas, copiar texto entre ventanas, cambiar entre ventanas, etc.
Screen gestiona una sesión que consiste en una o más ventanas, cada una de las cuales contiene un shell u otro programa. Además, screen puede dividir una pantalla de terminal en múltiples regiones, cada una de las cuales muestra el contenido de una ventana. Todas las ventanas ejecutan sus programas de forma completamente independiente. Los programas continúan ejecutándose cuando su ventana no es visible en ese momento e incluso cuando toda la sesión de pantalla se separa del terminal del usuario. Esto es práctico para evitar el cierre involuntario de la sesión de ssh.
Ahora vamos a comprobar cómo utilizar esta utilidad en Linux.
1) Invocar nuevas ventanas
Si el comando screen no está ya presente en tu sistema, puedes instalarlo con el comando que aparece a continuación.
En Debian
# apt-get install screen
En Centos
# yum install screen
Puedes iniciar screen simplemente escribiendo screen en el símbolo del sistema. Este comando screen iniciará una nueva ventana dentro de screen.
# screen
Puedes iniciar una nueva ventana dentro de screen y además le das un nombre a la ventana, por ejemplo aloft. Se crea una sesión con identificada por ese nombre. El nombre se puede utilizar para volver a adjuntar en una etapa posterior.
# screen -S aloft
Nota que puedes hacer todo tu trabajo como si estuvieras en el entorno CLI normal.
2) Listar todos los procesos de pantalla
Como podemos iniciar nuevas ventanas dentro de la pantalla, es posible mostrar las pantallas actualmente abiertas incluyendo las que se están ejecutando en segundo plano. Se listarán todas las sesiones de pantalla existentes.
# screen -lsThere is a screen on: 10437.aloft (Attached)1 Socket in /var/run/screen/S-root.
3) Comandos principales de la pantalla
Es posible operar con la pantalla utilizando algunos comandos. A continuación enumeraremos los principales comandos más útiles.
-
Ctrl-a
seguido dec
: crear una nueva ventana -
Ctrl-a
seguido dew
: mostrar la lista de todas las ventanas actualmente abiertas -
Ctrl-a
seguido deA
: renombrar las ventanas actuales. El nombre aparecerá cuando se liste la lista de ventanas abiertas conCtrl-a
seguido dew
. -
Ctrl-a
seguido den
: ir a las siguientes ventanas -
Ctrl-a
seguido dep
: ir a las ventanas anteriores -
Ctrl-a
seguido de Ctrl-a: volver a las últimas ventanas utilizadas. -
Ctrl-a
seguido de un número del 0 al X: ir a las ventanas n° X. -
Ctrl-a
seguido de"
: elegir las ventanas en las que avanzar. -
Ctrl-a
seguido dek
: cerrar las ventanas actuales (matar) -
Ctrl-a
seguido deS
: dividir las ventanas actuales horizontalmente. Para cambiar entre las ventanas, hazCtrl-a
seguido deTab
. -
Ctrl-a
seguido de|
: divide las ventanas actuales verticalmente -
Ctrl-a
seguido ded
: separar una sesión de pantalla sin detenerla -
Ctrl-a
seguido der
: volver a pegar una sesión de pantalla desprendida -
Ctrl-a
seguido de: pegar el texto copiado
4) Mostrar parámetro de pantalla
Puede listar todos los parámetros de la pantalla como ayuda. Para ello, escribe Ctrl-a
seguido del carácter ?
. Se mostrará una lista de todos los comandos.
5) Desprenderse de la sesión
La mejor ventaja del comando de pantalla es la posibilidad de desprenderse de una sesión de pantalla. Se puede iniciar una sesión de pantalla en un ordenador de la oficina, desprender la sesión del terminal local, ir a casa, entrar en nuestro ordenador de la oficina de forma remota y volver a desprender la sesión de pantalla en el terminal de nuestro ordenador de casa. Durante el tiempo transcurrido, todos los trabajos en el ordenador de la oficina han seguido ejecutándose. Esta función se utiliza para evitar la pérdida de datos que se producen repentinamente durante la caída de la conexión ssh.
Para entender bien de qué estamos hablando, pongamos un ejemplo. Lanzamos un proceso de instalación.
Ahora despegaremos la pantalla con Ctrl-a
seguido de d
. Podemos comprobarlo con el siguiente comando.
# screen -lsThere is a screen on: 12449.win (Detached)1 Socket in /var/run/screen/S-root.
Es posible separar la pantalla con el comando screen -d
seguido del id de la pantalla o su nombre. Esto significa que tendrá que abrir otra ventana o consola para separar la sesión si la consola actual tiene un proceso en curso. Primero necesitas listar la pantalla actual adjunta.
# screen -lsThere is a screen on: 13686.win200 (Attached)1 Socket in /var/run/screen/S-root.
Ahora en una nueva terminal, introduce el comando siguiente.
# screen -d 13686
o puedes usar el nombre
# screen -d win200
Tendrás una salida como la siguiente que indica que la pantalla fue desvinculada.
6) Volver a unir una sesión
Después de separar la pantalla, es posible volver a unirla con el comando. Normalmente tu sesión de pantalla sigue funcionando por lo que todos tus procesos no se detienen. Antes de volver a adjuntar una sesión, es necesario listar la sesión como se indica arriba, y luego elegir la sesión para volver a adjuntar.
# screen -r 13686
o puedes usar
# screen -r win200
Puedes ver que después de reasignar la sesión, las ventanas muestran el final del proceso que se ha completado. Esto significa que usted puede trabajar en ssh y separar una sesión que volverá a adjuntar en su casa para continuar su proceso de trabajo sin perder nada.
7) Crear una nueva shell interactiva
Si usted tiene algunos trabajos que hacer y no quiere perder su trabajo, es posible crear una nueva shell interactiva. Puedes tener fácilmente algunas shell interactivas (numeradas del 0 al X) abiertas en una ventana de terminal. Cuando inicies una nueva sesión, estarás en el shell 0.
Para ello, debes crear nuevas ventanas dentro de las existentes con Ctrl-a
seguido de c
. Tendrás algo como lo siguiente.
Puedes ver la pantalla 3 en la parte superior de la captura que indica que estamos en la tercera pantalla. En la parte inferior también podemos ver la 3
8) Cambiar entre ventanas de pantalla
Cuando hayas abierto más de una ventana de pantalla, para cambiar entre cada ventana, pulsa Control-a
seguido de space
o el número del shell. Por ejemplo, para pasar al caparazón número 1, pulse Control-a
y luego 1
. Por ejemplo, nos moveremos en la primera pantalla.
La parte superior e inferior de la captura de pantalla muestra que estamos en la primera pantalla.
9) Dividir ventanas
Para tener una visión global de tu trabajo, puedes necesitar dividir tus ventanas en lugar de tener varias. Ctrl-a
seguido de S
o |
divide tu pantalla horizontal o verticalmente. Es posible repetir la operación sin límite. Para mover otra ventana, utiliza Ctrl-a
seguido de Tab
.
Cuando el cursor está en las ventanas inferiores, puedes crear una nueva ventana (Ctrl-a
seguido de c
) o llamar a una ventana existente (Ctrl-a
seguido de un número).
Para cerrar una ventana dividida, utiliza Ctrl-a
seguido de X
(Ten en cuenta que es el carácter mayúsculo).
10) Reconectar a una sesión ssh desconectada
Cuando te conectas por primera vez,
- ejecuta screen para iniciar una sesión de pantalla. Obtendrás otra shell, ejecuta comandos en ella.
# screen -S remote_session
- Cuando hayas terminado, desconecte la sesión de pantalla y luego cierre la sesión de ssh
- Puede listar toda la sesión de pantalla primero
- Reconéctese a su sesión de pantalla y continúe su trabajo
# screen -d -r remote_ression
El comando screen es el más utilizado para la sesión ssh porque ayuda a continuar su trabajo después de una desconexión sin perder los procesos actuales en curso.
11) Desplazarse hacia arriba en las ventanas de screen
Dado que screen se encarga de gestionar tus programas remotos, no puedes utilizar las funciones de desplazamiento de tu emulador de terminal mientras ejecutas screen. Debe utilizar los comandos de Screen para acceder al búfer de desplazamiento hacia atrás.
- Usa
Ctrl-a
seguido deescape
- Presiona el
Up
yDown
o las teclasPgUp
yPgDn
para desplazarse por la salida anterior.
Puedes ver dónde está mi cursor en la captura de pantalla. Cada terminal virtual tiene su propio buffer de scrollback.
12) Ver el propietario de cada sesión de pantalla
Los comandos screen -ls
o screen -list
sólo te muestran tus propias sesiones de pantalla incluso para root. Que yo sepa eso es lo mejor que se puede hacer para la propia pantalla.
Si quieres ver qué sesiones de pantalla han sido iniciadas por qué usuarios mira en cada directorio de usuarios en /var/run/screen/
.
13) Compartir una sesión de pantalla con una cuenta
Puedes tener dos personas conectadas a la misma cuenta desde ubicaciones remotas. Pueden compartir fácilmente una sesión de pantalla (así que lo que uno escribe lo ve el otro y viceversa). Para ello:
- Crea una sesión de pantalla con nombre:
# screen -d -m -S share_session
- Adjúntese a la sesión de pantalla en su ventana de terminal
# screen -x share_session
- Haga que la otra persona (conectada a la misma cuenta) también se conecte a la sesión de pantalla
# screen -x share_session
Tendrás exactamente la misma salida mostrada en la otra ubicación. Todo lo que aparecerá en tu terminal también aparecerá en el terminal del otro usuario.
14) Bloquear la sesión de pantalla
Es posible bloquear la sesión de pantalla sin bloquear la sesión normal del usuario. Esto significa que usted puede dejar su computadora y estar seguro de que nadie vendrá a las operaciones no autorizadas. Para ello, utilice el comando Ctrl-a
seguido de x
(Tenga en cuenta que es el carácter minúsculo).
Screen used by root <root> on centos-01.Password:
15) Terminar la sesión de pantalla
Cuando hayas terminado y quieras salir de la sesión de pantalla, puedes utilizar el comando Ctrl-a
seguido de k
. Se le pedirá una confirmación.
También puede utilizar el comando exit. Si desea guardar su proceso en curso, puede simplemente separar su sesión de pantalla antes de terminar la sesión.
Conclusión
La utilidad de pantalla puede monitorear una ventana para la actividad o inactividad. Esto es genial si usted está descargando archivos grandes, compilación, o la espera de la salida. En ese momento, si es necesario, puede incluso iniciar algún proceso desde un ordenador utilizando el comando de pantalla y desprenderlo cuando haya terminado.