Un terminal au top avec tmux !


[Logo tmux]

/usr/bin/tmux et plus si affinités...

09 avril 2025



Avec la configuration spéciale TheRaphit.com

[Mon tmux.conf détaillé] [Sessions imbriquées]
[Téléchargement & installation] [Commandes et raccourcis]



Retrouvez aussi mes autres guides sur UNIX et Internet en général






Bienvenue aux amateurs de terminal et de ligne de commande, ainsi qu'à tous ceux qui débutent avec les systèmes UNIX.

Aujourd'hui je vous propose d'améliorer votre confort de travail grâce à l'outil dont vous ne pourrez plus vous passer : le multiplexeur de terminal tmux. Découvrez ici une présentation de ce logiciel, ainsi que la configuration que je vous ai préparé pour celui-ci. Vous allez pouvoir bénéficier d'un environnement ergonomique, et qui vous permettra, en supplément week-end, de surveiller le fonctionnement de votre système !


››› Le terminal du 21ème siècle

Parfois, ce foutu siècle nous apporte de bonnes choses, et tmux en fait partie !

Il s'agit d'un multiplexeur de terminal, c'est à dire un programme vous permettant, à partir d'un terminal parent unique, d'ouvrir de nouvelles fenêtres filles, qui se comporteront comme des terminaux indépendants, exécutant leur propre shell. L'autre principal intérêt lorsqu'on utilise un multiplexeur, c'est que l'on peut interrompre sa session de travail à tout moment et la reprendre plus tard, et depuis un autre terminal parent.

Accessoirement, si vous êtes connecté à distance à votre serveur, autrement que par un réseau local, un multiplexeur de terminal vous évitera de perdre une partie de votre travail ou que l'exécution d'un programme s'interrompe à cause d'une rupture de votre connexion SSH.

Si vous êtes un féru de ligne de commande, vous connaissez déjà probablement GNU Screen, qui a été un standard au 20ème siècle. Le principe est similaire, mais avec de (très) nombreuses améliorations.



[Capture GNU Screen]
GNU Screen sur l'une de mes machines, ici avec trois fenêtres (terminaux) différentes


Aujourd'hui, tmux est disponible et fonctionne à peu près partout. Je l'ai installé sans problèmes sur Linux, FreeBSD, NetBSD, GNU Hurd ainsi que Solaris. Quel que soit votre système UNIX récent, il y a probablement un package de tmux pour celui-ci !

››› Mode de fonctionnement

Bien qu'il fonctionne de manière simulaire à Screen, à savoir en utilisant un socket UNIX, tmux se distingue par son modèle client-serveur.

Concrètement, lancer une première session démarre également un serveur tmux, qui sera par suite utilisé pour toutes les sessions ultérieures du même utilisateur, sessions qui, elles, sont les clients.

C'est important à savoir dans la mesure où, pour manipuler le programme, vous disposez d'une commande unique, à savoir : tmux, et que cette commande vous permet à la fois de piloter vos clients et le serveur ce qui n'est pas forcément évident au premier abord. Certaines options de la commande tmux agiront sur le serveur ou sur un client.

Par exemple, pour lancer votre première session (et donc le serveur), je vous recommande ceci :
% tmux -u -2 -f ~/.tmux/my_config.conf
Détails des paramètres utilisés :
  • L'option -u force le mode UTF-8. Ceci est intéressant si vous lancez le programme depuis un terminal qui ne tient pas forcément compte de vos variables d'environnement existantes. Bien que l'UTF-8 fut au départ une bonne 21ème sièclerie, il ne pose plus de problèmes aujourd'hui, et vous permettra d'afficher les caractères spéciaux.
  • L'option -2 force le mode 256 couleurs pour les mêmes raisons. Notamment si la variable $TERM n'est pas correctement définie sur le terminal parent. Nous verrons plus tard que tmux vous permet d'utiliser son propre type de terminal, justement pour ne pas être enquiquiné par ce genre de problème.
  • L'option -f enfin, vous permet de définir le fichier de configuration du serveur. Il est important d'avoir votre propre configuration pour bénéficier d'un maximum de fonctions du programme, non activées par défaut. Rassurez-vous, pas la peine de fouiller la documentation pendant deux jours, cette page est là pour ça. ;) Je vous donnerai les quelques directives de configuration les plus intéressantes !
Une fois cette première session créée, et le serveur démarré, vous pouvez lancer une nouvelle session avec la commande tmux new-session qui utilisera cette fois le même serveur, donc la même configuration. De même, vous pouvez lister les différentes sessions avec tmux list-sessions, et récupérer une session avec tmux attach. A noter qu'une session tmux peut s'attacher à deux endroits simultanément ! Vous pouvez abréger la plupart des commandes si ce n'est pas ambigu. Ainsi par exemple, tmux new ou tmux list-sess peuvent être utilisées. Pour détacher une session d'un terminal depuis un autre, utilisez tmux detach.



[Capture tmux base]
Exemple de session tmux avec la configuration par défaut du programme


Tout comme Screen utilise la combinaison de touches [Ctrl]+[a] pour manipuler les fenêtres, vous disposez sous tmux de la combinaison de touches [Ctrl]+[b], que je vais abréger en C-b, car c'est ainsi qu'elle est désignée dans la configuration de tmux. Les auteurs ont probablement choisi cette combinaison pour se distinguer de Screen mais il faut reconnaître que ce n'est pas pratique. Heureusement il est possible de passer sur un bon vieux C-a en configurant de manière appropriée le serveur.

Une des différences majeures avec Screen en revanche, c'est que tmux gère un buffer de défilement par fenêtre et dispose d'un menu contextuel, pour peu que vous ayez activé la souris (ce que je vous recommande vivement). Celui-ci vous permet d'effectuer certaines opérations de manipulations des fenêtres sans taper de commande ou faire appel au clavier.



[Capture tmux menu]
tmux avec son défilement indépendant par fenêtre et son menu contextuel


Ce n'est qu'une partie des possibilités. Il est donc plus que temps de personnaliser tout cela plus avant, à l'aide d'un fichier de configuration mitonné aux petits oignons.

››› La configuration TheRaphit.com passée au peigne-fin

Je vais maintenant vous détailler point par point le fichier de configuration que je vous propose, en fin d'article.

Sous tmux vous avez beaucoup plus de possibilités pour travailler avec des fenêtres partagées et imbriquées. Aussi pour être précis, il vaut mieux parler d'onglet pour désigner l'équivalent des fenêtres de Screen (ce qui s'affiche avec un numéro dans la barre de statuts), et de fenêtre lorsque vous créez de nouveaux terminaux dans un onglet.

Dans les commandes tmux, il est question respectivement de window et de pane, car ils ont repris la terminologie de Screen. Cela peut être trompeur par rapport à ce guide, mais néanmoins cela me paraît plus cohérent de parler d'onglet pour des éléments dont les noms apparaissent dans la barre de status, tels des onglets de navigateur. L'élément où s'exécute le shell, et qui peut être unique ou multiple dans un onglet, étant une fenêtre.

1:    unbind C-b
2:    unbind '"'
3:    unbind %
4:
5:    set-option -g prefix C-a
6:    set-option -g clock-mode-style 24
7:
8:    bind-key C-a last-window
9:    bind-key C-c new-window
10:   bind-key a send-prefix
11:   bind | split-window -h
12:   bind - split-window -v
13:
14:   set-window-option -g aggressive-resize on
15:   set-window-option -g monitor-activity on
16:   set-window-option -g window-status-current-style bg=colour9,fg=colour255
17:   set-window-option -g window-status-activity-style fg=colour11,bold
18:   set-window-option -g window-status-bell-style bg=colour22,fg=colour201,bold
19:
20:   set-option -g mode-style fg=colour11,bg=colour22
21:   set-option -g display-panes-colour colour11
22:
23:   set -g mouse on
24:   set -g default-terminal screen-256color
25:   set -g history-limit 100000
26:   set -g message-style fg=colour11,bg=colour22
27:   set -g message-command-style fg=colour11,bg=colour22
28:   set -g pane-border-style fg=colour244
29:   set -g pane-active-border-style fg=colour244,bg=default
30:   set -g status-interval 15
31:   set -g status-fg colour255
32:   set -g status-bg colour236
33:   set -g status-left-length 256
34:   set -g status-right-length 256
35:   set -g status-left "[#{session_name}] #[fg=colour255,bg=colour62]#(hostname -s)#[fg=default,bg=default] "
36:   set -g status-right "#[fg=colour252,bg=colour60]#(~/bin/status/uptime.sh)#[bg=default] #[fg=colour255,bg=yellow]#(~/bin/status/load.sh)#[bg=default] #[fg=colour255,bg=colour53]#(~/bin/status/memory.sh)#[bg=default] #[fg=colour255,bg=colour23]#(~/bin/status/disk.sh)#[fg=colour255, bg=default] %Y-%m-%d %H:%M#[default]"

Ah oui, il y a un peu de monde ! Voyons donc tout cela ensemble. Il est maintenant temps de se démarrer une petite session pour voir le résultat !


[Capture tmux configuration TheRaphit.com]
Le résultat obtenu avec cette configuration, ainsi qu'avec mes scripts de statuts


Pour le load average, la valeur indiquée est celle à une minute. Pour la mémoire et l'utilisation disque, vous avez la valeur occupée absolue (en octets) ainsi que la valeur relative (un pourcentage du total). Petit bonus obtenu grâce au rafraîchissement automatique des status, si vous utilisez tmux sur une machine distante. Un minimum d'activité va être généré sur votre session SSH, ce qui évite qu'elle soit interrompue par le CG-NAT, si votre FAI en a déployé un.

Vous retrouverez la configuration ainsi que les scripts dans la section téléchargement, en dernière partie de cet article.

››› Les sessions imbriquées

Bon OK tout ça c'est bien bô mais je sais déjà ce que vous allez me dire : « bla bla tu nous proposes du réchauffé là, y'aurait pas un peu d'exclusif, quelque chose qu'on ne voit pas ailleurs ? »

Votre exigeance va être satisfaite, puisque je vais vous présenter tout spécialement ma configuration permettant de gérer de manière simple et claire l'imbrication des sessions tmux !

Qu'est-ce donc que cette diablerie ?? Il s'agit en fait de récupérer une session tmux depuis une autre session tmux. Par exemple, plutôt que d'ouvrir à chaque fois de nouvelles instances de votre émulateur de terminal sur votre machine de travail, vous pouvez utiliser tmux sur celle-ci, vous connecter à vos hôtes distants, puis récupérer une session existante sur ceux-ci.



[Dawg]


Vous vous rappelez lorsque je disais que l'on pouvait manipuler le serveur directement à l'aide de la commande tmux ? Par exemple, si vous souhaitez changer la couleur de la barre de statuts sans fermer vos sessions, vous pouvez utiliser :
% tmux set -g window-status-current-style bg=colour9,fg=colour255
C'est exactement ce que je fais avec ma configuration, en plus de quelques autres ajustements, comme déplacer la barre de statuts en haut de la fenêtre parente. Cela permet de distinguer la session locale de la session imbriquée facilement, et de ne pas se perdre.



[Exempe d'imbrication 1] [Exemple d'imbrication 2] [Exemple d'imbrication 3]
Quelques exemples de sessions imbriquées dans différents onglets, avec une ou deux fenêtres vers des machines différentes.
Vous pouvez cliquer sur les miniatures pour agrandir


Pour détacher une session imbriquée, vous devez envoyer un C-a a d dans l'une des fenêtres de celle-ci. En effet un simple C-a d détachera la session parente !

En pratique, je vous recommande de naviguer dans les sessions imbriquées à l'aide de la souris, ce sera beaucoup plus commode. A noter que le menu contextuel de tmux ainsi que les fonctions de scrolling à la molette s'appliqueront à la session imbriquée. C'est bien ce que l'on souhaite, puisque la fenêtre de la session parente ne correspond pas à la machine sur laquelle on travaille.

››› Téléchargement de la configuration et installation

Je vous ai préparé une petite archive de ma configuration, que je vous mets à disposition ici : tmux-theraphit-1.0.tar.gz.

Cette archive est consituée de deux répertoires, dot-tmux et home-bin, ainsi que d'un fichier, shell-configuration. Le contenu du premier répertoire (mes fichiers de configuration) est à copier dans le répertoire ~/.tmux de votre compte utilisateur (si vous en aviez déjà un, vous pouvez rajouter les deux fichiers que je vous fournis sans problèmes). Le second contient tous les scripts pour faire fonctionner la configuration. Vous devez le copier dans un répertoire ~/bin de votre compte, que vous ajouterez à votre variable PATH.

Quelques étapes supplémentaires concernant les scripts et le contenu de home-bin : Vérifiez bien que chacun des scripts dispose des droits d'exécution (0755, ou au moins 0700 pour vous-même). Il vous faudra peut-être modifier la variable TMUX_BIN au début du script tmux-wrapper.sh si tmux n'est pas présent sous /usr/bin/tmux sur votre système. Ce peut être notamment /usr/local/bin/tmux ou /usr/pkg/bin/tmux. Vous pouvez aussi faire un lien symbolique

Une fois tout installé, vous pouvez utiliser simplement tmux suivi d'une commande (new-session, attach, ...) sans autres paramètres, le script tmux-wrapper.sh les ajoutant pour vous.

Enfin pour ceux qui veulent quelque chose de simple, j'ai également une version de mon tmux.conf stand-alone de disponible, c'est à dire sans les scripts de status, sans la configuration multi-fichier pour les sessions imbriqués et sans le wrapper. Un simple fichier à utiliser directement, pour bénéficier de mes réglages de couleurs sur la barre de status, de mon style de fenêtrage et de mes combinaisons de touches.

››› Les commandes et raccourcis principaux

Pour finir, je vais vous résumer en une seule section les raccourcis et commandes que j'ai évoqués à plusieurs endroits de cette page, et que vous serez amenés à utiliser le plus souvent avec tmux. Le programme offre un nombre conséquent de possibilités, donc cette partie est volontairement non-exhaustive afin d'aller à l'essentiel.

Les raccourcis ci-après supposent que vous utilisez
ma configuration, qui en modifie certains. Pour les manipulations à la souris, cela suppose également que celle-ci ait été activée au niveau du serveur tmux, ce que vous pouvez faire directement avec un tmux set -g mouse on une fois le serveur lancé, si vous souhaitez uniquement cela.

Contrôle des sessions et du serveur, à utiliser directement sur le shell du terminal parent : Raccourcis clavier principaux disponibles dans une session - ici un C-a signifie une pression sur les touches [Ctrl]+[a] : Enfin voici quelques unes des commandes que vous pouvez utiliser directement en appelant un prompt dans la session, avec C-a : du moins les plus utiles. Pour information, la ligne de commande interne dispose d'une complétion avec la touche [Tab] au prompt.

Comme toujours sous UNIX, vous pouvez vous référer à la man page du logiciel (man tmux) pour vous renseigner sur tout ce qu'il est possible de faire, notamment avec la ligne de commande interne.
La Revue de TheRaphit.com

[Compteur]
Nombre de visiteurs
depuis le 13 mai 1997.


[Article précédent] [Article suivant]

[Accueil] [Dernier article] [Les archives]

TheRaphit's Web Site - La dernière homepage du Web


[(Tout)2 Evangelion] Webzine : La Revue [Pink Zone 2025] [Mathématiques]

[Nouveautés] [Zone de téléchargement]


Site créé le 16 janvier 1997
©1997-2025 by TheRaphit

www.theraphit.com