Comment utiliser GNU Screen sur un VPS Linux

15 min de lecture·Matthieu|

GNU Screen maintient vos sessions terminal actives apres une deconnexion SSH. Ce tutoriel couvre l'installation, la gestion des sessions, les fenetres multiples, le mode copie et la configuration .screenrc sur Debian 12 et Ubuntu 24.04.

Comment utiliser GNU Screen sur un VPS Linux

Vous vous connectez en SSH a votre serveur, lancez un processus long, et la connexion tombe. Le processus meurt. GNU Screen resout ce probleme. Il execute des sessions terminal qui persistent independamment de votre connexion SSH. Vous pouvez detacher la session, vous deconnecter, revenir des heures plus tard et reprendre exactement la ou vous en etiez.

Ce tutoriel couvre GNU Screen de l'installation aux workflows quotidiens sur Debian 12 et Ubuntu 24.04. Vous apprendrez la gestion des sessions, la manipulation des fenetres, les regions divisees, le mode copie et la personnalisation du fichier .screenrc.

Qu'est-ce que GNU Screen ?

GNU Screen est un multiplexeur de terminal (terminal multiplexer). Il cree des sessions terminal virtuelles qui tournent sur le serveur, independamment de votre connexion SSH. Dans une seule session Screen, vous pouvez ouvrir plusieurs fenetres, diviser votre terminal en regions et faire defiler l'historique de sortie.

Screen s'intercale entre votre client SSH et le shell. Quand vous detachez une session Screen, tous les programmes a l'interieur continuent de tourner. Quand vous vous rattachez, vous retrouvez la meme sortie, les memes processus en cours, le meme etat. C'est indispensable pour tout travail sur un VPS distant ou les connexions SSH peuvent tomber sans prevenir.

Screen existe depuis 1987. Il est disponible dans les depots par defaut 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 depots par defaut 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 pre-installe.

Mettez a jour l'index des paquets et installez Screen :

sudo apt update && sudo apt install -y screen

Verifiez 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 numero de version s'affiche, Screen est pret a l'emploi.

Comment demarrer et nommer une session Screen ?

Pour demarrer une nouvelle session Screen, executez screen. Mais demarrer sans nom rend l'identification plus difficile par la suite. Nommez toujours vos sessions avec le flag -S.

Demarrez une session nommee :

screen -S myproject

Votre terminal se vide et vous etes maintenant dans une session Screen. Tout ce que vous executez ici persiste meme si votre connexion SSH tombe.

Verifiez que vous etes dans une session Screen :

echo $STY

Cela affiche le nom de la session. Si vous voyez quelque chose comme 12345.myproject, vous etes dans Screen. Si rien ne s'affiche, vous n'etes pas dans une session.

Reference des commandes Screen

Toutes les commandes Screen commencent par la touche prefixe Ctrl-a, suivie d'une autre touche. Ce prefixe s'appelle le « caractere d'echappement » (escape character).

Raccourci Action Notes
Ctrl-a d Detacher la session La session continue de tourner
Ctrl-a c Creer une nouvelle fenetre Ouvre un nouveau shell
Ctrl-a n Fenetre suivante Parcourt vers l'avant
Ctrl-a p Fenetre precedente Parcourt vers l'arriere
Ctrl-a " Lister les fenetres Selectionnez avec les fleches
Ctrl-a A Renommer la fenetre courante Tapez le nouveau nom, appuyez sur Entree
Ctrl-a k Fermer la fenetre courante Demande confirmation
Ctrl-a S Diviser horizontalement S majuscule
Ctrl-a | Diviser verticalement Caractere pipe
Ctrl-a Tab Basculer entre les regions Parcourt les divisions
Ctrl-a X Fermer la region courante X majuscule
Ctrl-a [ Entrer en mode copie Aussi Ctrl-a Esc
Ctrl-a ] Coller le texte copie Colle depuis le buffer
Ctrl-a ? Afficher les raccourcis Aide integree

Comment detacher et rattacher une session Screen ?

C'est le workflow de base. Vous lancez un processus dans Screen, vous detachez, et le processus continue de tourner. Plus tard, vous vous rattachez pour verifier l'avancement.

Detacher votre session en cours :

Appuyez sur Ctrl-a puis d.

Vous verrez :

[detached from 12345.myproject]

Votre session tourne maintenant en arriere-plan. Vous pouvez fermer votre connexion SSH en toute securite.

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 detachee, screen -r sans nom fonctionne aussi.

Comment forcer le rattachement quand une session est deja attachee ?

Parfois une session s'affiche comme (Attached) alors que vous n'etes pas connecte. Cela arrive quand SSH tombe sans deconnexion propre. Screen pense toujours que l'ancienne connexion est active.

Utilisez ce tableau pour choisir les bons flags :

Scenario Commande Ce qu'elle fait
La session affiche « Attached » mais vous n'etes pas connecte screen -D -r myproject Force le detachement de l'ancienne connexion, puis se rattache ici
La session affiche « Attached » et vous voulez la partager screen -x myproject Se rattache sans detacher l'autre connexion (multi-display)
La session affiche « Attached », vous voulez la recuperer screen -d -r myproject Detache le cote distant, se rattache localement

Le cas le plus courant est screen -D -r. Il gere les connexions fantomes des sessions SSH plantees.

Verifiez l'etat de la session apres le rattachement :

screen -ls

La session devrait maintenant afficher (Attached).

Comment garder un processus actif apres une deconnexion SSH ?

Demarrez une session Screen, lancez votre processus dedans, et detachez. Le processus survit aux deconnexions SSH, aux coupures reseau, et meme a la fermeture de votre ordinateur portable.

Voici le workflow complet :

screen -S training

Dans la session, lancez votre processus long :

python3 train_model.py --epochs 100

Detachez avec Ctrl-a d. Vous verrez :

[detached from 12345.training]

Fermez SSH. Allez prendre un cafe. Revenez plus tard :

ssh user@your-server
screen -r training

Votre tache d'entrainement tourne toujours, et vous pouvez voir toute la sortie produite pendant votre absence.

Comment gerer plusieurs fenetres dans Screen ?

Une seule session Screen peut contenir plusieurs fenetres. Chaque fenetre est un shell independant. Pensez aux fenetres comme des onglets dans un navigateur web.

Creez une nouvelle fenetre dans votre session :

Appuyez sur Ctrl-a c.

Un nouveau shell s'ouvre. Votre fenetre precedente est toujours la. Naviguez entre les fenetres :

  • Ctrl-a n passe a la fenetre suivante
  • Ctrl-a p passe a la fenetre precedente
  • Ctrl-a 0 a Ctrl-a 9 saute directement a une fenetre par numero
  • Ctrl-a " affiche la liste de toutes les fenetres. Utilisez les fleches pour en selectionner une et appuyez sur Entree.

Renommez la fenetre courante pour une identification plus facile :

Appuyez sur Ctrl-a A, tapez un nom, et appuyez sur Entree.

Verifiez dans quelle fenetre vous etes :

Appuyez sur Ctrl-a " pour voir la liste des fenetres. La fenetre courante est marquee d'un asterisque.

Fermez une fenetre en tapant exit dans son shell, ou appuyez sur Ctrl-a k et confirmez avec y.

Comment diviser le terminal en regions ?

Screen peut diviser votre terminal en plusieurs regions, chacune affichant une fenetre differente. C'est utile pour surveiller des logs dans un panneau tout en travaillant dans un autre.

Construire un layout de surveillance etape par etape

Construisons un layout a 3 panneaux : un shell principal en haut, des logs en bas a gauche, et la surveillance systeme en bas a droite.

Etape 1 : Demarrez une session nommee :

screen -S monitor

Etape 2 : Divisez horizontalement. Appuyez sur Ctrl-a S (S majuscule).

Votre terminal se divise en une region haute et une region basse. Le curseur reste dans la region haute.

Etape 3 : Passez a la region basse. Appuyez sur Ctrl-a Tab.

La region basse est vide. Vous devez lui assigner une fenetre.

Etape 4 : Creez une nouvelle fenetre dans la region basse. Appuyez sur Ctrl-a c.

Vous avez maintenant un shell dans la region basse.

Etape 5 : Divisez la region basse verticalement. Appuyez sur Ctrl-a | (caractere pipe).

La moitie basse a maintenant une section gauche et une section droite. Passez a la nouvelle section droite avec Ctrl-a Tab.

Etape 6 : Creez une autre fenetre. Appuyez sur Ctrl-a c.

Etape 7 : Lancez vos outils de surveillance. Naviguez entre les regions avec Ctrl-a Tab :

  • Region haute : votre shell de travail principal
  • Bas-gauche : executez tail -f /var/log/syslog
  • Bas-droite : executez htop

Commandes de gestion des regions

Raccourci Action
Ctrl-a S Diviser horizontalement
Ctrl-a | Diviser verticalement
Ctrl-a Tab Passer a la region suivante
Ctrl-a X Fermer la region courante (la fenetre reste ouverte)
Ctrl-a Q Fermer toutes les regions sauf la courante
Ctrl-a :resize +5 Agrandir la region courante de 5 lignes
Ctrl-a :resize -5 Reduire la region courante de 5 lignes

Point a retenir : Screen ne sauvegarde pas votre layout de regions quand vous detachez. Quand vous vous rattachez, toutes les divisions ont disparu et vous voyez une seule fenetre. Les fenetres elles-memes (et leurs processus) sont preservees. Vous devez re-diviser manuellement. Si vous voulez des layouts persistants, ajoutez des commandes de layout a votre .screenrc ou envisagez tmux, qui preserve les layouts de panneaux au detachement.

Comment utiliser le mode copie et le scrollback ?

Par defaut, vous ne pouvez pas remonter dans une session Screen avec la molette de la souris ou Shift-PgUp. Screen capture toutes les entrees. Pour consulter les sorties precedentes, vous devez entrer en mode copie (copy mode).

Entrez en mode copie en appuyant sur Ctrl-a [ ou Ctrl-a Esc.

Vous etes maintenant dans un mode de navigation similaire a vi :

Touche Action
Fleches Deplacer le curseur
h/j/k/l Deplacer le curseur (style vi)
Ctrl-u Remonter d'une demi-page
Ctrl-d Descendre d'une demi-page
0 Debut de ligne
$ Fin de ligne
g Aller en haut du scrollback
G Aller en bas du scrollback
/ Rechercher vers l'avant
? Rechercher vers l'arriere
Espace Definir un marqueur (debut/fin de selection)
Entree Copier le texte selectionne et quitter le mode copie
Echap Quitter le mode copie sans copier

Pour copier du texte : entrez en mode copie, deplacez-vous au debut du texte voulu, appuyez sur Espace pour definir le premier marqueur, deplacez-vous a la fin, appuyez a nouveau sur Espace. Le texte est copie dans le buffer de collage de Screen.

Pour coller : appuyez sur Ctrl-a ].

Le buffer de scrollback par defaut contient 100 lignes. C'est trop peu pour un usage reel. Augmentez-le dans votre .screenrc :

defscrollback 10000

Cela vous donne 10 000 lignes de scrollback par fenetre.

Comment configurer Screen avec .screenrc ?

Screen lit ~/.screenrc au demarrage. Ce fichier controle le comportement par defaut, les raccourcis clavier, la barre de statut et les fenetres de demarrage.

A quoi ressemble un bon .screenrc ?

Voici un .screenrc complet avec chaque directive expliquee :

# 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

Creez ce fichier :

nano ~/.screenrc

Collez la configuration ci-dessus et sauvegardez.

Explication de la chaine de format hardstatus

La ligne hardstatus est la partie la plus puissante (et la plus deroutante) du .screenrc. Voici ce que chaque token de l'exemple signifie :

Token Signification
%{= kG} Definir la couleur : fond noir, texte vert vif
%H Nom d'hote du systeme
%-Lw Toutes les fenetres avant la fenetre courante
%{r}(%{W}%n*%f%t%{r}) Fenetre courante : parentheses rouges, numero de fenetre blanc + flags + titre
%+Lw Toutes les fenetres apres la fenetre 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.

Demarrez 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'hote, la liste des fenetres, et la date et l'heure actuelles.

Changer la touche d'echappement

Si Ctrl-a entre en conflit avec votre workflow (c'est aussi « aller au debut de la ligne » dans bash), vous pouvez le reassigner :

# Use Ctrl-j as the escape key instead of Ctrl-a
escape ^Jj

Apres 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 deploiement en cours

screen -S deploy
./deploy.sh --production
# Ctrl-a d to detach

Verifiez 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 region haute : tail -f /var/log/nginx/access.log
  3. Ctrl-a Tab pour passer en bas
  4. Ctrl-a c pour une nouvelle fenetre
  5. tail -f /var/log/nginx/error.log

Lancer un entrainement long (developpeurs 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 desactive le buffering de sortie de Python pour que vous puissiez voir la sortie en temps reel quand vous vous rattachez. Le piping via tee sauvegarde la sortie dans un fichier en secours.

Detachement et reconnexion rapides apres une coupure SSH

Si votre SSH tombe pendant que vous etes dans Screen, reconnectez-vous simplement :

ssh user@your-server
screen -D -r

screen -D -r trouve votre session, force le detachement de la connexion fantome, et se rattache.

GNU Screen vs tmux : lequel choisir ?

Screen et tmux sont tous deux des multiplexeurs de terminal. Ils resolvent le meme probleme de base. Voici une comparaison honnete :

Fonctionnalite GNU Screen tmux
Premiere version 1987 2007
Licence GPL-3.0 ISC (type BSD)
Developpement actif Lent (5.0 sortie en aout 2024 apres des annees d'inactivite) Actif (sorties regulieres)
Persistance du layout des panneaux Perdu au detachement Preserve au detachement
Prefixe clavier par defaut Ctrl-a Ctrl-b
Configuration .screenrc (syntaxe propre) .tmux.conf (syntaxe propre)
Ecosysteme de plugins Aucun Large (tpm, tmux-resurrect, etc.)
Statut RHEL/Fedora Retire depuis RHEL 8 Inclus par defaut
Support port serie Oui (screen /dev/ttyUSB0) Non
Ressources d'apprentissage Matures mais datees Abondantes et actuelles

Quand utiliser Screen :

  • Vous avez besoin d'un acces port serie (screen /dev/ttyUSB0 115200)
  • Vous etes sur un systeme ancien ou Screen est pre-installe et tmux ne l'est pas
  • Vous avez besoin d'un simple workflow detach/reattach et rien de plus

Quand utiliser tmux :

  • Vous voulez des layouts de panneaux persistants qui survivent au detachement
  • Vous voulez un ecosysteme de plugins actif
  • Vous etes sur RHEL 8+ ou Fedora (Screen n'est pas dans les depots)
  • Vous avez besoin de creation scriptee de fenetres/panneaux

Les deux outils gerent le cas d'usage principal (garder les processus actifs apres une deconnexion SSH) aussi bien l'un que l'autre. Si vous partez de zero, tmux a plus d'elan et de meilleurs parametres par defaut. Si Screen fait deja partie de votre workflow, il n'y a pas de raison pressante de changer. Consultez notre tutoriel tmux pour un guide complet.

Depannage des problemes courants de Screen

« There is a screen on ... (Attached) » mais vous n'etes pas connecte

Cela arrive apres un crash SSH. L'ancienne connexion ne s'est pas detachee proprement.

screen -D -r session_name

Cela force le detachement de la connexion fantome et rattache votre terminal.

Sessions mortes dans la liste

Parfois des sessions s'affichent comme (Dead) apres un redemarrage 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 obsoletes. Executez screen -ls pour confirmer leur suppression.

Le terminal est fige / n'accepte plus d'entrees

Vous avez probablement appuye sur Ctrl-a s par accident. C'est le signal XOFF de controle 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 controle de flux, desactivez-le dans votre .screenrc :

defflow off

Screen affiche des caracteres corrompus

Votre terminal et Screen ne sont pas d'accord sur l'encodage ou le support des couleurs. Ajoutez a votre .screenrc :

defutf8 on
term screen-256color

Puis demarrez une nouvelle session. Les sessions existantes ne prendront pas en compte les modifications du .screenrc.

Ou sont les logs de Screen ?

Screen n'ecrit pas dans un log systeme. Pour activer la journalisation par fenetre :

Ctrl-a H

Cela active/desactive la journalisation pour la fenetre courante. Les logs sont sauvegardes dans screenlog.N dans le repertoire ou vous avez demarre la session. Le N correspond au numero de fenetre.

Pour verifier si Screen tourne au niveau systeme :

ps aux | grep screen

Reference des flags CLI courants

Flag Description Exemple
-S name Demarrer une session nommee screen -S myapp
-r [name] Se rattacher a une session detachee screen -r myapp
-d -r name Detacher a distance, se rattacher ici screen -d -r myapp
-D -r name Forcer le detachement et se rattacher screen -D -r myapp
-x name Se rattacher a une session deja attachee (multi-display) screen -x myapp
-ls Lister toutes les sessions screen -ls
-wipe Supprimer les sessions mortes screen -wipe
-X command Envoyer une commande a une session en cours screen -S myapp -X quit
-dmS name Demarrer une session nommee detachee screen -dmS daemon
-L Activer la journalisation des le demarrage screen -L -S myapp

Demarrer une session en mode detache (-dmS) est utile pour les scripts et les unites systemd qui doivent lancer des sessions Screen sans terminal interactif.

Copyright 2026 Virtua.Cloud. Tous droits reserves. Ce contenu est une creation originale de l'equipe Virtua.Cloud. Toute reproduction, republication ou redistribution sans autorisation ecrite est interdite.

Prêt à essayer ?

Déployez votre serveur en quelques secondes. Linux, Windows ou FreeBSD.

Voir les offres VPS