# Referencia Rápida de GNU Screen

*Sesiones, ventanas, divisiones, modo copia y compartir*

> Source: GNU Screen Manual (gnu.org/software/screen) · MIT

## Gestión de Sesiones

### Crear y Listar Sesiones

```
screen                        # new unnamed session
screen -S work                # new session named "work"
screen -ls                    # list all sessions
screen -list                  # same as -ls
```

### Comandos de Sesión

| Command | Description |
|---------|-------------|
| `screen -S name` | Iniciar nueva sesión con nombre |
| `screen -r name` | Reconectar a sesión desconectada |
| `screen -x name` | Conectar a sesión ya activa (compartir) |
| `screen -d name` | Desconectar sesión remota |
| `screen -d -r name` | Desconectar en otro lugar, reconectar aquí |
| `screen -D -RR` | Forzar desconexión y reconexión (agresivo) |
| `screen -ls` | Listar todas las sesiones con PIDs |
| `screen -wipe` | Limpiar sesiones muertas |

## Ventanas

### Básicos de Ventanas

| Command | Description |
|---------|-------------|
| `Ctrl-a c` | Crear nueva ventana |
| `Ctrl-a n` | Siguiente ventana |
| `Ctrl-a p` | Ventana anterior |
| `Ctrl-a 0-9` | Cambiar a ventana por número |
| `Ctrl-a "` | Listar todas las ventanas (interactivo) |
| `Ctrl-a '` | Cambiar a ventana por nombre/número |
| `Ctrl-a A` | Renombrar la ventana actual |
| `Ctrl-a k` | Cerrar la ventana actual |

### Gestión de Ventanas

| Command | Description |
|---------|-------------|
| `Ctrl-a w` | Mostrar lista de ventanas en la barra de estado |
| `Ctrl-a Ctrl-a` | Alternar entre las últimas dos ventanas |
| `Ctrl-a N` | Mostrar número y nombre de la ventana |
| `exit / Ctrl-d` | Cerrar ventana (salir del shell) |

## División y Regiones

### Comandos de División

| Command | Description |
|---------|-------------|
| `Ctrl-a S` | Dividir horizontalmente (arriba/abajo) |
| `Ctrl-a \|` | Dividir verticalmente (izquierda/derecha) |
| `Ctrl-a Tab` | Mover foco a la siguiente región |
| `Ctrl-a X` | Cerrar la región actual |
| `Ctrl-a Q` | Cerrar todas las regiones excepto la actual |

### Flujo de Trabajo con Regiones

```
Ctrl-a S             # split horizontal
Ctrl-a Tab           # move to new region
Ctrl-a c             # create window in region
Ctrl-a :resize 20   # set region to 20 lines
```

## Modo Copia

### Desplazamiento y Copia

| Command | Description |
|---------|-------------|
| `Ctrl-a [` | Entrar al modo copia/desplazamiento |
| `Space` | Iniciar/terminar selección (en modo copia) |
| `Enter` | Copiar selección y salir del modo copia |
| `Ctrl-a ]` | Pegar texto copiado |
| `h/j/k/l` | Mover cursor (teclas vi en modo copia) |
| `Ctrl-u / Ctrl-d` | Desplazar arriba/abajo media página |
| `/ or ?` | Buscar hacia adelante/atrás |
| `Esc` | Salir del modo copia |

### Flujo de Trabajo de Copia

```
Ctrl-a [         # enter copy mode
Space            # mark start (navigate first)
Space            # mark end + copy (navigate first)
Ctrl-a ]         # paste into current window
```

## Desconectar y Reconectar

### Desconectar

| Command | Description |
|---------|-------------|
| `Ctrl-a d` | Desconectar la sesión actual |
| `Ctrl-a D D` | Desconectar y cerrar sesión |
| `Ctrl-a z` | Suspender screen (como Ctrl-Z) |
| `screen -d PID` | Desconectar remotamente la sesión por PID |

### Reconectar

```
screen -r                 # reattach (if only one session)
screen -r work            # reattach by name
screen -r 12345           # reattach by PID
screen -d -r work         # steal session from other terminal
```

### Flujos de Trabajo Persistentes

```
# Start long-running task, detach, reconnect later
screen -S build
make -j4 all        # start build
Ctrl-a d             # detach, go home
screen -r build      # reattach later
```

## Compartir

### Modo Multiusuario

```
# Host enables multiuser
Ctrl-a :multiuser on
Ctrl-a :acladd alice    # grant access to user alice
# Alice attaches
screen -x hostuser/sessionname
```

### Control de Acceso

| Command | Description |
|---------|-------------|
| `:multiuser on` | Habilitar modo multiusuario |
| `:acladd user` | Otorgar acceso completo al usuario |
| `:aclchg user -w '#'` | Hacer al usuario de solo lectura (todas las ventanas) |
| `:acldel user` | Eliminar acceso del usuario |
| `screen -x user/sess` | Conectar a la sesión compartida |

## Configuración

### Esenciales de ~/.screenrc

```
startup_message off          # skip splash screen
defscrollback 10000          # scrollback buffer lines
hardstatus alwayslastline
hardstatus string '%{gk}%H %{wk}%?%-Lw%?%{bw}%n*%f %t%{wk}%?%+Lw%?'
shell -$SHELL                # use login shell
```

### Configuraciones Útiles

| Command | Description |
|---------|-------------|
| `startup_message off` | Suprimir mensaje de inicio |
| `defscrollback N` | Establecer búfer de desplazamiento (predeterminado 100) |
| `escape ^Bb` | Cambiar tecla prefijo a Ctrl-b |
| `shelltitle '$ \|bash'` | Establecer títulos de ventana automáticamente |
| `caption always '%n %t'` | Mostrar siempre el pie con info de ventana |
| `autodetach on` | Desconectar automáticamente en colgada (predeterminado) |
| `vbell on` | Usar campana visual en lugar de audible |

## Patrones Comunes

### Configuración de Desarrollo

```
# Auto-create windows in .screenrc
screen -t editor 0 vim
screen -t server 1 python -m http.server
screen -t shell  2 bash
select 0                     # start on editor window
```

### Registro y Monitoreo

```
Ctrl-a H                     # toggle logging to screenlog.N
Ctrl-a M                     # monitor window for activity
Ctrl-a _                     # monitor window for silence
```

### Referencia Rápida

| Command | Description |
|---------|-------------|
| `Ctrl-a ?` | Mostrar todos los atajos de teclado |
| `Ctrl-a :help` | Ayuda integrada |
| `Ctrl-a :source file` | Cargar archivo de configuración |
| `Ctrl-a :screen cmd` | Ejecutar comando en nueva ventana |
| `Ctrl-a :quit` | Cerrar todas las ventanas y salir de la sesión |
