Tmux le multiplexeur de terminal Linux

Cette article va couvrir la configuration et les cas d’utilisation courants de mon outil favori, j’ai nommé Tmux.

Il s’agit d’un multiplexeur de terminal sous Linux qui permet d’accélérer votre vitesse de travail de façon astronomique. Je l’utilise depuis qu’un ami me l’a conseillé et ne la lâche plus. Son utilisation est assez simple et il n’y pas beaucoup de choses à retenir pour l’utiliser correctement. J’avais choisi Screen au début car Tmux m’a effrayé par sa complexité mais il est très abordable même pour un novice. Je vois Tmux un peu comme Vim : il faut s’y mettre une bonne fois pour toutes mais le jeu en vaut la chandelle.

Un cas d’utilisation classique est de garder le premier terminal (pane) pour lancer les commandes et le deuxième terminal pour l’affichage du fichier syslog (tail -F /var/log/syslog), permettant ainsi de contrôler en temps réel, l’impact des commandes lancées depuis le premier terminal.

L’installation :

Pour installer Tmux, comme d’habitude :

apt-get install -y tmux

 

La configuration :

Une fois fait, il est conseillé de modifier le fichier de configuration à votre guise. Je vous mets mon fichier /etc/tmux.conf à titre d’exemple :

#------------------------------------------------------------------------------
# DEFAULT CONFIGURATION
#------------------------------------------------------------------------------
# default colors configuration (needed for vim)
set -g default-terminal "screen-256color"

# use your mouse to select pane
#set -g mouse-select-pane on

# enable scroll with the mouse
#set-option -g mouse-select-window on
#set -g mode-mouse on
set -g mouse on

# not sure what these settings are for
set-option -g status-keys vi
set-window-option -g mode-keys vi

# windows starts at 1
set -g base-index 1

# display messages for a second
set -g display-time 1000

# prevent tmux to rename windows
set -g set-titles off
setw -g automatic-rename off

# Set window notifications
set-window-option -g monitor-activity on
set -g visual-activity on

#------------------------------------------------------------------------------
# SHORTCUT
#------------------------------------------------------------------------------
# changing default prefix to CTRL+x
#set -g prefix C-x
#unbind C-b
#bind C-x send-prefix

# reload .tmux.conf file
#bind r source ~/.tmux.conf

# ctrl+left/right cycles thru windows
bind-key -n C-right next
bind-key -n C-left prev

# alt+directions navigates through panes
bind-key -n M-left select-pane -L
bind-key -n M-right select-pane -R
bind-key -n M-up select-pane -U
bind-key -n M-down select-pane -D

# quit tmux
bind \ kill-server

# Copy pasta
bind P paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
bind-key -t vi-copy 'r' rectangle-toggle

#------------------------------------------------------------------------------
# COLOURS
#------------------------------------------------------------------------------
# color0 == black
# color15 == white
# color124 == red
# color240 == gray
# color250 == lightgray
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# PANE
#------------------------------------------------------------------------------
# not active pane separator
set -g pane-border-fg colour244
set -g pane-border-bg default
# active pane separator
set -g pane-active-border-fg colour124
set -g pane-active-border-bg default

#------------------------------------------------------------------------------
# STATUSBAR
#------------------------------------------------------------------------------
# default statusbar colors
set -g status-fg colour235
set -g status-bg colour250
set -g status-attr dim

# current or active window in status bar
set-window-option -g window-status-current-fg colour15
set-window-option -g window-status-current-bg colour0
set-window-option -g window-status-current-format ' #W '

# alerted window in status bar. Windows which have an alert (bell, activity or content).
#set-window-option -g window-status-alert-fg colour124
#set-window-option -g window-status-alert-bg colour15

# command/message line colors
set -g message-fg colour15
set -g message-bg colour124
set -g message-attr dim

# left side of status bar
set -g status-left-length 30
set -g status-left ' #S | #(hostname | cut -d. -f 1) '
 
# right side of status bar
set -g status-right-length 30
set -g status-right '%Y-%m-%d | %H:%M '

# status bar options
set-option -g status-justify centre # alignment of windows
set-window-option -g window-status-format ' #W ' # Inactive windows in status bar

Vous avez désormais un Tmux sur lequel on a envie de passer du temps.

Les raccourcis usuels :

Toutes les commandes Tmux commencent par la combinaison de touches : CTRL+b

Une fois fait, il vous faut entrer une nouvelle touche correspondant au raccourci auquel elle est assignée.

Par exemple, dans un nouveau terminal, si on veut ‘splitter’ le terminal en deux, on fera : CTRL+b puis %

Vous trouvez ci-dessous les commandes usuels pour interagir avec Tmux et lui faire lancer un terminal divisé en 3 en une seule commande par exemple :

Démarrer une nouvelle session :

tmux

Démarrer une nouvelle session  avec un nom:

tmux new -s myname

Attacher une session existante :

tmux a  #  (ou at, ou attach)

Attacher une session existante grâce à son nom :

tmux a -t myname

Lister les sessions existantes :

tmux ls

Tuer une session en utilisant son nom :

tmux kill-session -t myname

Tuer toutes les sessions tmux :

tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}' | xargs kill

 

Vous trouverez ci-dessous une liste non-exhaustive des raccourcis Tmux :

Sessions
:new<CR>  nouvelle sessions
s  lister les sessions
$  nommer une session
Windows (tabs)
c  créer une fenêtre
w  lister les fenêtres
n  fenêtre suivante
p  fenêtre précédente
f  chercher une fenêtre
,  nommer une fenêtre
&  tuer une fenêtre
Panneaux (séparation)
%  séparation verticale
"  séparation horizontale

o  inverser les panneaux
q  montrer les numéros de panneaux
x  tuer panneau
+  casser le panneau en une fenêtre (cf: pour choisir du texte à copier)
-  restorer le panneau depuis une fenêtre
⍽  space - Intervertir les dispositions de panneaux
<prefix> q (Montrer les numéros de panneaux, puis taper le numéro pour y aller)
<prefix> { (Déplace le panneau actuel vers la gauche)
<prefix> } (Déplace le panneau actuel vers la droite)
<prefix> z Activer le mode zoom
Synchroniser les Panneaux

Vous pouvez interagir avec la fenêtre appropriée en tapant votre préfix Tmux (généralement CTRL+b ou CTRL+a) puis un ‘deux-points’ (cf: 🙂 pour afficher l’invite de commande Tmux et y taper :

:setw synchronize-panes

Vous pouvez optionnellement ajouter on ou off pour spécifier quel état vous souhaitez. Sinon l’option est sur on par défaut. Cette option est spécifique à une fenêtre et ne changera donc pas les autres fenêtres ou la façon dont elles fonctionnent. Quand vous avez terminé, mettez-le sur off et relancez la commande tip source.

Redimensionner Panneaux :

Vous pouvez redimensionner les panneaux (appelés panes) si vous n’aimez pas la disposition par défaut. Même si le redimensionnement n’est pas une tâche habituelle, il convient de connaître les commandes adéquats :

PREFIX : resize-pane -D (Redimensionne le panneau actuel vers le bas)
PREFIX : resize-pane -U (Redimensionne le panneau actuel vers le haut)
PREFIX : resize-pane -L (Redimensionne le panneau actuel vers la gauche)
PREFIX : resize-pane -R (Redimensionne le panneau actuel vers la droite)
PREFIX : resize-pane -D 20 (Redimensionne le panneau actuel vers le bas de 20 cellules)
PREFIX : resize-pane -U 20 (Redimensionne le panneau actuel vers le haut de 20 cellules)
PREFIX : resize-pane -L 20 (Redimensionne le panneau actuel vers la gauche de 20 cellules)
PREFIX : resize-pane -R 20 (Redimensionne le panneau actuel vers la droite de 20 cellules)
PREFIX : resize-pane -t 2 20 (Redimensionne le panneau actuel avec l'id 2 vers le bas de 20 cellules)
PREFIX : resize-pane -t -L 20 (Redimensionne le panneau actuel avec l'id 2 vers la gauche de 20 cellules)
Mode Copy:

En utilisant CTRL+b [, nous arrivons dans le mode copy. Nous pouvons dès lors utiliser les touches fléchées pour nous déplacer sur l’écran.Nous pouvons également utiliser les raccourcis Vim, ceux utiliser jusqu’ici pour nous déplacer entre les panes et windows de Tmux. Tmux a également un mode vi pour le tampon. Pour l’activer, il suffit d’ajouter la ligne suivante dans le fichier /etc/tmux.conf :

setw -g mode-keys vi

Avec cette option, nous pouvons utiliser h, j, k et l pour se ddéplacer dans notre tampon.

Pour sortir du mode copy, on appuie simplement sur Entrée. Se déplacer d’un caractère à la fois n’est pas très optimisé. Etant donnée que le mode vi est active, nous pouvons utiliser d’autres raccourcis pour palier à ce problème

Nous pouvons par exemple utiliser w pour sauter au mot suivant et b pour revenir d’un mot en arrière. Nous pouvons utiliser f suivi d’un caractère pour sauter vers ce caractère sur la même ligne et F pour revenir au début de la ligne.

   Fonction                vi             emacs
   Revenir à l'indentation     ^              M-m
   Nettoyer selection         Escape         C-g
   Copier selection          Enter          M-w
   Curseur down             j              Down
   Curseur left             h              Left
   Curseur right            l              Right
   Curseur to bottom line   L
   Curseur to middle line   M              M-r
   Curseur to top line      H              M-R
   Curseur up               k              Up
   Supprimer ligne entière      d              C-u
   Supprimer jusqu'à la fin de ligne   D              C-k
   Fin de ligne             $              C-e
   Aller à la ligne               :              g
   Moitié page vers le bas          C-d            M-Down
   Moitié page vers le haut            C-u            M-Up
   Page suivante               C-f            Page down
   Mot suivant               w              M-f
   Copier tampon            p              C-y
   Page précédente           C-b            Page up
   Mot précédent           b              M-b
   Mode quitter               q              Escape
   Scroll vers le bas             C-Down or J    C-Down
   Scroll vers le haut               C-Up or K      C-Up
   Rechercher encore            n              n
   Rechercher en arrière         ?              C-r
   Rechercher en avant          /              C-s
   Début de ligne           0              C-a
   Début selection         Space          C-Space
   Echanger chars                        C-t
Autres:
d  detacher
t  heure
?  lister les raccourcis
:  prompt

Petite note : Si vous lancez tmux, démarrez une session ssh et lancez un tmux sur la machine à distance, vous obtiendrez deux barres Tmux l’une sur l’autre. Pour entrer les raccourcis sur le tmux en ssh, il convient d’utiliser deux fois la combinaison CRTL+b afin de focus la bonne session tmux.