# GNU Screen Riferimento Rapido

*Sessioni, finestre, split, modalità copia e condivisione*

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

## Gestione delle Sessioni

### Crea ed Elenca Sessioni

```
screen                        # nuova sessione senza nome
screen -S work                # nuova sessione chiamata "work"
screen -ls                    # elenca tutte le sessioni
screen -list                  # uguale a -ls
```

### Comandi di Sessione

| Command | Description |
|---------|-------------|
| `screen -S name` | Avvia nuova sessione con nome |
| `screen -r name` | Riattacca a sessione staccata |
| `screen -x name` | Attacca a sessione già attiva (condivisione) |
| `screen -d name` | Stacca sessione remota |
| `screen -d -r name` | Stacca altrove, riattacca qui |
| `screen -D -RR` | Forza stacco e riattacco (aggressivo) |
| `screen -ls` | Elenca tutte le sessioni con PID |
| `screen -wipe` | Pulisce le sessioni inattive |

## Finestre

### Basi delle Finestre

| Command | Description |
|---------|-------------|
| `Ctrl-a c` | Crea nuova finestra |
| `Ctrl-a n` | Finestra successiva |
| `Ctrl-a p` | Finestra precedente |
| `Ctrl-a 0-9` | Passa alla finestra per numero |
| `Ctrl-a "` | Elenca tutte le finestre (interattivo) |
| `Ctrl-a '` | Passa alla finestra per nome/numero |
| `Ctrl-a A` | Rinomina la finestra corrente |
| `Ctrl-a k` | Chiude la finestra corrente |

### Gestione delle Finestre

| Command | Description |
|---------|-------------|
| `Ctrl-a w` | Mostra lista finestre nella barra di stato |
| `Ctrl-a Ctrl-a` | Alterna tra le ultime due finestre |
| `Ctrl-a N` | Mostra numero e nome della finestra |
| `exit / Ctrl-d` | Chiude finestra (esci dalla shell) |

## Split e Regioni

### Comandi di Split

| Command | Description |
|---------|-------------|
| `Ctrl-a S` | Divide orizzontalmente (sopra/sotto) |
| `Ctrl-a \|` | Divide verticalmente (sinistra/destra) |
| `Ctrl-a Tab` | Sposta il focus alla regione successiva |
| `Ctrl-a X` | Chiude la regione corrente |
| `Ctrl-a Q` | Chiude tutte le regioni tranne la corrente |

### Flusso di Lavoro con le Regioni

```
Ctrl-a S             # divide orizzontalmente
Ctrl-a Tab           # sposta nella nuova regione
Ctrl-a c             # crea finestra nella regione
Ctrl-a :resize 20   # imposta la regione a 20 righe
```

## Modalità Copia

### Scorrimento e Copia

| Command | Description |
|---------|-------------|
| `Ctrl-a [` | Entra in modalità copia/scorrimento |
| `Space` | Avvia/termina selezione (in modalità copia) |
| `Enter` | Copia la selezione ed esce dalla modalità copia |
| `Ctrl-a ]` | Incolla il testo copiato |
| `h/j/k/l` | Sposta il cursore (tasti vi in modalità copia) |
| `Ctrl-u / Ctrl-d` | Scorre su/giù di mezza pagina |
| `/ or ?` | Cerca avanti/indietro |
| `Esc` | Esci dalla modalità copia |

### Flusso di Lavoro per la Copia

```
Ctrl-a [         # entra in modalità copia
Space            # segna l'inizio (naviga prima)
Space            # segna la fine + copia (naviga prima)
Ctrl-a ]         # incolla nella finestra corrente
```

## Stacco e Riattacco

### Stacco

| Command | Description |
|---------|-------------|
| `Ctrl-a d` | Stacca la sessione corrente |
| `Ctrl-a D D` | Stacca e disconnetti |
| `Ctrl-a z` | Sospendi screen (come Ctrl-Z) |
| `screen -d PID` | Stacca remotamente sessione per PID |

### Riattacco

```
screen -r                 # riattacca (se c'è solo una sessione)
screen -r work            # riattacca per nome
screen -r 12345           # riattacca per PID
screen -d -r work         # sottrai sessione da altro terminale
```

### Flussi di Lavoro Persistenti

```
# Avvia task di lunga durata, stacca, riconnetti dopo
screen -S build
make -j4 all        # avvia build
Ctrl-a d             # stacca, vai a casa
screen -r build      # riattacca dopo
```

## Condivisione

### Modalità Multi-Utente

```
# L'host abilita multiuser
Ctrl-a :multiuser on
Ctrl-a :acladd alice    # concede accesso all'utente alice
# Alice si connette
screen -x hostuser/sessionname
```

### Controllo degli Accessi

| Command | Description |
|---------|-------------|
| `:multiuser on` | Abilita modalità multi-utente |
| `:acladd user` | Concede accesso completo all'utente |
| `:aclchg user -w '#'` | Rende l'utente di sola lettura (tutte le finestre) |
| `:acldel user` | Rimuove accesso utente |
| `screen -x user/sess` | Connetti a sessione condivisa |

## Configurazione

### Elementi Essenziali di ~/.screenrc

```
startup_message off          # salta schermata di avvio
defscrollback 10000          # righe di buffer di scorrimento
hardstatus alwayslastline
hardstatus string '%{gk}%H %{wk}%?%-Lw%?%{bw}%n*%f %t%{wk}%?%+Lw%?'
shell -$SHELL                # usa shell di login
```

### Impostazioni Utili

| Command | Description |
|---------|-------------|
| `startup_message off` | Sopprime il messaggio di avvio |
| `defscrollback N` | Imposta il buffer di scorrimento (default 100) |
| `escape ^Bb` | Cambia il tasto prefisso in Ctrl-b |
| `shelltitle '$ \|bash'` | Imposta automaticamente i titoli delle finestre |
| `caption always '%n %t'` | Mostra sempre la caption con info finestra |
| `autodetach on` | Auto-stacca al hangup (default attivo) |
| `vbell on` | Usa campanello visivo invece di audio |

## Pattern Comuni

### Setup per lo Sviluppo

```
# Crea finestre automaticamente in .screenrc
screen -t editor 0 vim
screen -t server 1 python -m http.server
screen -t shell  2 bash
select 0                     # parti dalla finestra editor
```

### Logging e Monitoraggio

```
Ctrl-a H                     # attiva/disattiva log in screenlog.N
Ctrl-a M                     # monitora attività nella finestra
Ctrl-a _                     # monitora silenzio nella finestra
```

### Riferimento Rapido

| Command | Description |
|---------|-------------|
| `Ctrl-a ?` | Mostra tutti i binding dei tasti |
| `Ctrl-a :help` | Aiuto integrato |
| `Ctrl-a :source file` | Carica file di configurazione |
| `Ctrl-a :screen cmd` | Esegui comando in nuova finestra |
| `Ctrl-a :quit` | Chiudi tutte le finestre ed esci dalla sessione |
