Le guide complet des commandes GNU Screen sous Linux
GNU Screen est un multiplexeur de terminal qui vous permet de créer, gérer et maintenir plusieurs sessions shell depuis une seule fenêtre de terminal. Lorsque vous vous détachez d’une session Screen, chaque processus en cours d’exécution à l’intérieur continue de s’exécuter — survivant aux déconnexions SSH, aux coupures réseau et aux fermetures de terminal — et reste entièrement accessible dès que vous vous reconnectez.
Pour quiconque gère des serveurs distants via SSH, cette seule capacité élimine toute une catégorie de risques opérationnels : une connexion interrompue ne tue plus une migration de base de données en cours, un travail de compilation de plusieurs heures, ou un processus de surveillance de journaux en direct.
Pourquoi GNU Screen reste pertinent dans l’administration Linux moderne
Des outils comme tmux ont gagné en popularité, mais Screen est livré comme package par défaut ou quasi-défaut sur pratiquement toutes les distributions Linux d’entreprise et les images serveur minimales. Lorsque vous vous connectez en SSH à une machine bare-metal ou à une instance VPS Hosting fraîchement provisionnée, Screen est presque toujours disponible sans installation supplémentaire. Sa faible empreinte mémoire et sa conformité POSIX en font le choix pragmatique dans les environnements contraints ou verrouillés.
Capacités principales en un coup d’œil :
- Persistance des sessions : Les processus survivent à la déconnexion du terminal, au délai d’expiration SSH et aux plantages côté client
- Multiplexage de fenêtres : Plusieurs fenêtres shell indépendantes au sein d’une seule session
- Partage de session : Deux utilisateurs peuvent se connecter simultanément à la même session pour un débogage collaboratif
- Accès à la console série : Screen peut se connecter directement aux périphériques `/dev/ttyS*` pour la gestion hors bande des serveurs
- Démarrage scriptable : Le fichier de configuration `.screenrc` permet des environnements multi-fenêtres entièrement automatisés au lancement
GNU Screen vs. tmux : Choisir le bon multiplexeur
Les deux outils résolvent le même problème fondamental mais avec des philosophies de conception différentes. Le tableau ci-dessous couvre les distinctions qui comptent dans les environnements de production.
| Fonctionnalité | GNU Screen | tmux |
|---|
| — | — | — |
|---|
| Disponibilité par défaut | Pré-installé sur la plupart des distributions | Nécessite une installation explicite |
|---|
| Fichier de configuration | `~/.screenrc` | `~/.tmux.conf` |
|---|
| Division en panneaux (horizontal/vertical) | Limitée (vertical uniquement via les régions) | Division en panneaux complète et flexible |
|---|
| Partage de session | Multi-attachement natif | Multi-attachement natif |
|---|
| Scripts / automatisation | Injection de commandes `screen -X` | `tmux send-keys`, API riche |
|---|
| Empreinte mémoire | Très faible | Faible |
|---|
| Support des périphériques série | Oui (`screen /dev/ttyS0`) | Non |
|---|
| Personnalisation de la barre d’état | Modérée (hardstatus) | Très flexible |
|---|
| Mode copie | Style vi | Style vi ou emacs |
|---|
| Écosystème de plugins | Aucun | Actif (TPM) |
|---|
| Cas d’utilisation idéal | Serveurs minimaux, consoles série, environnements legacy | Stations de travail développeur, mises en page complexes |
|---|
Conseils pratiques : Sur un Serveur Dédié sans interface graphique exécutant des tâches en arrière-plan à long terme, la simplicité et la disponibilité universelle de Screen en font le choix le moins contraignant. Pour un développeur qui a besoin de panneaux divisés et d’une barre d’état riche, tmux l’emporte.
Installation de GNU Screen
Screen est pré-installé sur la plupart des distributions. Vérifiez avec :
“`bash
screen –version
“`
S’il est absent, installez-le en utilisant le gestionnaire de packages approprié :
Debian / Ubuntu :
“`bash
sudo apt-get update && sudo apt-get install screen
“`
CentOS / RHEL 7 :
“`bash
sudo yum install screen
“`
CentOS Stream / RHEL 8+ / AlmaLinux / Rocky Linux :
“`bash
sudo dnf install screen
“`
Fedora :
“`bash
sudo dnf install screen
“`
Arch Linux :
“`bash
sudo pacman -S screen
“`
Alpine Linux (courant dans les conteneurs) :
“`bash
apk add screen
“`
Après l’installation, aucun démon ou service n’est requis. Screen fonctionne entièrement comme un processus en espace utilisateur.
Démarrer une session Screen
Session de base
“`bash
screen
“`
Cela vous place dans une nouvelle session avec un shell standard. L’interface est indiscernable d’un terminal normal jusqu’à ce que vous utilisiez le préfixe de commande de Screen.
Session nommée (recommandée)
“`bash
screen -S session_name
“`
Nommez toujours vos sessions en production. Les sessions sans nom ne sont identifiées que par leur PID, ce qui rend le rattachement sujet aux erreurs lorsque plusieurs sessions sont en cours d’exécution.
Conseil de convention de nommage : Utilisez des noms descriptifs qui reflètent la charge de travail — `screen -S db-migration`, `screen -S log-monitor`, `screen -S build-php82`. Cela s’avère précieux lorsque vous revenez sur un serveur après plusieurs heures d’absence.
Démarrer une session et exécuter une commande immédiatement
“`bash
screen -S backup-job bash -c 'rsync -avz /data/ user@remote:/backup/ && echo DONE'
“`
La session persiste même après la fin de la commande, vous permettant d’inspecter la sortie ultérieurement.
Démarrer une session en mode détaché
“`bash
screen -dmS headless-job ./long_running_script.sh
“`
Les indicateurs `-dm` créent la session et la détachent immédiatement. C’est le bon modèle pour lancer des tâches en arrière-plan depuis cron ou des scripts de déploiement — le processus s’exécute dans une session Screen nommée et récupérable sans nécessiter de terminal interactif.
Le préfixe de commande : comprendre Ctrl+A
Chaque raccourci clavier de Screen commence par la séquence d’échappement `Ctrl+A`. Cette frappe indique à Screen que le caractère suivant est une commande, et non une entrée pour le programme en cours d’exécution. Comprendre ce modèle est essentiel avant de mémoriser les raccourcis individuels.
Si vous exécutez un programme dans Screen qui utilise lui-même `Ctrl+A` (par exemple, certains éditeurs de texte ou la bibliothèque `readline`), vous pouvez envoyer un `Ctrl+A` littéral au programme interne en appuyant deux fois sur `Ctrl+A` (`Ctrl+A, Ctrl+A`).
Détacher et rattacher des sessions
Se détacher d’une session en cours
“`
Ctrl+A, D
“`
La session continue de s’exécuter en arrière-plan. Vous êtes renvoyé au shell parent. Aucun processus à l’intérieur de la session n’est interrompu.
Lister toutes les sessions
“`bash
screen -ls
“`
Exemple de sortie :
“`
There are screens on:
14231.db-migration (Detached)
14089.log-monitor (Attached)
13901.build-php82 (Detached)
3 Sockets in /var/run/screen/S-deploy.
“`
Le statut `Attached` signifie qu’un autre terminal est actuellement connecté à cette session. `Detached` signifie qu’elle est en cours d’exécution mais qu’aucun terminal n’est connecté.
Se rattacher à une session spécifique
“`bash
screen -r db-migration
“`
Ou par PID :
“`bash
screen -r 14231
“`
Forcer le rattachement à une session déjà attachée
Si une session affiche `Attached` mais que vous devez la reprendre (par exemple, après qu’une connexion SSH périmée l’a laissée verrouillée) :
“`bash
screen -d -r log-monitor
“`
L’indicateur `-d` détache de force l’autre connexion avant de vous rattacher. C’est une technique de récupération essentielle lorsqu’une session SSH précédente s’est terminée sans se détacher proprement.
Multi-attachement : deux utilisateurs sur la même session
“`bash
screen -x session_name
“`
Les deux terminaux voient une sortie identique en temps réel. C’est inestimable pour le débogage en binôme ou les présentations guidées de serveur avec un collègue — les deux parties observent et peuvent interagir avec le même shell.
Gérer les fenêtres au sein d’une session
Une seule session Screen peut contenir un nombre illimité de fenêtres. Chaque fenêtre est un shell (ou processus) indépendant.
Créer une nouvelle fenêtre
“`
Ctrl+A, C
“`
Naviguer entre les fenêtres
| Raccourci | Action |
|---|
| — | — |
|---|
| `Ctrl+A, N` | Fenêtre suivante |
|---|
| `Ctrl+A, P` | Fenêtre précédente |
|---|
| `Ctrl+A, 0–9` | Accéder directement à une fenêtre par numéro |
|---|
| `Ctrl+A, "` | Liste interactive de toutes les fenêtres |
|---|
| `Ctrl+A, '` | Invite à saisir un numéro ou un nom de fenêtre |
|---|
Renommer une fenêtre
“`
Ctrl+A, A
“`
Tapez le nouveau nom et appuyez sur Entrée. Les noms de fenêtres significatifs sont affichés dans la barre hardstatus, rendant la navigation beaucoup plus rapide dans les sessions avec de nombreuses fenêtres.
Fermer une fenêtre
Tapez `exit` ou appuyez sur `Ctrl+D` dans le shell de la fenêtre. Lorsque la dernière fenêtre d’une session est fermée, la session se termine.
Diviser l’écran en régions
Screen prend en charge la division du terminal en plusieurs régions visibles, chacune affichant simultanément une fenêtre différente.
Division horizontale (haut/bas)
“`
Ctrl+A, S
“`
Division verticale (gauche/droite)
“`
Ctrl+A, |
“`
Remarque : La division verticale nécessite Screen 4.1.0 ou une version ultérieure.
Se déplacer entre les régions
“`
Ctrl+A, Tab
“`
Assigner une fenêtre à une région
Après avoir déplacé le focus vers une région, utilisez `Ctrl+A, "` pour sélectionner la fenêtre à afficher.
Supprimer une région
“`
Ctrl+A, X (remove current region)
Ctrl+A, Q (remove all regions except current)
“`
Distinction importante : Supprimer une région ne ferme pas la fenêtre qui s’y exécute. La fenêtre continue de s’exécuter ; vous arrêtez simplement de l’afficher dans cette division.
Copier et coller (mode défilement)
Screen maintient un tampon de défilement pour chaque fenêtre. Pour y accéder :
“`
Ctrl+A, [
“`
Cela entre en mode copie. La navigation utilise les touches de style vi :
- `h`, `j`, `k`, `l` — déplacer le curseur
- `Ctrl+F` / `Ctrl+B` — page suivante / précédente
- `/` — recherche vers l’avant
- `?` — recherche vers l’arrière
- `Space` — marquer le début de la sélection
- `Space` (à nouveau) — marquer la fin et copier dans le tampon
Pour coller le texte copié :
“`
Ctrl+A, ]
“`
Le tampon de défilement par défaut est de 100 lignes. Pour la surveillance des journaux serveur, augmentez cette valeur de manière significative dans `.screenrc` (abordé ci-dessous).
Verrouiller une session Screen
“`
Ctrl+A, X
“`
La session se verrouille immédiatement et demande votre mot de passe utilisateur Unix avant d’autoriser l’accès. Utilisez ceci lorsque vous vous éloignez d’un terminal connecté à un serveur sensible — c’est plus rapide que de fermer la connexion SSH et de se rattacher.
Envoyer des commandes à une session sans s’y attacher
L’indicateur `-X` vous permet d’injecter des commandes Screen dans une session en cours depuis l’extérieur :
“`bash
screen -S db-migration -X stuff "tail -f /var/log/mysql/error.logn"
“`
La commande `stuff` envoie des frappes à la fenêtre active de la session nommée. Le `n` simule l’appui sur Entrée. Cette technique est utilisée dans les scripts d’automatisation de déploiement pour interagir avec des sessions Screen à longue durée d’exécution sans nécessiter d’attachement humain.
Configurer Screen avec .screenrc
Le fichier `~/.screenrc` est lu au démarrage et contrôle le comportement par défaut de Screen. Un `.screenrc` bien conçu transforme Screen d’un simple multiplexeur en un environnement véritablement ergonomique.
Créez-le ou modifiez-le :
“`bash
nano ~/.screenrc
“`
Configuration .screenrc de production recommandée
“`bash
Disable the startup message
startup_message off
Set scrollback buffer to 10,000 lines (critical for log monitoring)
defscrollback 10000
Enable UTF-8
defutf8 on
Set default shell
shell -$SHELL
Visual bell instead of audible
vbell on
Hardstatus bar: shows hostname, window list, and current time
hardstatus on
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c %{g}]'
Bind F2 to create a new window
bindkey -k k2 screen
Change escape key to Ctrl+B (useful if Ctrl+A conflicts with other tools)
escape ^Bb
Auto-detach on hangup signal (critical for SSH session drops)
autodetach on
Disable flow control (prevents Ctrl+S from freezing the terminal)
defflow off
“`
La directive `autodetach on` est indispensable pour l’utilisation SSH. Sans elle, si votre connexion SSH se coupe de manière inattendue (plutôt que vous appuyiez sur `Ctrl+A, D`), Screen peut terminer la session au lieu de la détacher. Avec `autodetach on`, un signal SIGHUP (envoyé lors de la déconnexion SSH) déclenche un détachement propre plutôt que la fin de la session.
`defflow off` évite la frustration courante d’appuyer accidentellement sur `Ctrl+S` et de sembler geler le terminal. De nombreux administrateurs perdent des minutes à dépanner un terminal « gelé » qui est simplement en pause de contrôle de flux XON/XOFF.
Cas d’utilisation pratiques en production
Exécuter une migration de base de données en toute sécurité
“`bash
screen -S db-migrate
Inside the session:
php artisan migrate –force 2>&1 | tee /var/log/migration-$(date +%F).log
Detach: Ctrl+A, D
Reattach later to check progress:
screen -r db-migrate
“`
Si la connexion SSH se coupe en cours de migration, le processus continue. Vous vous rattachez et trouvez soit qu’il est toujours en cours d’exécution, soit qu’il s’est terminé avec la sortie complète préservée dans le journal et le tampon de défilement.
Surveiller plusieurs fichiers journaux simultanément
“`bash
screen -S monitoring
Window 0: nginx access log
tail -f /var/log/nginx/access.log
Ctrl+A, C — new window
Window 1: application error log
tail -f /var/log/app/error.log
Ctrl+A, C — new window
Window 2: system messages
journalctl -f
“`
Naviguez entre les fenêtres avec `Ctrl+A, "` pour voir quel journal génère de l’activité.
Script de déploiement automatisé avec Screen
“`bash
#!/bin/bash
screen -dmS deploy bash -c '
git pull origin main &&
composer install –no-dev &&
php artisan config:cache &&
systemctl reload php8.2-fpm &&
echo "Deployment complete at $(date)" >> /var/log/deploy.log
'
echo "Deployment started in background screen session 'deploy'"
echo "Monitor with: screen -r deploy"
“`
Ce modèle est particulièrement utile sur un VPS avec cPanel où vous pouvez gérer plusieurs déploiements d’applications depuis un seul shell d’administration.
Accès à la console série
“`bash
screen /dev/ttyS0 115200
“`
Screen fait également office d’émulateur de terminal série. C’est la technique standard pour accéder à la console d’un serveur physique, d’un commutateur réseau ou d’un appareil embarqué via une connexion série — sans nécessiter minicom ou picocom.
Pièges courants et comment les éviter
Sessions Screen imbriquées : Si vous vous connectez en SSH depuis une session Screen sur la Machine A vers la Machine B et démarrez Screen là-bas, vous avez maintenant deux couches de gestion `Ctrl+A`. La session Screen interne capture `Ctrl+A` avant que la session externe ne le voie. Pour envoyer `Ctrl+A` à la session externe, appuyez sur `Ctrl+A, Ctrl+A`. Pour éviter toute confusion, modifiez la touche d’échappement de la session interne dans son `.screenrc` en utilisant `escape ^Bb`.
Sessions mortes ne se nettoyant pas : Si Screen plante ou si l’hôte redémarre de manière incorrecte, des fichiers socket peuvent persister dans `/var/run/screen/` ou `~/.screen/`, affichant les sessions comme `Dead`. Nettoyez-les avec :
“`bash
screen -wipe
“`
Session appartenant à root vs. utilisateur : Une session Screen démarrée en tant que root ne peut pas être rattachée par un utilisateur non-root, et vice versa. Si vous utilisez `sudo su` dans une session Screen puis vous détachez, rattachez-vous en tant que root ou via `sudo screen -r`.
Incompatibilité de la variable `TERM` : Certaines applications dans Screen se comportent incorrectement parce que `TERM` est défini sur `screen` ou `screen-256color` plutôt que `xterm-256color`. Si une application TUI s’affiche incorrectement, vérifiez avec `echo $TERM` et remplacez dans `.screenrc` avec `term xterm-256color` si nécessaire.
Épuisement du tampon de défilement : Le défilement par défaut de 100 lignes est insuffisant pour toute surveillance sérieuse des journaux. Définissez toujours `defscrollback 10000` ou plus dans `.screenrc` sur les serveurs utilisés pour l’administration active.
Référence rapide : commandes Screen essentielles
| Action | Commande / Raccourci |
|---|
| — | — |
|---|
| Démarrer une nouvelle session | `screen` |
|---|
| Démarrer une session nommée | `screen -S name` |
|---|
| Démarrer une session détachée | `screen -dmS name` |
|---|
| Lister les sessions | `screen -ls` |
|---|
| Se rattacher par nom | `screen -r name` |
|---|
| Forcer le rattachement | `screen -d -r name` |
|---|
| Multi-attachement | `screen -x name` |
|---|
| Se détacher | `Ctrl+A, D` |
|---|
| Nouvelle fenêtre | `Ctrl+A, C` |
|---|
| Fenêtre suivante | `Ctrl+A, N` |
|---|
| Fenêtre précédente | `Ctrl+A, P` |
|---|
| Liste des fenêtres | `Ctrl+A, "` |
|---|
| Renommer une fenêtre | `Ctrl+A, A` |
|---|
| Division horizontale | `Ctrl+A, S` |
|---|
| Division verticale | `Ctrl+A, | ` |
|---|
| Se déplacer entre les régions | `Ctrl+A, Tab` |
|---|
| Entrer en mode copie/défilement | `Ctrl+A, [` |
|---|
| Coller le tampon | `Ctrl+A, ]` |
|---|
| Verrouiller la session | `Ctrl+A, X` |
|---|
| Fermer la fenêtre courante | `Ctrl+A, K` |
|---|
| Terminer la session entière | `Ctrl+A, ` |
|---|
| Envoyer une commande à une session | `screen -S name -X stuff "cmdn"` |
|---|
| Nettoyer les sessions mortes | `screen -wipe` |
|---|
Contexte de déploiement : Screen dans les environnements d’hébergement géré
Screen fonctionne au niveau du shell, le rendant compatible avec tout environnement Linux où vous avez un accès SSH. Cela inclut les serveurs bare-metal, les Serveurs Dédiés et les instances VPS Hosting standard. Il n’est pas disponible dans les environnements d’hébergement partagé où l’accès SSH est restreint ou absent.
Pour les charges de travail impliquant un traitement en arrière-plan persistant — comme l’inférence de modèles accélérée par GPU, le prétraitement de grands ensembles de données ou les tâches par lots à longue durée d’exécution — combiner Screen avec un environnement GPU Hosting vous offre à la fois les ressources de calcul et la persistance de session nécessaires pour gérer des tâches de plusieurs heures de manière fiable.
Si votre infrastructure comprend des services orientés web en parallèle avec des traitements en arrière-plan, associer les tâches backend gérées par Screen à des Certificats SSL correctement sécurisés sur vos points de terminaison publics garantit que l’ensemble de la pile — à la fois la couche applicative visible et le backend administratif — fonctionne avec des contrôles de sécurité appropriés.
Matrice de décision : quand utiliser Screen
Utilisez Screen lorsque :
- Vous avez besoin de persistance de session sur un serveur où seul Screen est disponible
- Vous accédez à une console série ou à un appareil embarqué
- Vous exécutez un seul processus de longue durée et n’avez pas besoin de panneaux divisés
- Vous êtes sur un système minimal basé sur Alpine ou BusyBox
- Vous devez partager une session avec un autre administrateur en temps réel
Envisagez tmux à la place lorsque :
- Vous avez besoin d’une division flexible des panneaux horizontaux et verticaux
- Vous souhaitez un écosystème de plugins pour améliorer la barre d’état
- Vous construisez un environnement de station de travail développeur avec des mises en page complexes
- Votre équipe a standardisé la gestion de la configuration tmux
N’utilisez ni l’un ni l’autre (utilisez systemd ou supervisor à la place) lorsque :
- L’objectif est uniquement d’exécuter un service en arrière-plan qui doit survivre aux redémarrages
- Vous n’avez pas besoin d’un accès interactif au processus en cours d’exécution
- Le processus doit redémarrer automatiquement en cas d’échec
Liste de contrôle des points clés techniques
Avant de vous fier à Screen dans un environnement de production, vérifiez les points suivants :
- `autodetach on` est présent dans `~/.screenrc` — sans cela, les coupures SSH peuvent tuer les sessions
- `defscrollback` est défini à au moins 5000 lignes pour les charges de travail à journaux intensifs
- `defflow off` est défini pour éviter les gels accidentels par `Ctrl+S`
- Toutes les sessions à longue durée d’exécution sont nommées (`-S flag`) — ne vous fiez jamais à l’identification par PID uniquement
- Vous connaissez la commande de récupération `screen -d -r` pour les sessions attachées périmées
- Les sockets de sessions mortes sont périodiquement nettoyés avec `screen -wipe`
- Si vous exécutez en tant que plusieurs utilisateurs, vous comprenez la limite de propriété de session root/utilisateur
- La variable `TERM` est vérifiée si les applications TUI s’affichent incorrectement dans Screen
- Pour les tâches en arrière-plan entièrement automatisées, `screen -dmS` est utilisé plutôt que `nohup` ou un simple `&`, vous donnant une session récupérable et inspectable
FAQ
GNU Screen survit-il à un redémarrage du serveur ?
Non. Les sessions Screen sont maintenues en mémoire en tant que processus. Un redémarrage complet du serveur termine toutes les sessions Screen et leurs processus enfants. Pour les processus qui doivent survivre aux redémarrages, utilisez des unités systemd ou un superviseur de processus comme Supervisor. Screen est le bon outil pour la persistance interactive à travers les déconnexions, pas à travers les redémarrages.
Quelle est la différence entre `screen -r` et `screen -x` ?
`screen -r` se rattache à une session détachée — il échoue si la session est déjà attachée ailleurs. `screen -x` s’attache à une session quel que soit son état d’attachement actuel, permettant à deux terminaux de partager la même session simultanément. Utilisez `-x` pour le débogage collaboratif ; utilisez `-r` pour le rattachement standard.
Comment faire défiler vers le haut dans une fenêtre Screen ?
Entrez en mode copie avec `Ctrl+A, [`, puis utilisez les touches fléchées, `Page Up`/`Page Down`, ou la navigation de style vi (`Ctrl+F`, `Ctrl+B`). Appuyez sur `Escape` ou `q` pour quitter le mode copie. Assurez-vous que `defscrollback` dans `.screenrc` est défini suffisamment haut pour conserver l’historique dont vous avez besoin.
Screen peut-il être utilisé sans privilèges root ?
Oui. Screen s’exécute entièrement en tant qu’utilisateur invocateur. Aucun privilège root n’est requis pour créer, attacher ou gérer des sessions. Les fichiers socket sont stockés dans un répertoire par utilisateur (généralement `/var/run/screen/S-username/`). La seule exception est si Screen lui-même n’est pas installé — l’installation nécessite un accès au gestionnaire de packages, ce qui nécessite généralement root ou sudo.
Pourquoi ma session Screen affiche-t-elle « Attached » alors que personne n’est connecté ?
Cela se produit généralement lorsqu’une connexion SSH s’est interrompue sans envoyer un SIGHUP propre — par exemple, en raison d’un délai d’expiration réseau plutôt que d’une déconnexion explicite. La session conserve son état `Attached` parce que Screen n’a jamais reçu le signal de déconnexion. Utilisez `screen -d -r session_name` pour détacher de force la connexion fantôme et vous rattacher proprement.
