Comment utiliser GNU Screen sur un VPS Linux
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 npasse a la fenetre suivanteCtrl-a ppasse a la fenetre precedenteCtrl-a 0aCtrl-a 9saute directement a une fenetre par numeroCtrl-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 :
Ctrl-a Spour diviser horizontalement- Dans la region haute :
tail -f /var/log/nginx/access.log Ctrl-a Tabpour passer en basCtrl-a cpour une nouvelle fenetretail -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