Blog

Tmux

obelux
Share Button

Grégoire, membre de la communauté de blogueurs JobProd.
On ne présente plus les avantages de la ligne de commande pour les développeurs pressés: légèreté, flexiblité et efficacité en sont les maîtres mots.

Mais la force des interfaces en ligne de commande (ne faire qu’une seule chose et la faire bien) amène aussi son lot d’inconvénients Je cherche un job dans lequel je me sens bien maintenant !

On se retrouve rapidement submergé par une multitude de fenêtres, chacune dédiée à une tâche spécifique.

Les multiplexeurs de terminaux ont été conçus pour minimiser ce problème : ils permettent de regrouper plusieurs fenêtres en une, facilitant le passage d’une application à l’autre.

Le multiplexeur le plus connu est incontestablement « screen » (développé par le projet GNU depuis 1987)[1]. Mais plus récemment, un challenger de taille est arrivé : il s’agit de « tmux », conçu initialement pour le projet OpenBSD[2]. Tmux est disponible dans les gestionnaires de paquets de la majorité des distributions Linux, et il a été porté sous Windows et Mac OS. Son installation est donc simple, et d’autant plus rapide qu’il s’agit d’un logiciel très léger.

Voici un exemple d’utilisation de tmux après installation.

tmux_init

A première vue, l’intérêt de tmux semble limité, mais avant de découvrir son plein potentiel, il est nécessaire de connaître ses éléments fondamentaux : les fenêtres (windows), panneaux (panes) et les sessions.

Tmux windows :

Une fenêtre utilise tout l’espace disponible sur l’écran. Par défaut, une fenêtre contient une interface en ligne de commande (un shell), qui se comporte de la même manière que n’importe quel terminal.

Il est possible de créer une nouvelle fenêtre à l’aide des touches Ctrl+b, suivi de c (create)*. Les fenêtres nouvellement créées prennent le focus et lancent un nouveau shell. Elles apparaissent également dans la barre de statut de tmux, précédées d’un numéro.

tmux_windows

Pour passer d’une fenêtre à l’autre, il suffit d’appuyer sur les touches Ctrl+b, suivi du numéro de la fenêtre sélectionnée.
Les touches Ctrl+b puis w permettent également de lister toutes les fenêtres en cours d’utilisation.

Tmux facilite donc grandement la navigation entre les différentes fenêtres, et ce d’autant plus que l’utilisateur prend l’habitude d’utiliser régulièrement les mêmes applications dans les mêmes fenêtres. Il devient alors possible de passer de l’une à l’autre en quelques dixièmes de secondes.

Mais ce n’est pas tout, tmux offre également la possibilité d’afficher plusieurs applications dans la même fenêtre, par l’intermédiaire des ‘panes’.

Je cherche un job dans lequel je me sens bien maintenant !

Tmux panes :

Les panes (panneaux, carreaux) sont utilisés pour diviser horizontalement ou verticalement la fenêtre en cours d’utilisation, afin d’afficher plusieurs applications simultanément. Cela permet par exemple d’éditer du texte dans le panneau supérieur, tout en lisant un fichier de log dans le panneau inférieur.

tmux_panes

La création d’un panneau vertical s’effectue à l’aide des touches Crtl+b puis % (Ctrl+b, suivi de  » pour une division horizontale). De la même manière que pour les fenêtres, tmux lance un shell dans le panneau nouvellement créé, et ce dernier prend le focus. Pour fermer un panneau (ou une fenêtre), il suffit de s’en déconnecter (Ctrl+D sous Linux).

Les panneaux ne sont pas liés de manière définitive à une fenêtre
: il est possible de déplacer un panneau vers une fenêtre existante et même d’en créer une nouvelle, spécifiquement dédiée à ce panneau.

L’intégralité des commandes disponibles est décrite dans la documentation de tmux, qui, en digne membre du projet OpenBSD, est packagé avec un manuel aussi épais que l’intégrale des oeuvres de Victor Hugo. Ce manuel est très utile pour configurer tmux ou découvrir quelques fonctionnalités intéressantes, telles que les sessions.

Tmux sessions :

L’ensemble des fenêtres et panneaux associés constitue ce que l’on appelle une session. Tmux peut héberger plusieurs sessions en parallèle et l’utilisateur choisit de passer de l’une à l’autre en fonctions de ses projets.
La touche Ctrl+b suivie de d (detach) permet de passer tmux en arrière-plan, et de commencer une nouvelle session. Il est également possible de donner un nom à une session, afin de la retrouver plus facilement.

Les sessions sont particulièrement pratiques pour partager son écran avec un autre utilisateur (remote pair programming FTW!) et pour assurer la persistence des fenêtres hébergés par tmux. Ainsi, en cas de déconnexion impromptue, tmux détache la session du terminal et la place en arrière-plan. Lorsque l’utilisateur se reconnecte, il lui suffit de se réattacher (tmux attach) à la session pour retrouver ses applications.

En conclusion tmux (ou tout autre multiplexeur) est aujourd’hui un outil essentiel pour de nombreux développeurs. L’encapsulation des applications dans un assemblage type poupées russes (panneaux -> fenêtres -> sessions) est extrêmement pratique pour passer rapidement d’un contexte à un autre.
De plus, tmux est suffisamment flexible pour que chaque utilisateur puisse en tirer le maximum. A titre d’exemple, le plugin ‘vimux’[4] permet de contrôler tmux directement à partir de vim. Bien que la prise en main de tmux puisse demander quelques heures d’efforts, le jeu en vaut largement la chandelle, particulièrement sur le long terme.
tmux_gregg

* La majorité des commandes de tmux sont préfixées par Ctrl+b. Néanmoins de nombreux utilisateurs choisissent de remplacer Ctrl+b par Ctrl+a[3], d’une part pour conserver le préfixe de ‘screen’, et d’autre part pour éviter à long terme les effets « syndrôme du canal carpien »! Bien évidemment, les utilisateurs d’Emacs ne verront pas d’inconvénient à utiliser Ctrl+b, mais c’est une autre histoire…

Je cherche un job dans lequel je me sens bien maintenant !

Liens :

[1] screen: https://www.gnu.org/software/screen/

[2] tmux: http://tmux.sourceforge.net/

[3] tmux config: https://github.com/JudgeGregg/dotfiles/blob/master/.tmux.conf

[4] vimux: https://github.com/benmills/vimux

Grégoire

Tout comme Grégoire, vous êtes un passionné de développement ?
Alors, que vous soyez simplement curieux de rencontrer des entreprises très techniques et humaines, ou à la recherche de belles opportunités, nous vous invitons à cliquer ci-dessous !

Je cherche un job dans lequel je me sens bien maintenant !

GreggGrégoire Juge
Tombé dans la marmite Linux depuis quelques années déjà, je m’intéresse au mouvement open-source dans son ensemble. Techniquement, j’apprécie les systèmes légers et flexibles qui me permettent de focaliser mon attention sur l’essentiel.
A mes heures perdues j’aime également travailler sur des plate-formes de type Raspberry Pi ou OpenMoko, qui sont une passerelle idéale pour découvrir un autre domaine passionnant: l’électronique embarquée.

En savoir +

Share Button

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>