J’avais entendu parlé depuis assez longtemps de screen mais ne me suis résolu à l’essayer il n’y a que quelques jours, pour l’adopter quasiment immédiatement.
Présentation
Mais qu’est‐ce que screen ? Screen est un multiplexeur de terminaux, c’est‐à‐dire un utilitaire qui permet d’ouvrir plusieurs terminaux au sein d’une même console. Bien que la légitimité d’un tel outil puisse être remise en cause par le fait qu’il soit possible d’ouvrir autant de terminaux qu’on le souhaite dans un environnement graphique moderne, screen permet de beaucoup se simplifier la vie de l’utilisateur quotidien de la ligne de commande.
En effet, dans un environnement graphique fenêtré comme Gnome, KDE ou Xfce, l’ouverture d’un terminal se fait, dans la configuration par défaut, à l’aide de la souris, ce qui contraint l’utilisateur à quitter la CLI dès qu’il a besoin d’un nouveau terminal. Dans le cas d’une utilisation en « TTY » de son ordinateur, bien moins courant, l’ouverture d’un nouveau terminal est impossible sans effectuer une nouvelle connexion, et le nombre de terminaux qu’on peut ouvrir est limité à 6. Le problème est le même dans le cas d’une connexion en ssh à un serveur.
C’est à ces limitations que screen permet de pallier en ouvrant plusieurs terminaux au sein d’une même console. En voilà un exemple concret, screen, avec trois fenêtres ouvertes et mises côte à côte :

Utilisation
Comment utiliser screen ?
Pour ouvrir une session screen, il suffit de taper dans un terminal « screen ». Les commandes de screen se font en tapant une combinaison de touches, ctrl+A par défaut, suivie d’une lettre. Voici une liste des commandes les plus couramment utilisées :
Navigation entre les terminaux.
Les commandes de screen sont sensibles à la casse. Par exemple, « ctrl+a » suivi de « a » et « ctrl+a » suivi de A auront un effet différent.
ctrl+a suivi de c : Créer un nouveau terminal.
ctrl+a suivi de K : Fermer le terminal courant (kill). Il est préférable de se déconnecter du terminal par ctrl+a ou par exit.
ctrl+a suivi de n : Aller au terminal suivant (next).
ctrl+a suivi de p : Aller au terminal précédent (previous).
ctrl+a suivi de 0 à 9 : Aller au terminal portant le numéro tapé.
ctrl+a suivi de ' : Demander le numéro de terminal où aller. Une invite de commande vous demandera d’entrer le numéro du terminal dans lequel vous souhaitez vous rendre.
ctrl+a suivi de " : Afficher une liste des différents terminaux, avec la possibilité d’y naviguer avec les touches « haut » et « bas » ou « j » et « k » et d’en choisir un avec la touche « entrée ».
ctrl+a suivi de A : Renommer le terminal. Par défaut, le nom est « bash ».
ctrl+a suivi de a : Aller au dernier terminal utilisé.
ctrl+a suivi de S : Séparer la console courante en deux régions disposées l’une au dessus de l’autre (Split) ; les régions ainsi créés peuvent accueillir des terminaux de screen. Par défaut, la région créée ne contient pas de terminal. Créez‐en un ou déplacez‐y en un.
ctrl+a suivi de tabulation : Se déplacer entre les régions de la vue séparée.
ctrl+a suivi de X : Fermer la région active. Le terminal qui y est affiché n’est pas supprimé pour autant.
Gestion de sessions
Screen intègre un système de gestion de sessions. On peut interrompre une session pour la reprendre par la suite.
La commende screen -ls permet d’afficher une liste des sessions en cours. Chaque session est suivie d’un « (Attached) », d’un « (Detached) » ou (moins souvent) d’un « (Dead ???) », qui signifient respectivement que la session est utilisée, c’est‐à‐dire que quelqu’un y est connecté, qu’elle est en veille, c’est‐à‐dire qu’elle n’est utilisée par personne, ou qu’elle semble avoir planté. Une session screen peut donc être arrêtée temporairement et reprise plus tard, lors d’une connexion ultérieure par exemple. Mais comment mettre en veille ou reprendre une session ?
Tout d’abord, il est possible de nommer les session screen pour pouvoir les identifier et les reprendre plus facilement par la suite. Pour ce faire, utilisez la commande « screen -S 'nom de la session' ».
La mise en veille d’une session (détachement) se fait avec une combinaison de touches du même type que les combinaisons de navigations : ctrl+a suivi de d.
Pour détacher screen et fermer la session, utilisez ctrl+a suivi de DD.
Afin de reprendre une session screen (rattacher), utilisez la commande « screen -r » suivie du numéro (obtenu par « screen -ls »ou du nom de la session que vous voulez rattacher.
Notez qu’il est aussi possible de partager des sessions screen, c’est‐à‐dire qu’on peut rattacher une session déjà active. La commande nécessaire à ce tour de magie est « screen -x » suivi du nom ou du numéro de la session. Les deux instances afficheront la même chose simultanément et la saisie pourra se faire indifféremment dans l’une ou dans l’autre. Cette fonctionnalité est très utile pour l’assistance à distance.
Autres commandes utiles
ctrl+a suivi de F : Redimentionner la fenêtre pour l’adapter à celle du terminal ; surtout utilisé lors des partages de sessions (Fit).
ctrl+a suivi de H : Enregistrer ce qui s’affiche à l’écran dans un fichier ~/home/screenlog.[n° de la console].
ctrl+a suivi de esc : Entrer en mode défilement et copie qui permet de se déplacer dans le terminal actif à l’aide des touches fléchées ou h j k l.
ctrl+a suivi de entrée, en mode défilement et copie : Commencer la sélection, un second appui sur entrée arrêtera la sélection et placera le texte sélectionné dans le presse papier de screen.
ctrl+a suivi de ] : Coller le contenu du presse papier.
ctrl+a suivi de ? : Afficher la liste des commandes.
Personalisation
La configuration de screen se fait simplement grâce à un fichier de configuration. Copiez le fichier /etc/screenrc dans votre répertoire personnel sous le nom de .screenrc pour l’éditer.
Quelques éléments de configuration
Supprimer le message de démarrage
Pour supprimer le message au démarrage de screen, votre .screenrc doit contenir :
startup_message off
Afficher une barre de statut en bas de la session screen
Par défaut, screen n’affiche aucune information, ce qui n’est pas pratique pour connaître le terminal dans lequel on se trouve. Il est possible d’afficher une barre de statut en ajoutant ces lignes à votre .screenrc :
hardstatus on # Activer la barre de statut
hardstatus alwayslastline # Afficher la barre de statut à la dernière ligne
hardstatus string '%{= db}%H | %= %?%-Lw%?%{dw}%n*%f %t%?%u)%?%{= db}%?%+Lw%?%?%= | %d/%m %c' # Configuration de la barre de statut.
La dernière ligne permet de configurer ce qu’affichera la barre de statut. Celle‐là est celle que vous pouvez voir sur la capture d’écran ci‐dessus.
Combinaisons de touches personnalisées
Il est possible de définir des commandes personnalisées de la manière suivante :
bind '#1' #2 où #1 est la touche à laquelle assigner la commande (qui sera tapée après ctrl+a) et #2 la commande à lancer avec cette combinaison de touches.
Par exemple, bind 'V' split -v permet de séparer verticalement screen en deux régions grâce à l’enchaînement ctrl+a puis V.
Pour changer la séquence d’échappement (ctrl+a par défaut), il faut ajouter au .screenrc :
escape ^bb où b est la nouvelle lettre d’échappement.
Notez qu’il est nécessaire d’entrer deux fois cette lettre. Cette personnalisation est très utile lorsqu’on compte lancer des sessions screen les unes dans les autres, comme lors d’une connexion en ssh ; chaque session a alors sa propre séquence d’échappement et peut être contrôlée sans influence sur les autres.
Lancer screen au démarrage d’une session bash
Ajouter une ligne « screen » à votre ~/.bashrc lancera screen à l’ouverture d’une session (y compris dans un terminal graphique) mais la session screen ouverte ouvrira elle-même récursivement des terminaux jusqu’à avoir atteint le nombre de 40. Pour pallier à cette erreur et lancer screen correctement à caque connexion, il est nécessaire d’ajouter « [ -z "$STY" ] && exec screen » à votre ~/.bashrc.
À propos de byobu
Depuis la version 10.04, Ubuntu intègre une couche d’amélioration à screen, byobu, qui permet, outre les commande classiques, l’utilisation de raccourcis allant de F2 à F9 pour une utilisation simpléfiée ainsi qu’une interface de configuration qui vous évitera de mettre les mains dans l’atroce cambouis des fichiers de configuration.
Personnellement, je préfère de loin un bon vieux screen, sûrement parce que ça fait plus « geek ». En tout cas, c’est moins moche et plus contrôlable !