Comment utiliser GNU Screen sur un VPS Linux
GNU Screen maintient vos sessions terminal actives après une déconnexion SSH. Ce tutoriel couvre l'installation, la gestion des sessions, les fenêtres multiples, le mode copie et la configuration .screenrc sur Debian 12 et Ubuntu 24.04.
Vous vous connectez en SSH à votre serveur, lancez un processus long, et la connexion tombe. Le processus meurt. GNU Screen résout ce problème. Il exécute des sessions terminal qui persistent indépendamment de votre connexion SSH. Vous pouvez détacher la session, vous déconnecter, revenir des heures plus tard et reprendre exactement là où vous en étiez.
Qu'est-ce que GNU Screen ?
GNU Screen est un multiplexeur de terminal (terminal multiplexer). Il crée des sessions terminal virtuelles qui tournent sur le serveur, indépendamment de votre connexion SSH. Dans une seule session Screen, vous pouvez ouvrir plusieurs fenêtres, diviser votre terminal en régions et faire défiler l'historique de sortie.
Screen s'intercale entre votre client SSH et le shell. Quand vous détachez une session Screen, tous les programmes à l'intérieur continuent de tourner. Au rattachement, vous retrouvez la même sortie, les mêmes processus en cours, le même état. C'est indispensable pour tout travail sur un VPS distant où les connexions SSH peuvent tomber sans prévenir.
Screen existe depuis 1987. Il est disponible dans les dépôts par défaut de toutes les grandes distributions Linux. Les versions actuelles sont 4.9.0 sur Debian 12 et 4.9.1 sur Ubuntu 24.04.
Comment installer GNU Screen sur Debian et Ubuntu ?
Screen est disponible dans les dépôts par défaut de Debian 12 et Ubuntu 24.04. L'installation se fait avec une seule commande apt. Sur la plupart des images VPS minimales, il n'est pas préinstallé.
Mettez à jour l'index des paquets et installez Screen :
sudo apt update && sudo apt install -y screen
Contrôlez l'installation :
screen --version
Sur Debian 12, vous verrez :
Screen version 4.09.00 (GNU) 30-Jan-21
Sur Ubuntu 24.04 :
Screen version 4.09.01 (GNU) 20-Aug-23
Si un numéro de version s'affiche, Screen est prêt à l'emploi.
Comment démarrer et nommer une session Screen ?
Pour démarrer une nouvelle session Screen, exécutez screen. Mais démarrer sans nom rend l'identification plus difficile par la suite. Nommez toujours vos sessions avec le flag -S.
Démarrez une session nommée :
screen -S myproject
Votre terminal se vide et vous êtes maintenant dans une session Screen. Tout ce que vous exécutez ici persiste même si votre connexion SSH tombe.
Assurez-vous que vous êtes dans une session Screen :
echo $STY
Cela affiche le nom de la session. Si vous voyez quelque chose comme 12345.myproject, vous êtes dans Screen. Si rien ne s'affiche, vous n'êtes pas dans une session.
Référence des commandes Screen
Toutes les commandes Screen commencent par la touche préfixe Ctrl-a, suivie d'une autre touche. Ce préfixe s'appelle le « caractère d'échappement » (escape character).
| Raccourci | Action | Notes |
|---|---|---|
Ctrl-a d |
Détacher la session | La session continue de tourner |
Ctrl-a c |
Créer une nouvelle fenêtre | Ouvre un nouveau shell |
Ctrl-a n |
Fenêtre suivante | Parcourt vers l'avant |
Ctrl-a p |
Fenêtre précédente | Parcourt vers l'arrière |
Ctrl-a " |
Lister les fenêtres | Sélectionnez avec les flèches |
Ctrl-a A |
Renommer la fenêtre courante | Tapez le nouveau nom, appuyez sur Entrée |
Ctrl-a k |
Fermer la fenêtre courante | Demande confirmation |
Ctrl-a S |
Diviser horizontalement | S majuscule |
Ctrl-a | |
Diviser verticalement | Caractère pipe |
Ctrl-a Tab |
Basculer entre les régions | Parcourt les divisions |
Ctrl-a X |
Fermer la région courante | X majuscule |
Ctrl-a [ |
Entrer en mode copie | Aussi Ctrl-a Esc |
Ctrl-a ] |
Coller le texte copié | Colle depuis le buffer |
Ctrl-a ? |
Afficher les raccourcis | Aide intégrée |
Comment détacher et rattacher une session Screen ?
C'est le workflow de base.
Détacher votre session en cours :
Appuyez sur Ctrl-a puis d.
Vous verrez :
[detached from 12345.myproject]
Votre session tourne maintenant en arrière-plan. Vous pouvez fermer votre connexion SSH en toute sécurité.
Lister toutes les sessions :
screen -ls
Sortie :
There are screens on:
12345.myproject (03/19/2026 02:15:30 PM) (Detached)
1 Sockets in /run/screen/S-your_user.
Rattacher une session :
screen -r myproject
Vous retrouvez votre session avec toutes les sorties et processus intacts.
Si vous n'avez qu'une seule session détachée, screen -r sans nom fonctionne aussi.
Comment forcer le rattachement quand une session est déjà attachée ?
Parfois une session s'affiche comme (Attached) alors que vous n'êtes pas connecté. Cela arrive quand SSH tombe sans déconnexion propre. Screen pense toujours que l'ancienne connexion est active.
Utilisez ce tableau pour choisir les bons flags :
| Scénario | Commande | Ce qu'elle fait |
|---|---|---|
| La session affiche « Attached » mais vous n'êtes pas connecté | screen -D -r myproject |
Force le détachement de l'ancienne connexion, puis se rattache ici |
| La session affiche « Attached » et vous voulez la partager | screen -x myproject |
Se rattache sans détacher l'autre connexion (multi-display) |
| La session affiche « Attached », vous voulez la récupérer | screen -d -r myproject |
Détache le côté distant, se rattache localement |
Le cas le plus courant est screen -D -r. Il gère les connexions fantômes des sessions SSH plantées.
Confirmez l'état de la session après le rattachement :
screen -ls
La session devrait maintenant afficher (Attached).
Comment garder un processus actif après une déconnexion SSH ?
Le processus survit aux déconnexions SSH, aux coupures réseau, et même à la fermeture de votre ordinateur portable.
screen -S training
Dans la session, lancez votre processus long :
python3 train_model.py --epochs 100
Détachez avec Ctrl-a d. Vous verrez :
[detached from 12345.training]
Fermez SSH. Allez prendre un café. Revenez plus tard :
ssh user@your-server
screen -r training
Votre tâche d'entraînement tourne toujours, et vous pouvez voir toute la sortie produite pendant votre absence.
Comment gérer plusieurs fenêtres dans Screen ?
Une seule session Screen peut contenir plusieurs fenêtres. Chaque fenêtre est un shell indépendant. Pensez aux fenêtres comme des onglets dans un navigateur web.
Créez une nouvelle fenêtre dans votre session :
Appuyez sur Ctrl-a c.
Un nouveau shell s'ouvre. Votre fenêtre précédente est toujours là. Naviguez entre les fenêtres :
Ctrl-a npasse à la fenêtre suivanteCtrl-a ppasse à la fenêtre précédenteCtrl-a 0àCtrl-a 9saute directement à une fenêtre par numéroCtrl-a "affiche la liste de toutes les fenêtres. Utilisez les flèches pour en sélectionner une et appuyez sur Entrée.
Renommez la fenêtre courante pour une identification plus facile :
Appuyez sur Ctrl-a A, tapez un nom, et appuyez sur Entrée.
Vérifiez dans quelle fenêtre vous êtes :
Appuyez sur Ctrl-a " pour voir la liste des fenêtres. La fenêtre courante est marquée d'un astérisque.
Fermez une fenêtre en tapant exit dans son shell, ou appuyez sur Ctrl-a k et confirmez avec y.
Comment diviser le terminal en régions ?
Screen peut diviser votre terminal en plusieurs régions, chacune affichant une fenêtre différente. C'est utile pour surveiller des logs dans un panneau tout en travaillant dans un autre.
Construire un layout de surveillance étape par étape
Construisons un layout à 3 panneaux : un shell principal en haut, des logs en bas à gauche, et la surveillance système en bas à droite.
Étape 1 : Démarrez une session nommée :
screen -S monitor
Étape 2 : Divisez horizontalement. Appuyez sur Ctrl-a S (S majuscule).
Votre terminal se divise en une région haute et une région basse. Le curseur reste dans la région haute.
Étape 3 : Passez à la région basse. Appuyez sur Ctrl-a Tab.
La région basse est vide. Vous devez lui assigner une fenêtre.
Étape 4 : Créez une nouvelle fenêtre dans la région basse. Appuyez sur Ctrl-a c.
Vous avez maintenant un shell dans la région basse.
Étape 5 : Divisez la région basse verticalement. Appuyez sur Ctrl-a | (caractère pipe).
La moitié basse a maintenant une section gauche et une section droite. Passez à la nouvelle section droite avec Ctrl-a Tab.
Étape 6 : Créez une autre fenêtre. Appuyez sur Ctrl-a c.
Étape 7 : Lancez vos outils de surveillance. Naviguez entre les régions avec Ctrl-a Tab :
- Région haute : votre shell de travail principal
- Bas-gauche : exécutez
tail -f /var/log/syslog - Bas-droite : exécutez
htop
Commandes de gestion des régions
| Raccourci | Action |
|---|---|
Ctrl-a S |
Diviser horizontalement |
Ctrl-a | |
Diviser verticalement |
Ctrl-a Tab |
Passer à la région suivante |
Ctrl-a X |
Fermer la région courante (la fenêtre reste ouverte) |
Ctrl-a Q |
Fermer toutes les régions sauf la courante |
Ctrl-a :resize +5 |
Agrandir la région courante de 5 lignes |
Ctrl-a :resize -5 |
Réduire la région courante de 5 lignes |
Point à retenir : Screen ne sauvegarde pas votre layout de régions quand vous détachez. Quand vous vous rattachez, toutes les divisions ont disparu et vous voyez une seule fenêtre. Les fenêtres elles-mêmes (et leurs processus) sont préservées. Vous devez re-diviser manuellement. Si vous voulez des layouts persistants, ajoutez des commandes de layout à votre .screenrc ou envisagez Comment utiliser tmux sur un VPS Linux, qui préserve les layouts de panneaux au détachement.
Comment utiliser le mode copie et le scrollback ?
Par défaut, vous ne pouvez pas remonter dans une session Screen avec la molette de la souris ou Shift-PgUp. Screen capture toutes les entrées. Pour consulter les sorties précédentes, vous devez entrer en mode copie (copy mode).
Entrez en mode copie en appuyant sur Ctrl-a [ ou Ctrl-a Esc.
Vous êtes maintenant dans un mode de navigation similaire à vi :
| Touche | Action |
|---|---|
| Flèches | Déplacer le curseur |
h/j/k/l |
Déplacer le curseur (style vi) |
Ctrl-u |
Remonter d'une demi-page |
Ctrl-d |
Descendre d'une demi-page |
0 |
Début de ligne |
$ |
Fin de ligne |
g |
Aller en haut du scrollback |
G |
Aller en bas du scrollback |
/ |
Rechercher vers l'avant |
? |
Rechercher vers l'arrière |
Espace |
Définir un marqueur (début/fin de sélection) |
Entrée |
Copier le texte sélectionné et quitter le mode copie |
Échap |
Quitter le mode copie sans copier |
Pour copier du texte : entrez en mode copie, déplacez-vous au début du texte voulu, appuyez sur Espace pour définir le premier marqueur, déplacez-vous à la fin, appuyez à nouveau sur Espace. Le texte est copié dans le buffer de collage de Screen.
Pour coller : appuyez sur Ctrl-a ].
Le buffer de scrollback par défaut contient 100 lignes. C'est trop peu pour un usage réel. Augmentez-le dans votre .screenrc :
defscrollback 10000
Cela vous donne 10 000 lignes de scrollback par fenêtre.
Comment configurer Screen avec .screenrc ?
Screen lit ~/.screenrc au démarrage. Ce fichier contrôle le comportement par défaut, les raccourcis clavier, la barre de statut et les fenêtres de démarrage.
À quoi ressemble un bon .screenrc ?
Un .screenrc complet avec chaque directive expliquée :
# Disable the startup splash message
startup_message off
# Use bash as the default shell
shell /bin/bash
# Set scrollback buffer to 10,000 lines
defscrollback 10000
# Use 256-color terminal
term screen-256color
# Disable visual bell (use audible bell instead)
vbell off
# Enable alternate screen support (clears screen after less/vim exit)
altscreen on
# Status bar at the bottom of the screen
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][ %=%{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][ %{B}%Y-%m-%d %{W}%c %{g}]'
# Detach on hangup (SSH disconnect)
autodetach on
# Don't block the whole session if a window goes unresponsive
nonblock on
# Log new screen windows in utmp
deflogin on
# Start window numbering at 1 instead of 0
bind c screen 1
bind ^c screen 1
bind 0 select 10
# Named windows at startup
screen -t shell 1
screen -t logs 2
screen -t work 3
Créez ce fichier :
nano ~/.screenrc
Collez la configuration ci-dessus et sauvegardez.
Explication de la chaîne de format hardstatus
La ligne hardstatus est la partie la plus puissante (et la plus déroutante) du .screenrc. Chaque token de l'exemple :
| Token | Signification |
|---|---|
%{= kG} |
Définir la couleur : fond noir, texte vert vif |
%H |
Nom d'hôte du système |
%-Lw |
Toutes les fenêtres avant la fenêtre courante |
%{r}(%{W}%n*%f%t%{r}) |
Fenêtre courante : parenthèses rouges, numéro de fenêtre blanc + flags + titre |
%+Lw |
Toutes les fenêtres après la fenêtre courante |
%Y-%m-%d |
Date au format AAAA-MM-JJ |
%c |
Heure courante au format HH:MM |
Codes couleur : k noir, r rouge, g vert, y jaune, b bleu, m magenta, c cyan, w blanc. En majuscule pour les variantes vives/gras.
Démarrez une nouvelle session pour voir la barre de statut :
screen -S test
Vous devriez voir une barre de statut verte en bas affichant votre nom d'hôte, la liste des fenêtres, et la date et l'heure actuelles.
Changer la touche d'échappement
Si Ctrl-a entre en conflit avec votre workflow (c'est aussi « aller au début de la ligne » dans bash), vous pouvez le réassigner :
# Use Ctrl-j as the escape key instead of Ctrl-a
escape ^Jj
Après cette modification, toutes les commandes Screen utilisent Ctrl-j au lieu de Ctrl-a. Choisissez une touche que vous utilisez rarement.
Quels sont les workflows courants de GNU Screen sur un VPS ?
Maintenir un déploiement en cours
screen -S deploy
./deploy.sh --production
# Ctrl-a d to detach
Vérifiez plus tard :
screen -r deploy
Surveiller plusieurs fichiers de log
screen -S logs
Dans la session :
Ctrl-a Spour diviser horizontalement- Dans la région haute :
tail -f /var/log/nginx/access.log Ctrl-a Tabpour passer en basCtrl-a cpour une nouvelle fenêtretail -f /var/log/nginx/error.log
Lancer un entraînement long (développeurs IA)
screen -S training
python3 -u train.py --model llama --epochs 50 2>&1 | tee training.log
# Ctrl-a d to detach
Le flag -u désactive le buffering de sortie de Python pour que vous puissiez voir la sortie en temps réel quand vous vous rattachez. Le piping via tee sauvegarde la sortie dans un fichier en secours.
Détachement et reconnexion rapides après une coupure SSH
Si votre SSH tombe pendant que vous êtes dans Screen, reconnectez-vous simplement :
ssh user@your-server
screen -D -r
screen -D -r trouve votre session, force le détachement de la connexion fantôme, et se rattache.
GNU Screen vs tmux : lequel choisir ?
Screen et tmux sont tous deux des multiplexeurs de terminal. Ils résolvent le même problème de base. Comparaison honnête :
| Fonctionnalité | GNU Screen | tmux |
|---|---|---|
| Première version | 1987 | 2007 |
| Licence | GPL-3.0 | ISC (type BSD) |
| Développement actif | Lent (5.0 sortie en août 2024 après des années d'inactivité) | Actif (sorties régulières) |
| Persistance du layout des panneaux | Perdu au détachement | Préservé au détachement |
| Préfixe clavier par défaut | Ctrl-a |
Ctrl-b |
| Configuration | .screenrc (syntaxe propre) |
.tmux.conf (syntaxe propre) |
| Écosystème de plugins | Aucun | Large (tpm, tmux-resurrect, etc.) |
| Statut RHEL/Fedora | Retiré depuis RHEL 8 | Inclus par défaut |
| Support port série | Oui (screen /dev/ttyUSB0) |
Non |
| Ressources d'apprentissage | Matures mais datées | Abondantes et actuelles |
Quand utiliser Screen :
- Vous avez besoin d'un accès port série (
screen /dev/ttyUSB0 115200) - Vous êtes sur un système ancien où Screen est préinstallé et tmux ne l'est pas
- Vous avez besoin d'un simple workflow détach/reattach et rien de plus
Quand utiliser tmux :
- Vous voulez des layouts de panneaux persistants qui survivent au détachement
- Vous voulez un écosystème de plugins actif
- Vous êtes sur RHEL 8+ ou Fedora (Screen n'est pas dans les dépôts)
- Vous avez besoin de création scriptée de fenêtres/panneaux
Les deux outils gèrent le cas d'usage principal (garder les processus actifs après une déconnexion SSH) aussi bien l'un que l'autre. Si vous partez de zéro, tmux a plus d'élan et de meilleurs paramètres par défaut. Si Screen fait déjà partie de votre workflow, il n'y a pas de raison pressante de changer. Consultez notre Comment utiliser tmux sur un VPS Linux pour un guide complet.
Dépannage des problèmes courants de Screen
« There is a screen on ... (Attached) » mais vous n'êtes pas connecté
Cela arrive après un crash SSH. L'ancienne connexion ne s'est pas détachée proprement.
screen -D -r session_name
Cela force le détachement de la connexion fantôme et rattache votre terminal.
Sessions mortes dans la liste
Parfois des sessions s'affichent comme (Dead) après un redémarrage ou crash du serveur.
screen -wipe
Sortie :
There are screens on:
12345.old_session (Dead ???)
Removed dead screens.
1 socket wiped out.
Cela supprime les fichiers socket obsolètes. Exécutez screen -ls pour confirmer leur suppression.
Le terminal est figé / n'accepte plus d'entrées
Vous avez probablement appuyé sur Ctrl-a s par accident. C'est le signal XOFF de contrôle de flux qui met en pause la sortie du terminal.
Corrigez avec :
Ctrl-a q
Cela envoie XON pour reprendre la sortie. Si vous n'utilisez jamais le contrôle de flux, désactivez-le dans votre .screenrc :
defflow off
Screen affiche des caractères corrompus
Votre terminal et Screen ne sont pas d'accord sur l'encodage ou le support des couleurs. Ajoutez à votre .screenrc :
defutf8 on
term screen-256color
Puis démarrez une nouvelle session. Les sessions existantes ne prendront pas en compte les modifications du .screenrc.
Où sont les logs de Screen ?
Screen n'écrit pas dans un log système. Pour activer la journalisation par fenêtre :
Ctrl-a H
Cela active/désactive la journalisation pour la fenêtre courante. Les logs sont sauvegardés dans screenlog.N dans le répertoire où vous avez démarré la session. Le N correspond au numéro de fenêtre.
Pour vérifier si Screen tourne au niveau système :
ps aux | grep screen
Référence des flags CLI courants
| Flag | Description | Exemple |
|---|---|---|
-S name |
Démarrer une session nommée | screen -S myapp |
-r [name] |
Se rattacher à une session détachée | screen -r myapp |
-d -r name |
Détacher à distance, se rattacher ici | screen -d -r myapp |
-D -r name |
Forcer le détachement et se rattacher | screen -D -r myapp |
-x name |
Se rattacher à une session déjà attachée (multi-display) | screen -x myapp |
-ls |
Lister toutes les sessions | screen -ls |
-wipe |
Supprimer les sessions mortes | screen -wipe |
-X command |
Envoyer une commande à une session en cours | screen -S myapp -X quit |
-dmS name |
Démarrer une session nommée détachée | screen -dmS daemon |
-L |
Activer la journalisation dès le démarrage | screen -L -S myapp |
Démarrer une session en mode détaché (-dmS) est utile pour les scripts et les unités systemd qui doivent lancer des sessions Screen sans terminal interactif.
Prêt à essayer ?
Obtenez un VPS Linux pret en quelques secondes. →