> La lista completa de artículos está en [llms.txt](https://docs.f3cloud.com/llms.txt). Cada página tiene versión en Markdown, basta con añadir .md a su dirección. Esta página en Markdown: [https://docs.f3cloud.com/es/software-setup/screen-linux-tool.md](https://docs.f3cloud.com/es/software-setup/screen-linux-tool.md).

# El comando screen en Linux, tareas en segundo plano y atajos de teclado

Cómo usar Screen en Linux. Instalación, sesiones que siguen funcionando cuando te desconectas de SSH, varias ventanas y pantalla dividida, chuleta de atajos de teclado y solución de los problemas más comunes.

**Screen** es un programa que mantiene tus comandos en marcha aunque te hayas desconectado del servidor. Normalmente, si cierras la ventana de SSH o se te cae internet, todo lo que estaba ejecutándose en el terminal se detiene. Dentro de Screen el proceso sigue funcionando, y puedes volver a él más tarde desde cualquier dispositivo.

Screen viene muy bien cuando necesitas lanzar una tarea larga, por ejemplo una actualización del sistema, una copia de seguridad o un bot de Telegram, y también para tener varios terminales en una sola conexión.

***

### Instalación

#### Ubuntu y Debian

```bash
# Instalamos Screen desde el repositorio estándar
apt-get install -y screen
```

#### AlmaLinux, CentOS Stream

```bash
# Screen está en el repositorio EPEL, así que primero lo activamos
dnf install -y epel-release

# Instalamos Screen
dnf install -y screen
```

Puedes comprobar que todo se ha instalado con el comando `screen --version`.

***

### Cómo funcionan los controles

Dentro de Screen todo se hace con combinaciones de teclas, y cada una empieza por <kbd>Ctrl</kbd> + <kbd>A</kbd>. Primero pulsa <kbd>Ctrl</kbd> + <kbd>A</kbd>, suelta las dos teclas y solo entonces pulsa la letra que necesites. Por ejemplo, «<kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>d</kbd>» te desconecta de la sesión.

> **Las mayúsculas y minúsculas importan.**
>
> Una letra mayúscula y una minúscula dan comandos distintos. Por ejemplo, <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>Shift</kbd> + <kbd>S</kbd> divide la pantalla.\
> En cambio, la <kbd>s</kbd> minúscula congela la salida de la ventana.
>
> Si la ventana deja de responder, pulsa <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>q</kbd>. Vigila la distribución del teclado y el Bloq Mayús.

***

### 1. Crea una sesión

Inicia Screen y ponle a la sesión un nombre claro desde el principio, para encontrarla fácilmente después.

```bash
# Creamos una sesión llamada backup
screen -S backup
```

Se abrirá un terminal limpio, que ya es una ventana dentro de Screen. Ejecuta en él el comando que necesites. En nuestro ejemplo es `ping`, que seguirá funcionando hasta que alguien lo detenga.

<figure><img src="https://docs.f3cloud.com/img/screen-session.png" alt="Comando ping ejecutándose dentro de una sesión de Screen"><figcaption><p>El comando funciona dentro de la sesión backup</p></figcaption></figure>

***

### 2. Desconéctate de la sesión

Pulsa <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>d</kbd>. Volverás al terminal normal y verás un mensaje como `[detached from 5084.backup]`.

El comando de dentro de la sesión sigue funcionando. Ya puedes cerrar SSH y apagar el ordenador con tranquilidad.

***

### 3. Consulta la lista de sesiones

```bash
# Mostramos todas las sesiones de Screen del servidor
screen -ls
```

<figure><img src="https://docs.f3cloud.com/img/screen-detached.png" alt="Mensaje de desconexión y lista de sesiones de Screen"><figcaption><p>Desconexión de la sesión y lista de sesiones</p></figcaption></figure>

En la lista se ve el número y el nombre de cada sesión, por ejemplo `5084.backup`, cuándo se creó y su estado:

* **Detached** – ahora mismo nadie está conectado a la sesión y funciona en segundo plano;
* **Attached** – alguien está conectado a la sesión en este momento.

***

### 4. Vuelve a la sesión

```bash
# Nos conectamos a la sesión backup
screen -r backup
```

Se abrirá la misma ventana en la que lo dejaste, y el comando seguirá funcionando como si nada. Si solo hay una sesión, no hace falta indicar el nombre, basta con `screen -r`.

Si ya estás conectado a la sesión desde otra ventana, por ejemplo porque se cortó la conexión y la antigua se ha quedado «colgada», usa el comando de abajo.

```bash
# Desconectamos la sesión de la conexión antigua y nos conectamos de nuevo
screen -d -r backup
```

Y para ver una misma sesión desde dos sitios a la vez, por ejemplo junto con un compañero, conéctate con `screen -x backup`.

***

### 5. Trabaja con varias ventanas

En una sesión puedes tener varias ventanas y pasar de una a otra como si fueran pestañas.

* <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>c</kbd> – crear una ventana nueva.
* <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>Shift</kbd> + <kbd>A</kbd> – cambiar el nombre de la ventana actual.
* <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>"</kbd> – abrir la lista de ventanas. Elige una con las flechas y pulsa <kbd>Enter</kbd>.
* <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>n</kbd> o <kbd>p</kbd> – ventana siguiente o anterior.
* <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego un número del <kbd>0</kbd> al <kbd>9</kbd> – ir a la ventana con ese número.
* <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>k</kbd> – cerrar la ventana actual.

<figure><img src="https://docs.f3cloud.com/img/screen-windows.png" alt="Lista de ventanas de una sesión de Screen"><figcaption><p>Lista de ventanas de una sesión</p></figcaption></figure>

***

### 6. Divide la pantalla

Screen puede mostrar varias ventanas a la vez. Por ejemplo, a la izquierda va un comando largo y a la derecha ves la carga del servidor.

1. Pulsa <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>|</kbd> para dividir la pantalla en vertical, o <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>Shift</kbd> + <kbd>S</kbd> para dividirla en horizontal.
2. Pasa a la nueva mitad con <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>Tab</kbd>.
3. La nueva mitad está vacía. Abre en ella una ventana pulsando <kbd>Ctrl</kbd> + <kbd>A</kbd> y el número de la ventana, o crea una nueva con <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>c</kbd>.

<figure><img src="https://docs.f3cloud.com/img/screen-split.png" alt="Pantalla de Screen dividida en dos partes"><figcaption><p>A la izquierda funciona ping, a la derecha top</p></figcaption></figure>

Para cerrar la mitad actual pulsa <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>Shift</kbd> + <kbd>X</kbd>.\
Para quedarte solo con ella pulsa <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>Shift</kbd> + <kbd>Q</kbd>.\
Las ventanas en sí no se cierran.

***

### 7. Cierra la sesión

Cuando termines la tarea, cierra todas las ventanas con `exit` y la sesión terminará sola. También puedes cerrar la sesión entera desde fuera, sin conectarte a ella.

```bash
# Cerramos la sesión backup junto con todas sus ventanas
screen -S backup -X quit
```

***

### Trucos útiles

#### Lanzar directamente en segundo plano

Para ejecutar un comando en Screen sin entrar en la sesión, usa las opciones `-dm`. Es muy práctico para lanzar bots y scripts.

```bash
# Creamos la sesión bot y ejecutamos en ella un script sin conectarnos
screen -dmS bot python3 bot.py
```

#### Desplazarse hacia arriba

Dentro de Screen la rueda del ratón normalmente no recorre el historial. Pulsa <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>[</kbd>, y desplázate con las teclas <kbd>PgUp</kbd> y <kbd>PgDn</kbd> o con las flechas. Para salir del modo de desplazamiento pulsa <kbd>Esc</kbd>.

#### Guardar la salida en un archivo

Si inicias Screen con la opción `-L`, todo lo que aparezca en la ventana se irá guardando en el archivo `screenlog.0` de la carpeta actual.

***

### Chuleta

| Comando | Qué hace |
| --- | --- |
| `screen -S nombre` | Crear una sesión con nombre |
| `screen -ls` | Mostrar todas las sesiones |
| `screen -r nombre` | Volver a una sesión |
| `screen -d -r nombre` | Quitarle la sesión a una conexión antigua |
| `screen -x nombre` | Conectarse a una sesión entre dos personas |
| `screen -dmS nombre comando` | Ejecutar un comando en una sesión en segundo plano |
| `screen -S nombre -X quit` | Cerrar una sesión |
| <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>d</kbd> | Desconectarse sin detener los comandos |
| <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>c</kbd> | Ventana nueva |
| <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>"</kbd> | Lista de ventanas |
| <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>n</kbd> / <kbd>p</kbd> | Ventana siguiente y anterior |
| <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>\|</kbd> / <kbd>Shift</kbd> + <kbd>S</kbd> | Dividir la pantalla |
| <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>Tab</kbd> | Pasar a otra parte de la pantalla |
| <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>[</kbd> | Desplazarse por el historial |
| <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>?</kbd> | Ayuda con todas las combinaciones |

***

### Preguntas frecuentes

<details>

<summary>Aparece «There is no screen to be resumed matching»</summary>

No hay ninguna sesión con ese nombre. Comprueba el nombre exacto con `screen -ls`. Si la lista está vacía, la sesión ya ha terminado, por ejemplo porque el comando que había dentro acabó o porque el servidor se reinició.

</details>

<details>

<summary>La sesión aparece en la lista, pero screen -r no se conecta</summary>

Si junto a la sesión pone **Attached**, ya hay otra ventana conectada a ella, y a menudo es una conexión antigua que se cortó. Conéctate con `screen -d -r nombre`, que desconecta la ventana antigua y te abre la sesión a ti.

</details>

<details>

<summary>¿Se conservan las sesiones al reiniciar el servidor?</summary>

No. Al reiniciar se detienen todas las sesiones de Screen y los comandos que se ejecutaban en ellas. Para programas que tienen que funcionar siempre e iniciarse solos tras un reinicio, es mejor configurar un servicio de systemd.

</details>

<details>

<summary>Ctrl + A ya no lleva el cursor al principio de la línea de comandos</summary>

Screen intercepta esa combinación. Para enviar el propio <kbd>Ctrl</kbd> + <kbd>A</kbd> al programa de la ventana, pulsa <kbd>Ctrl</kbd> + <kbd>A</kbd> y luego <kbd>a</kbd>.

</details>

<details>

<summary>¿En qué se diferencia Screen de tmux?</summary>

Los dos programas resuelven lo mismo. Screen es más sencillo y muchos administradores ya lo conocen.\
tmux es más moderno y más flexible de configurar.

Para que un comando no se detenga al desconectarte de SSH, te sirve cualquiera de los dos.

</details>

***

### Nuestros recursos

**Canal de Telegram:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Web del hosting:** [https://f3cloud.com](https://f3cloud.com/es)
