Linux / Commande screen : détacher et retrouver une session
screen est un multiplexeur de terminal : il réunit plusieurs fenêtres de terminal dans une session que vous pouvez détacher puis retrouver. Pour conserver un travail interactif lors d’une coupure SSH (Secure Shell), créez une session avec screen -S nom, détachez-la avec Ctrl+A puis d minuscule, et revenez avec screen -r nom. Cette persistance suppose que le serveur et les processus continuent de fonctionner et que la politique du système ne les termine pas à la déconnexion.
Pour un traitement non interactif simple, la commande nohup peut suffire. Screen est utile lorsque vous devez retrouver le terminal d’un programme pour y saisir des commandes, changer de fenêtre ou relire sa sortie ; tmux répond également à ce type de besoin.
Quand utilise-t-on screen ?
GNU Screen maintient plusieurs terminaux virtuels pour des shells ou programmes. Le détachement retire l’affichage du terminal courant sans terminer la session ; il ne signifie ni une fermeture du programme ni une sauvegarde de son état sur disque. Le manuel Screen distribué par Debian détaille les options et les raccourcis par défaut.
- Lors de l'exécution de tâches de longue durée telles que la compilation, le traitement de données ou les sauvegardes sur un serveur accessible via SSH
- Lorsque vous devez détacher l'écran de la tâche et vous reconnecter depuis un autre ordinateur
- Lors de l'utilisation de plusieurs fenêtres de terminal telles que des shells, la surveillance des journaux et des éditeurs au sein d'une seule connexion SSH
- Lorsque vous devez vérifier ultérieurement l'écran d'un programme interactif en cours d'exécution
Screen ne survit pas au redémarrage du serveur et ne relance pas automatiquement un programme en échec. Il peut aussi être arrêté par une politique de session : KillUserProcesses=yes dans systemd-logind peut terminer les processus de la session de connexion. Le manuel de logind.conf précise cette limite. Pour un service durable, choisissez une unité systemd adaptée plutôt que de supposer que Screen garantit sa disponibilité.
Installation et démarrage de votre première session
Installation de screen
Choisissez seulement le bloc correspondant à votre distribution : APT pour Debian/Ubuntu, DNF pour la famille Rocky/Fedora, ou pacman pour Arch Linux. Il s’agit d’alternatives, pas d’une suite de commandes à exécuter sur la même machine. Sur Rocky Linux, vérifiez les dépôts disponibles : le paquet Screen est notamment distribué par EPEL (Extra Packages for Enterprise Linux).
sudo apt update
sudo apt install screen
sudo dnf install screen
sudo pacman -S screen
Vous pouvez vérifier l'état de l'installation et la version comme suit.
screen --version
Création d'une session nommée
L’option -S donne un nom à une nouvelle session. Vérifiez d’abord screen -ls et choisissez un nom non ambigu, par exemple backup pour un travail de sauvegarde. Lancez Screen avec le compte qui exécutera les tâches, sans le précéder systématiquement de sudo.
screen -S backup
Une fois la fenêtre ouverte, un shell permet de lancer les commandes habituelles. La variable STY contient normalement l’identifiant de la session dans cet environnement ; une valeur vide est un indice que le shell n’est pas dans une session Screen classique, sans constituer à elle seule une preuve dans un environnement modifié :
printf '%s\n' "$STY"
Démarrer une session avec une commande
Vous pouvez lancer directement un programme dans une nouvelle session. Cet exemple nécessite Bash, affiche les nombres de 1 à 5 puis se termine :
screen -S compte-demo bash -c 'for ((i=1; i<=5; i++)); do printf "%s\n" "$i"; sleep 1; done'
Quand ce programme se termine, sa fenêtre se ferme par défaut ; s’il ne reste aucune fenêtre, la session se termine aussi. Pour retrouver un résultat après la fin d’un travail, ouvrez d’abord une session contenant un shell, puis lancez le programme dedans, comme dans l’exercice suivant.
Essayer le détachement et la reconnexion
- Depuis un terminal Bash sur le serveur, créez une session de test dont le nom n’est pas déjà utilisé :
screen -S screen-lab bash
- Dans le shell ouvert par Screen, lancez ce compteur fini. Il affiche une ligne environ chaque seconde, jusqu’à 30, puis
Terminé:
for ((i=1; i<=30; i++)); do
printf 'Étape %s/30\n' "$i"
sleep 1
done
printf 'Terminé\n'
- Pendant le compteur, appuyez sur
Ctrl+A, relâchez les touches, puis appuyez surdminuscule. Vous revenez au shell extérieur ; un message de détachement apparaît habituellement. - Dans ce shell extérieur, affichez les sessions puis rattachez celle de l’exercice :
screen -ls
screen -r screen-lab
- Vous retrouvez le compteur en cours, ou sa sortie et le shell si les 30 étapes sont déjà terminées. Attendez la fin, puis saisissez
exitdans cette unique fenêtre de test. La session disparaît descreen -ls.
Le détachement ne tue pas le compteur. Ctrl+C permet d’interrompre ce compteur si vous voulez arrêter l’exercice plus tôt ; exit ferme ensuite le shell de test. Cet essai suffit à apprendre les transitions avant de les utiliser sur une tâche importante. Un test de déconnexion SSH doit aussi tenir compte de la politique de session du serveur.
Raccourcis fréquemment utilisés de Screen
Les raccourcis commencent par Ctrl+A : relâchez ces touches, puis saisissez le caractère suivant. La casse compte. Dans Ctrl+A, d, le d est minuscule, sans Majuscule. A et H ci-dessous sont au contraire des majuscules. Les réglages de .screenrc peuvent modifier ces associations.
| Touches de raccourci | Fonction | Description |
|---|---|---|
Ctrl+A, d |
Détacher la session | Revenir au shell extérieur sans terminer les fenêtres Screen. |
Ctrl+A, c |
Créer une nouvelle fenêtre | Créer une nouvelle fenêtre shell dans la session actuelle. |
Ctrl+A, n |
Fenêtre suivante | Passer à la fenêtre de terminal virtuelle suivante. |
Ctrl+A, p |
Fenêtre précédente | Revenir à la fenêtre de terminal virtuelle précédente. |
Ctrl+A, " |
Liste des fenêtres | Choisir la fenêtre à afficher dans la liste. |
Ctrl+A, A |
Renommer la fenêtre | Donnez à la fenêtre actuelle un titre facilement reconnaissable. |
Ctrl+A, [ |
Mode Copier/Défilement | Parcourir la sortie précédente ou copier du texte. |
Ctrl+A, H |
Basculer la journalisation | Démarrer ou arrêter la journalisation de la sortie de la fenêtre actuelle dans un fichier journal. |
Ctrl+A, k |
Fermer la fenêtre actuelle | Après confirmation, supprimer la fenêtre virtuelle actuelle. |
Ctrl+A, ? |
Aide | Affiche la liste actuelle des raccourcis clavier. |
Ctrl+A, a |
Envoyer Ctrl+A | Transmettre le préfixe au programme ; a minuscule. |
Pour transmettre un caractère Ctrl+A au programme au lieu de déclencher une commande Screen, utilisez Ctrl+A puis a minuscule. Ctrl+A puis A majuscule ouvre le changement de titre : ces deux raccourcis ont des fonctions différentes.
Détacher et reconnecter une session
Détacher tout en gardant le travail
Dans Screen, Ctrl+A puis d minuscule détache la session et rend la main au terminal extérieur. Les processus restent dans les fenêtres de Screen, sous réserve des limites du serveur et de sa politique de session décrites plus haut.
autodetach est activé par défaut : à la perte du terminal, Screen peut détacher la session au lieu de la terminer. Cette fonction ne protège pas d’un arrêt du processus, d’un redémarrage, d’une panne ou d’une suppression de son groupe de processus par le système.
Vérification de la liste des sessions
screen -ls
screen -ls affiche des identifiants et des états tels que Detached ou Attached. Utilisez le même serveur et le même compte que lors de la création. Si plusieurs noms correspondent, copiez l’identifiant complet réellement affiché dans screen -r identifiant, au lieu de choisir au hasard.
Reconnexion à une session détachée
screen -r backup
Si une session est déjà affichée dans un autre terminal, vérifiez qu’elle n’y est plus utilisée. La forme suivante détache son affichage précédent puis la rattache ici ; elle ne crée pas une deuxième session indépendante :
screen -d -r backup
-d -r peut retirer l’affichage d’une personne utilisant le même compte. Convenez de ce transfert avant de l’utiliser sur une session partagée. Le nom backup est un exemple à remplacer par le nom ou l’identifiant vérifié.
Utilisation de plusieurs fenêtres dans une session
Création et nomination de fenêtres
Après avoir créé une nouvelle fenêtre avec Ctrl+A, c, vous pouvez la nommer avec Ctrl+A, A. Par exemple, vous pouvez utiliser la première fenêtre pour exécuter des tâches, la deuxième fenêtre pour vérifier les journaux et la troisième fenêtre pour surveiller l'état du système.
Navigation entre les fenêtres
Vous pouvez passer à la fenêtre suivante ou précédente en utilisant Ctrl+A, n et Ctrl+A, p. S'il y a beaucoup de fenêtres, il est plus rapide d'ouvrir la liste avec Ctrl+A, " et de sélectionner la fenêtre souhaitée.
Fermeture correcte des fenêtres et des sessions
Exécuter exit dans le shell actuel fermera cette fenêtre. Lorsque la dernière fenêtre est fermée, la session Screen se termine également.
exit
Si vous souhaitez simplement détacher une session, vous devez utiliser Ctrl+A, d au lieu de exit. Fermer de force une fenêtre avec des programmes en cours d'exécution peut corrompre leurs résultats.
Utilisation du défilement et de l'historique des journaux
Parcourir les sorties précédentes
Appuyez sur Ctrl+A, [ pour entrer en mode copie/défilement. Vous pouvez utiliser les touches fléchées, Page Up et Page Down pour consulter les sorties précédentes et appuyer sur Esc pour quitter. Le nombre de lignes conservées est affecté par les paramètres et l'option -h.
screen -h 10000 -S analysis
Enregistrement de la sortie de la fenêtre dans un fichier
Ctrl+A, H active ou arrête le journal de sortie de la fenêtre courante. Le nom par défaut est screenlog.%n, où %n représente son numéro, par exemple screenlog.0. Pour commencer avec une journalisation séparée par fenêtre, choisissez un répertoire et des noms de fichiers nouveaux, puis lancez :
(
umask 077
screen -L -Logfile 'screen-lab.%n.log' -S screen-log-lab
)
Le sous-shell limite le changement de umask à cette invocation ; les nouveaux journaux ne sont pas destinés à être lus par les autres utilisateurs. Screen peut ajouter des données à un journal existant : choisissez des fichiers nouveaux pour éviter de mélanger des travaux. Seule la sortie à partir de l’activation est journalisée ; ce n’est pas un export rétroactif du tampon. La sortie peut contenir des secrets et le journal est tamponné : contrôlez permissions, espace disque et durée de conservation. Arrêtez le journal avec le même raccourci quand il n’est plus utile.
Situations problématiques et précautions de sécurité
Quand une session reste Attached
Immédiatement après une déconnexion réseau, une session peut rester Attached. Tout d'abord, confirmez si elle est réellement utilisée sur un autre terminal, puis détachez l'affichage précédent avec screen -d -r session_name et connectez-le au terminal actuel.
screen -wipe nettoie les entrées de sessions détruites ; il ne restaure pas une session et ne sert pas à arrêter un programme. Vérifiez le serveur, le compte, le processus et la nature de l’entrée avant de nettoyer un état Dead ou inaccessible.
Permissions d'accès pour les sessions du même compte
Les droits d’accès à Screen dépendent du compte système et d’une éventuelle configuration multiutilisateur. Plusieurs clés SSH donnant accès au même compte ne créent pas une isolation entre personnes : un autre utilisateur de ce compte peut rattacher sa session. Utilisez des comptes distincts quand cette séparation est nécessaire et ne laissez pas une session administrative sensible ouverte sans contrôle.
Comparaison de screen, nohup, tmux, systemd
| Outils | Tâches appropriées | Principales fonctionnalités |
|---|---|---|
screen |
Tâches en terminal interactif nécessitant une reconnexion | Prend en charge le détachement de session, la reconnexion et plusieurs fenêtres. |
tmux |
Tâches interactives et division complexe de l'écran | Fonctionnalités riches pour la gestion des fenêtres et panneaux, avec de nombreuses options de personnalisation pour l'utilisateur. |
nohup |
Tâches batch simples non interactives | Ignore le signal SIGHUP (hangup, perte du terminal) mais ne restaure pas l'écran du terminal. |
systemd |
Services qui doivent toujours être en fonctionnement | Vous pouvez configurer le lien de démarrage, le redémarrage en cas d'échec, les dépendances et la gestion des journaux. |
Le guide de nohup explique l’exécution non interactive après fermeture d’un terminal. Screen ajoute la possibilité de retrouver une interface de terminal, mais ne fournit pas la supervision ou le redémarrage automatique d’un service.
Questions fréquemment posées
La tâche continuera-t-elle même si la connexion SSH est déconnectée ?
Habituellement, oui, si le détachement fonctionne et si les processus continuent de vivre sur le serveur. Une politique systemd-logind, une intervention administrative, une erreur du programme ou un redémarrage peut les terminer. Vérifiez ce comportement dans votre environnement avant de compter dessus pour une tâche importante.
Que dois-je faire si plusieurs sessions apparaissent lors de l'utilisation de screen -r ?
Après avoir vérifié la liste avec screen -ls, spécifiez le nom de la session ou l'identifiant complet comme screen -r backup. Créer des sessions avec des noms significatifs peut réduire les erreurs de sélection.
Que dois-je faire si Ctrl+A entre en conflit avec le raccourci d'un programme ?
Utilisez Ctrl+A puis a minuscule pour envoyer le caractère au programme. A majuscule sert à renommer la fenêtre. Vous pouvez aussi changer le préfixe avec l’option -e ou .screenrc, en mettant à jour les raccourcis utilisés dans vos procédures.
Les sessions Screen peuvent-elles être restaurées après un redémarrage ?
Non. Screen ne fait que maintenir les processus et les terminaux virtuels sur un système en cours d'exécution ; il ne restaure pas automatiquement les sessions et les processus après un redémarrage. Si vous avez besoin d'un démarrage automatique après un redémarrage, configurez le service avec systemd ou utilisez un planificateur adapté à la tâche.




