gagnez du temps avec tmux
Si vous avez l’occasion de travailler sur des plate-formes unix, linux ou OSX, vous vous battez avec des terminaux suite à une connexion ssh bien souvent. Dans ce contexte, ouvrir plusieurs terminaux séparés dans plusieurs fenêtres peut être intéressant mais fastidieux et couteux, tmux est une solution à regarder dans ce contexte. Ce petit article pour vous permettre de démarrer à moindre frais avec tmux.
Pourquoi faire ?
tmux, une fois installé, permet de gérer votre terminal actuel avec des fonctions autour du découpage de votre espace de travail. Ceci autorise à disposer dans la session de connexion (ie ssh par exemple) de plusieurs commandes, d’un découpage de fenêtrage et de la gestion de celles-ci (taille, position, ouverture/fermeture).
Autre intérêt de l’outil, il permet de quitter temporairement et reprendre la session tout en conservant l’ensemble des commandes en exécution. Ceci peut-être particulièrement utile lorsque vous devez laisser tourner des jobs assez longs et devez temporairement quitter votre poste de travail, pour vous déplacer ou reprendre l’ensemble des travaux un peu plus tard.
Enfin, bien que permettant de gérer un terminal texte, il supporte très bien la manipulation à la souris, que ce soit dans un client ssh type putty par exemple, ou dans une fenêtre xterm sous X11. Ceci est finalement très confortable bien que des séquences de touche existent également pour naviguer de fenêtre en fenêtre ou retailler les zones, mais c’est bien moins pratique.
Installation
Sur votre système préféré il y a de grandes chances que vous trouviez un package déjà tout prêt. Ne vous cassez pas la tête à aller beaucoup plus loin. Si vous ne trouvez pas, posez vous la question de changer de distribution😆.
Démarrer
La configuration de base est simple et permet de démarrer simplement en se concentrant sur les manipulations principales. Vous pourrez constater au fur et à mesure que les fonctions sont très riches.
L’invocation de la commande tmux suffit à démarrer. Vous remarquerez la barre en bas de l’écran présentant à gauche la première “fenêtre” et sur la droite quelques informations comme la date et l’heure. Ces différents champs sont paramétrables pour faire des choses plus pratiques, on verra cela un peu plus loin.
Fenêtre et panneau
On distingue 2 types d’objet dans tmux, les fenêtres qui s’apparentent à des consoles différentes et les panneaux qui découpent la fenêtre actuelle en plusieurs blocs. Chaque panneau embarque une commande de type shell. Chaque fenêtre contient par défaut un panneau qui prend la totalité de l’espace de travail.
Créer, sortir, suspendre, reprendre
Toutes les combinaisons de touches commencent par Ctrl+b (C-b), ceci est modifiable si cela ne vous convient pas.
C-b &
: fermer la fenêtre courante, si c’est la première et la seule, vous sortirez de tmux.C-b d
: suspendre la session tmux actuelle et revenir au shell principale (ssh, xterm, …). La sortie est ponctuée d’un[detached]
, de façon à oublier que l’on n’a pas quitté totalement la session du tmux et par conséquent les programmes lancés à partir de là.
Si un tmux est détaché, on peut le récupérer via la commande tmux attach-session
(ou tmux a
) :
$ tmux list
0: 1 windows (created Sun Sep 9 13:55:24 2018) [92x23]
$ tmux attach-session
Si plusieurs session tmux ont été suspendues, on devra spécifier laquelle récupérer :
1$ tmux list
20: 1 windows (created Sun Sep 9 13:55:24 2018) [92x23]
31: 1 windows (created Sun Sep 9 13:59:25 2018) [92x23]
4$ tmux attach-session -t 0
ligne 4 : reprise de la session 0.
Si on souhaite travailler avec plusieurs session, par exemple chaque utilisateur sur le système utilise la sienne, il sera plus pratique de nommer correctement sa session :
- au lancement :
tmux new -s ma_session
- depuis tmux :
C-b : rename ma_session
- depuis l’extérieur :
tmux rename-session -t old_session ma_session
Une fois renommée, une session devra être manipulée par son nom et plus son numéro, logique.
Les fenêtres
Comme on l’a expliqué, la fenêtre est l’objet de plus haut niveau que l’on manipule au sein d’un tmux. On peut en créer plusieurs via C-b c
. Si votre ligne de statut comporte le flag #I
dans son format, alors le numéro de la fenêtre est affiché, ceci permet de s’y rendre directement. On peut également connaitre la fenêtre active actuellement via le flag #F
, elle est représenté par une étoile.
C-b &
permet de fermer la fenêtre activeC-b x
permet de fermer le panneau actif, étant donné qu’une fenêtre ouvre directement un panneau, en le fermant on ferme également la fenêtre.C-b n
etC-b p
permettent respectivement de passer à la fenêtre suivante et la précédente.C-b *0 à 9*
permet d’aller directement à la fenêtre numéroté
Si la configuration souris est activée, un simple click sur le nom de la fenêtre dans la barre de statut permettra sa sélection, c’est plus simple.
Les panneaux
Si votre fenêtre est suffisamment grande, vous pourrez aisément utiliser la fonction de découpage en panneau de façon à disposer de plusieurs commande sur la même vue. On retrouve ici le fonctionnement de la commande screen
que certains connaissent peut-être déjà.
C-b %
: découpe l’écran verticalement (un panneau à droite, un à gauche), vous remarquerez la couleur du trait séparant les deux panneaux qui indique celui qui est actifC-b "
: découpe l’écran horizontalement (un panneau en haut, un en bas)C-b o
: passe au panneau suivantC-b flèche
: permet de naviguer entre les panneauxC-b q
: affiche en sur-impression le numéreau des panneauxC-b q *numéro*
: permet de passer directement au panneau avec ce numéroC-b x
: permet de fermer le panneau actif
Vous trouverez des combinaisons pour retailler les panneaux au besoin. Encore une fois, à la souris c’est un peu plus simple et intuitif
Configuration
Si vous souhaitez vous fabriquer un environnement bien à vous, vous pourrez jouer sur deux axes : la configuration de tmux et la configuration de votre shell. Il y a des exemples plein l’internet et dans le package également, je vous partage ici les quelques lignes utiles de mon environnement.
Barre de status
Dans ~/.tmux.conf
1set -g status-left '#H'
2set -g status-right '#S
3 #[fg=colour233,bold]#{cpu_bg_color} C: #{cpu_percentage}
4 #[fg=colour233,bg=colour30,bold] %d/%m
5 #[fg=colour233,bg=colour40,bold] %H:%M '
6set -g status-right-length 30
7set -g status-left-length 20
8set-option clock-mode-style 24
9
10setw -g window-status-current-fg colour1
11setw -g window-status-current-bg colour19
12setw -g window-status-current-attr bold
13setw -g window-status-current-format '[#F] #[fg=colour255]#T'
14
15setw -g window-status-fg colour9
16setw -g window-status-bg colour18
17setw -g window-status-attr none
18setw -g window-status-format '[#I] #[fg=colour250]#T'
19
20setw -g window-status-bell-attr bold
21setw -g window-status-bell-fg colour255
22setw -g window-status-bell-bg colour1
23set-option -g visual-bell on
- #1 : on met à gauche le nom du serveur sur lequel est lancé la commande tmux
- #2 : (normalement une seul ligne) partie droite du statut avec le nom de la session en cours (ou son numéro), la consommation CPU courant (à partir du module tmux-cpu), la date et l’heure.
- #6 et 7 : taille maximale des zones droite et gauche
- #8 : uniquement en version 1.x pour une heure en format 24h
- #10-#12 : le style de la fenêtre active
- #13 : si la fenêtre active est sélectionnée #F montrera *, ensuite le titre de la fenêtre avec un style spécifique à partir nottament de la variable d’environnement
PROMPT_COMMAND
- #15-18 idem pour la fenêtre non sélectionnée
- #20-22 : les beep remontée par les commandes apparaissent de façon visuelle
Utilisation de la souris
Comme on a vu, les actions de navigation entre les fenêtres et les panneaux peuvent bénéficier de l’utilisation de la souris. Ici on la configure afin de pouvoir sélectionner et retailler les objets.
1set -g mouse-select-window on
2set -g mouse-select-pane on
3set -g mouse-resize-pane on
Attention, une fois ce mode activé, le copier/coller à la souris dans le terminal doit être accompagné de la touche SHIFT
, c’est un coup de main à prendre, mais finalement pas si génant que cela.
En version 2.7 (sur le repo git à date de cet article) :
set -g mouse on
Reload
Utile, notamment pour préparer sa configuration tmux, le rechargement automatique du fichier de configuration peut s’activer via un binding de touche :
bind r source-file ~/.tmux.conf
Navigation de session
bind * choose-session
Usage avancé
Partage de session
Parmi les avantages certains de la solution en tant qu’utilisateur, le fait de pouvoir jouer avec plusieurs sessions permet également le travail collaboratif, notamment lorsque les personnes sont à distance les unes des autres. Il est en effet possible de s’attacher à plusieurs sur une même session et de travailler collaborativement dans ce cas.
C-b *
: permet de passer à une autre session via une liste, donc sans avoir à détacher sa session actuelle, lister les sessions disponibles et s’attacher à celle de son choix.
Si plusieurs utilisateurs sont sur la même session, la vision est partagée, les commandes tappées et les résultats affichés également. Il est indispensable dans ce mode de fonctionnement collaboratif de systématiquement renommer sa session (avec son nom ou identifiant technique par exemple), de façon à ne pas faire de mauvaise manipulation.
Avec un peu d’utilisation, vous allez constater que cette fonctionnalité à elle seule permet d’investir un peu de temps sur l’outil.
Historique
L’utilisation du scrolling doit se faire avec C-b *pgup/pgdown*
et q
pour sortir du mode de scrolling. Un indicateur en haut à droite indique que vous êtes dans le mode scrolling et votre position dans le buffer.
On peut également entrer dans ce mode d’édition avec C-b [
.
Afin de modifier la profondeur d’historique, on utilisera :
set -g history-limit 5000
Dans ce mode il est également possible de faire une recherche de caractère, les touches à utiliser par défaut sont celles de l’éditeur emacs (pouvant être changé vers vi si besoin) :
C-s
: recherche vers l’avantC-r
: recherche vers l’arrièreg
# : sauter à la ligne numéro #C-space
: marque le début de la zoneAlt-w
: copie la zone, il sera possible de coller ce contenu dansC-b ]
Add-on
De nombreux add-on permettent d’améliorer le fonctionnement de tmux, j’utilise entre autre celui permettant de disposer dans la bare de statut du CPU consommé sur le serveur, c’est parfois pratique.
Il se base sur le module tmux-cpu. Une fois installé vous pouvez simplement modifier votre status-right avec #{cpu_percentage}
.
Conclusion
Si vous êtes arrivés jusque là vous avez probablement soit déjà lancé la commande soit n’attendez que l’occasion de le faire. J’utilise personnellement cet outil depuis pas mal de temps et lorsque l’on gère plusieurs serveurs à plusieurs c’est assez pratique. Bien sûr, ce n’est pas indispensable, on peut tout à fait continuer avec plusieurs fenêtres et connexions ssh… Si vous devez passer par un moyen assez complexe de vous connecter, un bastion de sécurité par exemple, c’est vraiment un must have.
Biblio
Photo from Victor Garcia