Comment utiliser GNU Screen sur un VPS Linux

15 min de lecture·Matthieu·gnu-screenterminal-multiplexerlinuxvpssshscreen-session|

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 n passe à la fenêtre suivante
  • Ctrl-a p passe à la fenêtre précédente
  • Ctrl-a 0 à Ctrl-a 9 saute directement à une fenêtre par numéro
  • Ctrl-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 :

  1. Ctrl-a S pour diviser horizontalement
  2. Dans la région haute : tail -f /var/log/nginx/access.log
  3. Ctrl-a Tab pour passer en bas
  4. Ctrl-a c pour une nouvelle fenêtre
  5. tail -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.