Screen
| Fiche express | |
|---|---|
| Domaine | Multiplexeur de terminal |
| Commande | screen
|
| Contexte | Garder une session (et les process qu'elle contient) vivante après une
déconnexion — utile en SSH sur un serveur distant |
| Voir aussi | Nohup, Bg (alternatives partielles, pas des équivalents) |
screen permet d'ouvrir une session de terminal persistante : on peut s'y détacher (detach) sans la fermer, se déconnecter du serveur, puis s'y rattacher (attach) plus tard — depuis la même machine ou une autre — et retrouver exactement l'état de la session, y compris les programmes toujours en cours d'exécution dedans.
screen n'est pas un équivalent de nohup ou de bg : ces deux commandes évitent qu'un process ne soit tué à la déconnexion du shell, mais on ne peut pas reprendre la main dessus interactivement ensuite (pas de STDIN/STDOUT repris, pas de multi-fenêtres). screen gère de vraies sessions interactives, avec plusieurs fenêtres, du split d'écran, et même du partage multi-utilisateurs.
Installation
apt-get install screen # Debian/Ubuntu
yum install screen # RHEL/CentOS
Sessions : créer, détacher, retrouver
screen # nouvelle session anonyme
screen -S nom # nouvelle session nommée (plus pratique pour la retrouver)
screen -ls # lister les sessions en cours
screen -r # rattacher l'unique session détachée
screen -r nom # rattacher une session précise (par nom ou PID.nom)
screen -d -r nom # forcer le détachement ailleurs puis rattacher ici
# (utile si la session est restée "attached" sur un autre terminal)
Raccourci pour détacher depuis l'intérieur de la session : Ctrl+a d.
⚠️ Une session tuée avec exit (ou Ctrl+a puis k sur la
dernière fenêtre) est définitivement perdue — contrairement à un détachement, il n'y a rien à
rattacher ensuite.
Raccourcis clavier
Toutes les commandes screen s'invoquent par le préfixe Ctrl+a (noté C-a
ci-dessous), suivi d'une touche :
C-a c nouvelle fenêtre
C-a k fermer la fenêtre courante
C-a n / p fenêtre suivante / précédente
C-a " lister toutes les fenêtres et en choisir une
C-a [0-9] aller directement à la fenêtre 0-9
C-a Tab passer d'une fenêtre à l'autre (utile avec le split)
C-a S diviser l'écran horizontalement
C-a X fermer la région d'écran courante
C-a Q ne garder que la région courante (fermer les autres)
C-a Ctrl+A ??? (préfixe littéral, rarement utile)
C-a d détacher la session (screen continue de tourner en arrière-plan)
C-a Ctrl+\ fermer screen et terminer toutes les fenêtres (avec confirmation)
C-a ? aide / liste des raccourcis actifs
Sessions multi-utilisateurs
Deux façons de partager une session entre plusieurs utilisateurs connectés.
Méthode simple : même utilisateur système
Si les deux personnes peuvent se connecter avec le même compte, la deuxième rejoint
simplement la session déjà ouverte par la première avec screen -x au lieu de
screen -r — les deux terminaux affichent alors la même chose en temps réel :
# Sur le premier terminal
screen -S partagee
# Sur le deuxième terminal (même utilisateur, autre connexion SSH)
screen -x
Méthode ACL : utilisateurs système différents
Pour autoriser un utilisateur différent à rejoindre une session, screen doit tourner en mode multi-utilisateur, ce qui nécessite le bit setuid root sur le binaire :
chmod u+s "$(which screen)"
chmod 755 /var/run/screen
⚠️ Le setuid root sur screen est une surface d'attaque non négligeable (plusieurs CVE historiques touchant sa gestion des permissions/fichiers) — à réserver à des besoins réels de partage de session inter-comptes, pas à activer par défaut.
Puis dans ~/.screenrc (ou en tapant les commandes après Ctrl+a :
dans une session déjà ouverte) :
multiuser on
acladd invite # autoriser l'utilisateur "invite" à rejoindre la session
aclchg invite -x "?" # lui retirer le droit d'exécuter des commandes screen
aclchg invite +x "wall" # sauf "wall" (écrire un message dans la ligne de statut)
aclumask invite-wx # permissions par défaut sur les fenêtres : lecture seule
L'utilisateur invité rejoint ensuite avec :
screen -x proprietaire/nom_session
Exemples d'ACL supplémentaires :
aclchg toto -w "#?" # accès en lecture seule (voir sans agir)
aclchg toto -wx "#?" # retirer tout droit d'écriture/exécution
aclchg toto +x "detach,wall,colon" # n'autoriser que ces commandes précises
Configuration (~/.screenrc)
Aide-mémoire des codes couleur et des variables d'affichage utilisables dans le fichier de configuration (barre de statut, invite, etc.) :
Couleurs
--------
0 Black . laisser la couleur inchangée
1 Red b blue
2 Green c cyan
3 Brown / yellow d default color
4 Blue g green b bold
5 Purple k blacK B blinking
6 Cyan m magenta d dim
7 White r red r reverse
8 unused/illegal w white s standout
9 transparent y yellow u underline
Variables d'affichage (%-escapes)
----------------------------------
%% signe pourcent littéral
%a/%A 'am'/'pm' ou 'AM'/'PM'
%c/%C heure courante HH:MM (24h / 12h)
%d/%D numéro du jour / nom du jour
%f flags de la fenêtre
%F vrai si la fenêtre a le focus
%h hardstatus de la fenêtre
%H nom d'hôte
%l charge système courante
%m/%M numéro du mois / nom du mois
%n numéro de fenêtre
%s secondes
%t titre de la fenêtre
%u autres utilisateurs présents sur cette fenêtre
%w liste de toutes les fenêtres (numéros + noms)
%-w fenêtres avant la fenêtre courante
%+w fenêtres après la fenêtre courante
%W toutes les fenêtres sauf la courante
%y/%Y année sur 2 / 4 chiffres