Jouons avec les multiplexeurs de terminaux sous Debian

Aujourd’hui nous parlerons de screen, byobu, tmux et tmate, quatre outils en ligne de commande permettant de rendre un terminal persistant dans un processus.

GNU Screen

« Il permet à un utilisateur d’accéder à de multiples sessions de terminal à l’intérieur d’une simple fenêtre de terminal, ou d’une session distante typiquement lancée par SSH » (Wikipedia). Il s’installe avec apt-get install screen.

Créer une nouvelle session : screen ou screen -S exemple. La session remplace le terminal courant par un terminal virtuel vivant dans un processus. Utiliser Ctrl+d tuera la session. La commande screen -d ou Ctrl+a d détachera la session et vous ramènera sur votre terminal initial, sans fermer la session. Le terminal virtuel continue sa vie dans un processus. Les sessions sont isolées par utilisateur système.
Lister les sessions : screen -ls.
Se connecter à une session : screen -r ou screen -r exemple.
Détacher une session de l’extérieur : screen -d, Ctrl+a d ou screen -d exemple.
Rejoindre une session attachée : screen -x ou screen -x exemple. Cela permet de visualiser de plusieurs endroits le contenu d’un unique terminal.

Il n’est pas possible d’imbriquer des sessions, bien qu’on puisse les lister depuis n’importe quel terminal et en créer (ce qui a pour effet de changer de session sans détacher la première). En revanche, on peut ajouter des terminaux virtuels (onglets) au sein d’une même session avec Ctrl+a c et les lister à leur tour avec Ctrl+a ".

Il existe de nombreux autres raccourcis clavier que l’on retrouve dans cette documentation permettant notamment de jouer avec le fenêtrage des terminaux (split vertical ou horizontal).

Les avantages de screen

  • S’utilise aussi bien en utilisant la session par défaut qu’avec de multiples sessions nommées.
  • Permet de lancer des opérations longues telles que du transcodage vidéo, des transferts de données ou des scripts interactifs sans se soucier d’attendre le retour ou de risquer un « Broken pipe »
  • Permet de partager un même terminal avec quelqu’un à distance
  • Permet se construire très rapidement des écrans de monitoring, en splittant le terminal en grille et en lançant des commandes telles que htop (uptime, load average, consommation en ram), watch -n1 df -h (calcul de l’espace disque en temps réel), iftop (trafic réseau), etc.

Les inconvénients

Peu user-friendly, de fonctionne que par raccourcis claviers à mémoriser. Le risque de mélanger les raccourcis et de faire ctrl+d par habitude est un problème.

tmux

« Tmux a pour but d’être une alternative stable et moderne à GNU Screen, il possède d’ailleurs la majorité des fonctions de GNU Screen, mais contrairement à celui-ci il est distribué sous licence BSD et fait partie de la base système d’OpenBSD » (Wikipedia). Il s’installe avec apt-get install tmux.

Créer une nouvelle session : tmux ou tmux new -s exemple. La session remplace le terminal courant par un terminal virtuel vivant dans un processus. Utiliser Ctrl+d tuera la session. La commande tmux detach ou Ctrl+b d détachera la session en cours et vous ramènera sur votre terminal initial, sans fermer la session. Le terminal virtuel continue sa vie dans un processus. Les sessions sont isolées par utilisateur système.
Lister les sessions : tmux ls.
Se connecter à une session : tmux a ou tmux a -t exemple. tmux permet de rejoindre les sessions via cette même commande, détachées ou non. C’est l’équivalent screen -r et screen -x.
Détacher une session de l’extérieur et s’y connecter : tmux a -d ou tmux a -d -t exemple.

Comme avec Screen, on peut ajouter des terminaux virtuels (onglets) au sein d’une même session avec Ctrl+b c et les lister à leur tour avec Ctrl+b w.

Il existe de nombreux autres raccourcis clavier que l’on retrouve dans cette documentation permettant notamment de jouer avec le fenêtrage des terminaux (split vertical ou horizontal), renommage des sessions ou onglets, défilement etc.

Les avantages de tmux sur Screen

À première vue, les deux outils se ressemblent énormément. Il existe quelques petites différences qui font pencher la balance en faveur de tmux :

  • la portabilité du code le rend présent sur plus de systèmes d’exploitation
  • meilleure gestion de l’entrelacement de sessions (avec des alertes, etc)
  • il affiche une barre de statut en bas du terminal avec quelques infos, ce qui permet aussi de savoir qu’on est en train d’utiliser tmux
  • il offre plus de possibilités pour être scripté, telles que le partage de sessions entre utilisateurs
  • globalement plus de petites options de configuration le jour où on souhaite personnaliser une session

Les inconvénients

Potentiellement toujours ce même risque d’utiliser ctrl+d par réflexe et toujours autant de commandes à retenir.

tmate

tmate est un fork de tmux. Il apporte la possibilité de partager un terminal en lecture seule, ainsi que la possibilité de partager à quelqu’un d’autre une commande SSH reconnectant directement dans une session.

Il n’est pas présent dans les dépôts de Debian et doit donc être installé via un dépôt externe. Le serveur utilise des fonctionnalités spécifiques du noyau Linux et n’est donc pas multiplateforme, alors que le client est disponible sous Mac et BSD.

Byobu

Byobu est initialement une couche d’amélioration à GNU Screen écrit pour Ubuntu. Aujourd’hui il utilise tmux par défaut pour proposer un ensemble de fonctionnalités user-friendly, ce qui signifie que tmux est installé comme dépendance. Le tout s’installe avec apt-get install byobu. Byobu est même préinstallé sur les instances Cloud d’Ubuntu par Canonical.

On lance le contexte Byobu via la commande byobu. La session remplace le terminal courant par un terminal virtuel vivant dans un processus. Une interface graphique en mode texte apparait dans le terminal, proposant comme tmux une barre listant les onglets mais en y ajoutant des indicateurs du système d’exploitation.
Byobu - écran d'accueil

Ces indicateurs sont configurables dans l’aide de Byobu, que l’on obtient en appuyant sur F1 ou F9. Byobu ne semble pas prévu pour lancer plusieurs sessions en parallèle, comme le permettent screen et tmux. À la place, Byobu permet d’être lancé au démarrage via sa fenêtre d’aide. Lorsque cette option est activée, byobu est exécuté à chaque connexion SSH. Mieux, Ctrl+d ou exit ne font plus sortir du contexte Byobu, ils ferment les onglets virtuels, ce qui est très pratique. Lorsqu’il ne reste qu’un onglet à fermer, la connexion SSH se referme automatiquement.
Byobu - Aide (F1 ou F9)

Les commandes basiques

Créer un nouvel onglet : F2.
Aller à l’onglet précédent : F3.
Aller à l’onglet suivant : F4.
Se détacher de la session : F6.
Rafraichir les indicateurs : F5 (automatique).
Renommer l’onglet : F8.
Entrer en mode historique : F7.

Il existe d’autres commandes, notamment pour diviser un onglet en plusieurs écrans, que je ne peux pas tester sous Mac OSX car ces raccourcis claviers sont déjà utilisés par le système.

Utilisation du mode historique

Le mode historique permet de naviguer dans les anciennes sorties en utilisant des commandes similaires à vi :

  • h ou flèche gauche – reculer le curseur d’un caractère
  • l ou flèche droite – avancer le curseur d’un caractère
  • j ou flèche bas – descendre le curseur d’un ligne
  • k ou flèche haut – monter le curseur d’une ligne
  • 0 – aller au début de la ligne
  • $ – aller à la fin de la ligne
  • G – aller à la ligne indiquée (par défaut va en fin de tampon)
  • / – recherche en avant
  • ? – recherche en arrière
  • n – Passe à la prochaine correspondance, en avant ou en arrière

Les avantages de Byobu sur tmux

Par où commencer ?! L’utilisation des touches Fonction est une réelle avancée, les actions sont simples à retenir, toutes au même endroit. En mode de démarrage automatique, plus de risque de détruire la session accidentellement. Les indicateurs de la santé du système restent toujours visibles, et le parcours de l’historique à la vi est un réel plus !

Les inconvénients

Il n’y a plus vraiment d’inconvénient avec Byobu, tout est à la fois simple, intuitif et puissant. Byobu ne semble pas pensé pour être scripté ni multi-utilisateurs mais bien pour être une surcouche graphique à un outil qui peut l’être. Byobu partage les sécurités anti-sessions-imbriquées de tmux : puisque l’unique session Byobu est une session tmux, il peut devenir délicat d’utiliser tmux.

Conclusion

Byobu est le grand vainqueur de ce match. Il existe de nombreux cas pratiques où ce logiciel vous sauvera la mise : lorsqu’il ne le fera pas, le confort d’utilisation qu’il procure reste une raison valable de l’installer sur tout serveur nécessitant un minimum de maintenance.

4 réponses sur “Jouons avec les multiplexeurs de terminaux sous Debian”

  1. Hello,

    Sympa ton article !
    Mais pas du tout d’accord sur tmux et byobu
    Dans les faits, aucun risque de stopper la session tmux via un control + d, tu termine juste la fenetre actuel et bien sûr si c’est ta derniere fenetre cela ferme bien la session active tmux (pas les autres sessions)
    On trouve plein de plugin pour tmux sur github : https://github.com/tmux-plugins.
    Notamment tmux-continuum pour sauver sa session automatiquement ou encore tmux-resurect ou vim-tmux pour les + interessant..
    Il y a aussi tmuxinator pour se connecter à plusieurs serveurs en meme temps.
    On peut aussi ‘cloner’ les sessions ssh super facilement via le script qui va bien.
    Avec un petit peu de motivation on peut avoir une barre de statut à la byobu.
    Je n’ai jamais compris ce qu’apporter byobu mais peut être que j’ai eu le temps de m’habituer au raccourcis claviers (pas mal tweaké je l’avoue)
    Pour screen, c’est le vénérable ancêtre, installer partout… relativement simple à utiliser à la place d’un nohup ou pour travailler à plusieurs sur le même terminal.

  2. Salut Yann et merci pour ton commentaire !

    Point par point : ce que je voulais dire au sujet du Ctrl+d / exit, c’est le fait qu’avec tmux ça ferme d’un coup tous les onglets d’une session. Tu as tout à fait raison en disant que ça n’impacte pas les autres sessions. Ce que j’aime avec Byobu, c’est qu’en étant lancé par défaut, Ctrl+d / exit ferme la connexion SSH plutôt que fermer la session.

    La liste des plugins est très intéressante, je pense qu’une bonne partie est proposée dans Byobu. tmux-resurect m’a l’air d’être un indispensable, effectivement ! L’intérêt de Byobu pour nous va être son démarrage à l’ouverture d’une session, ses fonctions de navigation dans l’historique et ses raccourcis groupés sur les touches Fonction. Même si on peut s’embêter à tout refaire à la main avec tmux, l’avantage de Byobu reste quand même que tout ça est déjà prêt à utiliser 🙂

    Dans les outils que tu cites, par exemple tmuxinator, les recommandes tu pour un usage pro (avec la contrainte de fiabilité que ça impose) ou perso uniquement ?

  3. Hello!
    Merci à toi pour ton blog !
    bizarre , je n’ai pas ce comportement avec le ctrl + d pour moi c’est juste un exit sur le terminal actif

    Oui byobu est un peu plus ‘out of the box’
    Pour tmuxinator je l’utilise en prod depuis 2,3 ans (sur mon poste, pas lancer en remote). En gros pour les plateformes client je m’organise comme ça :
    1 conf tmuxinator par client avec 1 onglet par role de serveur (LB,front,app,bdd).
    Ca marche plutôt pas mal et on peut lancer des commandes à la connexion, typiquement un sudo.

    Sinon tmux pour mon usage, ca se rapproche un peu d’un ide.
    fentre du haut : code
    bas : console debug
    bas droite : lancement de mon script
    par exemple : http://pix.toile-libre.org/upload/original/1480614147.png

    Après byobu, j’ai du test qu’une fois il y a longtemps, c’est une surcouche à screen ou tmux je pense donc on doit pouvoir faire la meme chose

  4. Bon j’ai de nouveaux problèmes.
    1. Byobu propose une unique session, ce qui n’est pas génial lorsqu’on travaille à plusieurs sur le même poste
    2. Bien plus gênant, le scroll de la souris dans le terminal ne remonte pas dans l’historique de la console distance mais dans un mélange de ce qui a été reçu :s

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.