# Référence rapide GNU Screen

*Sessions, fenêtres, divisions, mode copie et partage*

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

## Gestion des sessions

### Créer et lister des sessions

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

### Commandes de session

| Command | Description |
|---------|-------------|
| `screen -S name` | Démarrer une nouvelle session nommée |
| `screen -r name` | Rattacher une session détachée |
| `screen -x name` | Se rattacher à une session déjà attachée (partage) |
| `screen -d name` | Détacher une session distante |
| `screen -d -r name` | Détacher ailleurs, se rattacher ici |
| `screen -D -RR` | Forcer le détachement et le rattachement (agressif) |
| `screen -ls` | Lister toutes les sessions avec leurs PID |
| `screen -wipe` | Nettoyer les sessions mortes |

## Fenêtres

### Bases des fenêtres

| Command | Description |
|---------|-------------|
| `Ctrl-a c` | Créer une nouvelle fenêtre |
| `Ctrl-a n` | Fenêtre suivante |
| `Ctrl-a p` | Fenêtre précédente |
| `Ctrl-a 0-9` | Passer à la fenêtre par numéro |
| `Ctrl-a "` | Lister toutes les fenêtres (interactif) |
| `Ctrl-a '` | Passer à la fenêtre par nom/numéro |
| `Ctrl-a A` | Renommer la fenêtre actuelle |
| `Ctrl-a k` | Fermer la fenêtre actuelle |

### Gestion des fenêtres

| Command | Description |
|---------|-------------|
| `Ctrl-a w` | Afficher la liste des fenêtres dans la barre d'état |
| `Ctrl-a Ctrl-a` | Basculer entre les deux dernières fenêtres |
| `Ctrl-a N` | Afficher le numéro et le nom de la fenêtre |
| `exit / Ctrl-d` | Fermer la fenêtre (quitter le shell) |

## Division et régions

### Commandes de division

| Command | Description |
|---------|-------------|
| `Ctrl-a S` | Diviser horizontalement (haut/bas) |
| `Ctrl-a \|` | Diviser verticalement (gauche/droite) |
| `Ctrl-a Tab` | Déplacer le focus vers la région suivante |
| `Ctrl-a X` | Fermer la région actuelle |
| `Ctrl-a Q` | Fermer toutes les régions sauf la courante |

### Flux de travail des régions

```
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
```

## Mode copie

### Défilement et copie

| Command | Description |
|---------|-------------|
| `Ctrl-a [` | Entrer en mode copie/défilement |
| `Space` | Début/fin de sélection (en mode copie) |
| `Enter` | Copier la sélection et quitter le mode copie |
| `Ctrl-a ]` | Coller le texte copié |
| `h/j/k/l` | Déplacer le curseur (touches vi en mode copie) |
| `Ctrl-u / Ctrl-d` | Faire défiler d'une demi-page vers le haut/bas |
| `/ or ?` | Rechercher vers l'avant/arrière |
| `Esc` | Quitter le mode copie |

### Flux de travail de copie

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

## Détachement et rattachement

### Détacher

| Command | Description |
|---------|-------------|
| `Ctrl-a d` | Détacher la session actuelle |
| `Ctrl-a D D` | Détacher et se déconnecter |
| `Ctrl-a z` | Suspendre screen (comme Ctrl-Z) |
| `screen -d PID` | Détacher à distance une session par PID |

### Se rattacher

```
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
```

### Flux de travail persistants

```
# 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
```

## Partage

### Mode multi-utilisateur

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

### Contrôle d'accès

| Command | Description |
|---------|-------------|
| `:multiuser on` | Activer le mode multi-utilisateur |
| `:acladd user` | Accorder un accès complet à l'utilisateur |
| `:aclchg user -w '#'` | Mettre l'utilisateur en lecture seule (toutes les fenêtres) |
| `:acldel user` | Supprimer l'accès de l'utilisateur |
| `screen -x user/sess` | Se rattacher à une session partagée |

## Configuration

### Essentiels 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
```

### Paramètres utiles

| Command | Description |
|---------|-------------|
| `startup_message off` | Supprimer le message de démarrage |
| `defscrollback N` | Définir le tampon de défilement (défaut 100) |
| `escape ^Bb` | Changer la touche préfixe en Ctrl-b |
| `shelltitle '$ \|bash'` | Définir automatiquement les titres de fenêtres |
| `caption always '%n %t'` | Toujours afficher la légende avec les infos de fenêtre |
| `autodetach on` | Détacher automatiquement en cas de déconnexion (défaut activé) |
| `vbell on` | Utiliser une alerte visuelle plutôt qu'auditive |

## Motifs courants

### Configuration de développement

```
# 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
```

### Journalisation et surveillance

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

### Référence rapide

| Command | Description |
|---------|-------------|
| `Ctrl-a ?` | Afficher toutes les liaisons de touches |
| `Ctrl-a :help` | Aide intégrée |
| `Ctrl-a :source file` | Charger un fichier de configuration |
| `Ctrl-a :screen cmd` | Exécuter une commande dans une nouvelle fenêtre |
| `Ctrl-a :quit` | Fermer toutes les fenêtres et quitter la session |
