Cómo usar GNU Screen en un VPS Linux
Aprende GNU Screen desde la instalación hasta el uso diario. Gestiona sesiones, divide regiones, configura .screenrc y mantén procesos activos tras desconexiones SSH en Debian 12 y Ubuntu 24.04.
Cómo usar GNU Screen en un VPS Linux
Te conectas por SSH a tu servidor, lanzas un proceso largo y la conexión se cae. El proceso muere. GNU Screen resuelve esto. Ejecuta sesiones de terminal que persisten de forma independiente a tu conexión SSH. Puedes desconectarte, cerrar sesión, reconectarte horas después y retomar exactamente donde lo dejaste.
Este tutorial cubre GNU Screen desde la instalación hasta los flujos de trabajo diarios en Debian 12 y Ubuntu 24.04. Aprenderás gestión de sesiones, manejo de ventanas, división en regiones, modo copia y personalización de .screenrc.
¿Qué es GNU Screen?
GNU Screen es un terminal multiplexer (multiplexor de terminal). Crea sesiones de terminal virtuales que se ejecutan en el servidor, independientes de tu conexión SSH. Dentro de una sesión de Screen, puedes abrir múltiples ventanas, dividir tu terminal en regiones y revisar el historial de salida.
Screen se sitúa entre tu cliente SSH y el shell. Cuando te separas de una sesión de Screen, todos los programas dentro de ella siguen ejecutándose. Cuando te reconectas, ves la misma salida, los mismos procesos en ejecución, el mismo estado. Esto lo hace indispensable para cualquier trabajo en un VPS remoto donde las conexiones SSH pueden caer sin aviso.
Screen existe desde 1987. Está disponible en los repositorios por defecto de todas las distribuciones Linux principales. Las versiones actuales son 4.9.0 en Debian 12 y 4.9.1 en Ubuntu 24.04.
¿Cómo se instala GNU Screen en Debian y Ubuntu?
Screen está disponible en los repositorios por defecto tanto de Debian 12 como de Ubuntu 24.04. Se instala con un solo comando apt. En la mayoría de imágenes VPS mínimas, no viene preinstalado.
Actualiza el índice de paquetes e instala Screen:
sudo apt update && sudo apt install -y screen
Verifica la instalación:
screen --version
En Debian 12 verás:
Screen version 4.09.00 (GNU) 30-Jan-21
En Ubuntu 24.04:
Screen version 4.09.01 (GNU) 20-Aug-23
Si aparece un número de versión, Screen está listo para usar.
¿Cómo se inicia y nombra una sesión de Screen?
Para iniciar una nueva sesión de Screen, ejecuta screen. Pero iniciar sin nombre dificulta identificarla después. Nombra siempre tus sesiones con el flag -S.
Inicia una sesión con nombre:
screen -S myproject
Tu terminal se limpia y ahora estás dentro de una sesión de Screen. Todo lo que ejecutes aquí persiste aunque tu conexión SSH se caiga.
Verifica que estás dentro de una sesión de Screen:
echo $STY
Esto muestra el nombre de la sesión. Si aparece algo como 12345.myproject, estás dentro de Screen. Si no muestra nada, no estás en una sesión.
Referencia de comandos de Screen
Todos los comandos de Screen empiezan con la tecla prefijo Ctrl-a, seguida de otra tecla. Este prefijo se llama "escape character" (carácter de escape).
| Atajo | Acción | Notas |
|---|---|---|
Ctrl-a d |
Separarse de la sesión | La sesión sigue ejecutándose |
Ctrl-a c |
Crear nueva ventana | Abre un nuevo shell |
Ctrl-a n |
Ventana siguiente | Avanza cíclicamente |
Ctrl-a p |
Ventana anterior | Retrocede cíclicamente |
Ctrl-a " |
Listar ventanas | Selecciona con flechas |
Ctrl-a A |
Renombrar ventana actual | Escribe el nombre, pulsa Enter |
Ctrl-a k |
Cerrar ventana actual | Pide confirmación |
Ctrl-a S |
Dividir horizontalmente | S mayúscula |
Ctrl-a | |
Dividir verticalmente | Carácter pipe |
Ctrl-a Tab |
Cambiar entre regiones | Cicla entre divisiones |
Ctrl-a X |
Cerrar región actual | X mayúscula |
Ctrl-a [ |
Entrar en modo copia | También Ctrl-a Esc |
Ctrl-a ] |
Pegar texto copiado | Pega desde el buffer |
Ctrl-a ? |
Mostrar atajos | Ayuda integrada |
¿Cómo separarse y reconectarse a una sesión de Screen?
Este es el flujo de trabajo principal. Inicias un proceso en Screen, te separas y el proceso sigue ejecutándose. Más tarde, te reconectas para verificar su estado.
Separarse de tu sesión actual:
Pulsa Ctrl-a y luego d.
Verás:
[detached from 12345.myproject]
Tu sesión ahora se ejecuta en segundo plano. Puedes cerrar tu conexión SSH sin problema.
Listar todas las sesiones:
screen -ls
Salida:
There are screens on:
12345.myproject (03/19/2026 02:15:30 PM) (Detached)
1 Sockets in /run/screen/S-your_user.
Reconectarse a una sesión:
screen -r myproject
Vuelves a tu sesión con toda la salida y los procesos intactos.
Si solo tienes una sesión separada, screen -r sin nombre también funciona.
¿Cómo forzar la reconexión cuando una sesión ya está conectada?
A veces una sesión aparece como (Attached) aunque no estés conectado. Esto ocurre cuando SSH se cae sin una desconexión limpia. Screen todavía cree que la conexión anterior está activa.
Usa esta tabla de decisión para elegir los flags correctos:
| Escenario | Comando | Qué hace |
|---|---|---|
| La sesión muestra "Attached" pero no estás conectado | screen -D -r myproject |
Fuerza la desconexión anterior y reconecta aquí |
| La sesión muestra "Attached" y quieres compartirla | screen -x myproject |
Conecta sin desconectar la otra conexión (multi-display) |
| La sesión muestra "Attached" y quieres tomarla | screen -d -r myproject |
Desconecta el lado remoto, reconecta localmente |
El caso más frecuente es screen -D -r. Resuelve conexiones obsoletas de sesiones SSH caídas.
Verifica el estado de la sesión tras reconectarte:
screen -ls
La sesión debería mostrar ahora (Attached).
¿Cómo mantener un proceso activo tras desconexión SSH?
Inicia una sesión de Screen, ejecuta tu proceso dentro y sepárate. El proceso sobrevive a desconexiones SSH, caídas de red e incluso al cierre de tu portátil.
Este es el flujo completo:
screen -S training
Dentro de la sesión, lanza tu proceso largo:
python3 train_model.py --epochs 100
Sepárate con Ctrl-a d. Verás:
[detached from 12345.training]
Cierra SSH. Ve a por un café. Vuelve más tarde:
ssh user@your-server
screen -r training
Tu trabajo de entrenamiento sigue ejecutándose y puedes ver toda la salida que produjo mientras estabas fuera.
¿Cómo gestionar múltiples ventanas en Screen?
Una sola sesión de Screen puede contener múltiples ventanas. Cada ventana es un shell independiente. Piensa en las ventanas como pestañas de un navegador web.
Crea una nueva ventana dentro de tu sesión:
Pulsa Ctrl-a c.
Se abre un nuevo shell. Tu ventana anterior sigue ahí. Cambia entre ventanas:
Ctrl-a nva a la ventana siguienteCtrl-a pva a la ventana anteriorCtrl-a 0hastaCtrl-a 9salta a una ventana por númeroCtrl-a "muestra la lista de todas las ventanas. Usa las flechas para seleccionar y pulsa Enter.
Renombra la ventana actual para identificarla mejor:
Pulsa Ctrl-a A, escribe un nombre y pulsa Enter.
Comprueba en qué ventana estás:
Pulsa Ctrl-a " para ver la lista de ventanas. La ventana actual tiene un asterisco.
Cierra una ventana escribiendo exit en su shell, o pulsa Ctrl-a k y confirma con y.
¿Cómo dividir el terminal en regiones?
Screen puede dividir tu terminal en múltiples regiones, cada una mostrando una ventana diferente. Esto es útil para monitorizar logs en un panel mientras trabajas en otro.
Construir un layout de monitorización paso a paso
Vamos a crear un layout de 3 paneles: un shell principal arriba, logs abajo a la izquierda y monitorización del sistema abajo a la derecha.
Paso 1: Inicia una sesión con nombre:
screen -S monitor
Paso 2: Divide horizontalmente. Pulsa Ctrl-a S (S mayúscula).
Tu terminal se divide en una región superior y una inferior. El cursor permanece en la región superior.
Paso 3: Muévete a la región inferior. Pulsa Ctrl-a Tab.
La región inferior está vacía. Necesitas asignarle una ventana.
Paso 4: Crea una nueva ventana en la región inferior. Pulsa Ctrl-a c.
Ahora tienes un shell en la región inferior.
Paso 5: Divide la región inferior verticalmente. Pulsa Ctrl-a | (carácter pipe).
La mitad inferior tiene ahora una sección izquierda y una derecha. Muévete a la nueva sección derecha con Ctrl-a Tab.
Paso 6: Crea otra ventana. Pulsa Ctrl-a c.
Paso 7: Inicia tus herramientas de monitorización. Navega entre regiones con Ctrl-a Tab:
- Región superior: tu shell de trabajo principal
- Inferior izquierda: ejecuta
tail -f /var/log/syslog - Inferior derecha: ejecuta
htop
Comandos de gestión de regiones
| Atajo | Acción |
|---|---|
Ctrl-a S |
Dividir horizontalmente |
Ctrl-a | |
Dividir verticalmente |
Ctrl-a Tab |
Ir a la siguiente región |
Ctrl-a X |
Cerrar región actual (la ventana sigue abierta) |
Ctrl-a Q |
Cerrar todas las regiones excepto la actual |
Ctrl-a :resize +5 |
Ampliar la región actual 5 líneas |
Ctrl-a :resize -5 |
Reducir la región actual 5 líneas |
Un detalle a tener en cuenta: Screen no guarda tu layout de regiones al separarte. Cuando te reconectas, todas las divisiones desaparecen y ves una sola ventana. Las ventanas en sí (y sus procesos) se conservan. Debes volver a dividir manualmente. Si quieres layouts persistentes, añade comandos de layout a tu .screenrc o considera tmux, que preserva los layouts de paneles al separarse.
¿Cómo usar el modo copia y el scrollback?
Por defecto, no puedes desplazarte hacia arriba en una sesión de Screen con la rueda del ratón ni con Shift-PgUp. Screen captura toda la entrada. Para ver la salida anterior, necesitas entrar en el modo copia (copy mode).
Entra en modo copia pulsando Ctrl-a [ o Ctrl-a Esc.
Ahora estás en un modo de navegación similar a vi:
| Tecla | Acción |
|---|---|
| Flechas | Mover cursor |
h/j/k/l |
Mover cursor (estilo vi) |
Ctrl-u |
Subir media página |
Ctrl-d |
Bajar media página |
0 |
Inicio de línea |
$ |
Fin de línea |
g |
Ir al inicio del scrollback |
G |
Ir al final del scrollback |
/ |
Buscar hacia adelante |
? |
Buscar hacia atrás |
Space |
Establecer marca (inicio/fin de selección) |
Enter |
Copiar texto seleccionado y salir del modo copia |
Esc |
Salir del modo copia sin copiar |
Para copiar texto: entra en modo copia, muévete al inicio del texto que quieres, pulsa Space para establecer la primera marca, muévete al final y pulsa Space de nuevo. El texto se copia al paste buffer de Screen.
Para pegar: pulsa Ctrl-a ].
El buffer de scrollback por defecto almacena 100 líneas. Es insuficiente para trabajo real. Auméntalo en tu .screenrc:
defscrollback 10000
Esto te da 10.000 líneas de scrollback por ventana.
¿Cómo configurar Screen con .screenrc?
Screen lee ~/.screenrc al iniciarse. Este archivo controla el comportamiento por defecto, los atajos de teclado, la barra de estado y las ventanas de inicio.
¿Cómo es un buen .screenrc?
Aquí tienes un .screenrc completo con cada directiva explicada:
# Disable the startup splash message
startup_message off
# Use bash as the default shell
shell /bin/bash
# Set scrollback buffer to 10,000 lines
defscrollback 10000
# Use 256-color terminal
term screen-256color
# Disable visual bell (use audible bell instead)
vbell off
# Enable alternate screen support (clears screen after less/vim exit)
altscreen on
# Status bar at the bottom of the screen
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][ %=%{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][ %{B}%Y-%m-%d %{W}%c %{g}]'
# Detach on hangup (SSH disconnect)
autodetach on
# Don't block the whole session if a window goes unresponsive
nonblock on
# Log new screen windows in utmp
deflogin on
# Start window numbering at 1 instead of 0
bind c screen 1
bind ^c screen 1
bind 0 select 10
# Named windows at startup
screen -t shell 1
screen -t logs 2
screen -t work 3
Crea este archivo:
nano ~/.screenrc
Pega la configuración anterior y guarda.
Cadena de formato hardstatus explicada
La línea hardstatus es la parte más potente (y confusa) de .screenrc. Esto es lo que significa cada token en el ejemplo:
| Token | Significado |
|---|---|
%{= kG} |
Establecer color: fondo negro, texto verde brillante |
%H |
Nombre del host |
%-Lw |
Todas las ventanas antes de la actual |
%{r}(%{W}%n*%f%t%{r}) |
Ventana actual: paréntesis rojos, número de ventana blanco + flags + título |
%+Lw |
Todas las ventanas después de la actual |
%Y-%m-%d |
Fecha en formato AAAA-MM-DD |
%c |
Hora actual en HH:MM |
Códigos de color: k negro, r rojo, g verde, y amarillo, b azul, m magenta, c cian, w blanco. En mayúscula para variantes brillantes/negrita.
Inicia una nueva sesión para ver la barra de estado:
screen -S test
Deberías ver una barra de estado verde en la parte inferior mostrando tu hostname, la lista de ventanas y la fecha y hora actuales.
Cambiar la tecla de escape
Si Ctrl-a interfiere con tu flujo de trabajo (también es "ir al inicio de línea" en bash), puedes reasignarla:
# Use Ctrl-j as the escape key instead of Ctrl-a
escape ^Jj
Tras este cambio, todos los comandos de Screen usan Ctrl-j en lugar de Ctrl-a. Elige una tecla que uses raramente.
¿Cuáles son los flujos de trabajo habituales con GNU Screen en un VPS?
Mantener un despliegue en ejecución
screen -S deploy
./deploy.sh --production
# Ctrl-a d to detach
Comprueba después:
screen -r deploy
Monitorizar múltiples archivos de log
screen -S logs
Dentro de la sesión:
Ctrl-a Spara dividir horizontalmente- En la región superior:
tail -f /var/log/nginx/access.log Ctrl-a Tabpara ir a la inferiorCtrl-a cpara una nueva ventanatail -f /var/log/nginx/error.log
Ejecutar un trabajo largo de entrenamiento (desarrolladores IA)
screen -S training
python3 -u train.py --model llama --epochs 50 2>&1 | tee training.log
# Ctrl-a d to detach
El flag -u desactiva el buffering de salida de Python para que veas la salida en tiempo real al reconectarte. Redirigir con tee guarda la salida en un archivo como respaldo.
Reconexión rápida tras caída de SSH
Si tu SSH se cae mientras estás dentro de Screen, simplemente reconéctate:
ssh user@your-server
screen -D -r
screen -D -r encuentra tu sesión, fuerza la desconexión de la conexión obsoleta y te reconecta.
GNU Screen vs tmux: ¿cuál deberías usar?
Screen y tmux son ambos terminal multiplexers. Resuelven el mismo problema central. Aquí tienes una comparación directa:
| Característica | GNU Screen | tmux |
|---|---|---|
| Primera versión | 1987 | 2007 |
| Licencia | GPL-3.0 | ISC (tipo BSD) |
| Desarrollo activo | Lento (5.0 lanzado en agosto 2024 tras años de inactividad) | Activo (versiones regulares) |
| Persistencia de layout de paneles | Se pierde al separarse | Se conserva al separarse |
| Prefijo de tecla por defecto | Ctrl-a |
Ctrl-b |
| Configuración | .screenrc (sintaxis propia) |
.tmux.conf (sintaxis propia) |
| Ecosistema de plugins | Ninguno | Amplio (tpm, tmux-resurrect, etc.) |
| Estado en RHEL/Fedora | Eliminado desde RHEL 8 | Incluido por defecto |
| Soporte de puerto serie | Sí (screen /dev/ttyUSB0) |
No |
| Recursos de aprendizaje | Consolidados pero anticuados | Abundantes y actuales |
Cuándo usar Screen:
- Necesitas acceso al puerto serie (
screen /dev/ttyUSB0 115200) - Estás en un sistema antiguo donde Screen está preinstalado y tmux no
- Necesitas un flujo simple de separar/reconectar y nada más
Cuándo usar tmux:
- Quieres layouts de paneles persistentes que sobrevivan a la desconexión
- Quieres un ecosistema de plugins activo
- Estás en RHEL 8+ o Fedora (Screen no está en los repositorios)
- Necesitas creación de ventanas/paneles por script
Ambas herramientas manejan el caso de uso central (mantener procesos vivos tras desconexión SSH) igual de bien. Si empiezas de cero, tmux tiene más inercia y mejores valores por defecto. Si Screen ya forma parte de tu flujo de trabajo, no hay razón urgente para cambiar. Consulta nuestro tutorial de tmux para un recorrido completo.
Solución de problemas frecuentes de Screen
"There is a screen on ... (Attached)" pero no estás conectado
Esto ocurre tras un crash de SSH. La conexión anterior no se desconectó limpiamente.
screen -D -r session_name
Esto fuerza la desconexión de la conexión fantasma y reconecta tu terminal.
Sesiones muertas en la lista
A veces las sesiones aparecen como (Dead) tras un reinicio o crash del servidor.
screen -wipe
Salida:
There are screens on:
12345.old_session (Dead ???)
Removed dead screens.
1 socket wiped out.
Esto elimina archivos de socket obsoletos. Ejecuta screen -ls para confirmar que han desaparecido.
El terminal está congelado / no acepta entrada
Probablemente pulsaste Ctrl-a s por accidente. Esta es la señal XOFF de control de flujo que pausa la salida del terminal.
Solución:
Ctrl-a q
Esto envía XON para reanudar la salida. Si nunca usas el control de flujo, desactívalo en tu .screenrc:
defflow off
Screen muestra caracteres ilegibles
Tu terminal y Screen no coinciden en codificación o soporte de colores. Añade a tu .screenrc:
defutf8 on
term screen-256color
Después inicia una nueva sesión. Las sesiones existentes no recogen cambios de .screenrc.
¿Dónde están los logs de Screen?
Screen no escribe logs en el registro del sistema. Para activar el logging por ventana:
Ctrl-a H
Esto activa/desactiva el logging de la ventana actual. Los logs se guardan en screenlog.N en el directorio donde iniciaste la sesión. La N corresponde al número de ventana.
Para comprobar si Screen se está ejecutando a nivel de sistema:
ps aux | grep screen
Referencia de flags CLI frecuentes
| Flag | Descripción | Ejemplo |
|---|---|---|
-S name |
Iniciar una sesión con nombre | screen -S myapp |
-r [name] |
Reconectar a una sesión separada | screen -r myapp |
-d -r name |
Desconectar remoto, reconectar aquí | screen -d -r myapp |
-D -r name |
Forzar desconexión y reconectar | screen -D -r myapp |
-x name |
Conectar a una sesión ya conectada (multi-display) | screen -x myapp |
-ls |
Listar todas las sesiones | screen -ls |
-wipe |
Eliminar sesiones muertas | screen -wipe |
-X command |
Enviar un comando a una sesión en ejecución | screen -S myapp -X quit |
-dmS name |
Iniciar una sesión separada con nombre | screen -dmS daemon |
-L |
Activar logging desde el inicio | screen -L -S myapp |
Iniciar una sesión en modo separado (-dmS) es útil para scripts y unidades systemd que necesitan lanzar sesiones de Screen sin un terminal interactivo.
Copyright 2026 Virtua.Cloud. Todos los derechos reservados. Este contenido es una obra original del equipo de Virtua.Cloud. La reproduccion, republicacion o redistribucion sin permiso escrito esta prohibida.
¿Listo para probarlo?
Despliega tu propio servidor en segundos. Linux, Windows o FreeBSD.
Ver planes VPS