Table des matières

Tmux: le multiplexeur de terminaux

Présentation

Les multiplexeurs de terminaux sont des outils de manipulation avancée de terminaux virtuels.

Concrètement, cela permet principalement de:

Et en plus, c'est beau!

Cet outil est indispensable si vous intervenez sur des serveurs via ssh. En effet, non seulement les micro-coupures du réseau sont fréquentes mais si le serveur est bien configuré, il vous jettera proprement si vous essayez d'ouvrir trop de sessions et franchement, administrer un serveur avec un seul terminal, c'est la mort (en plus, ce serait une perte de temps idiote d'ouvrir cinquante sessions).

Mais vous pouvez aussi lui trouver une utilité sur votre machine locale, ne serait-ce que pour ranger toutes vos sessions de terminal de manière centralisée, au lieu d'avoir à naviguer entre vos dix bureaux virtuels et vos trois cent fenêtres pour retrouver la session ou vous aviez ouvert le fichier de conf pour annuler les modifications qui font planter votre application ou pire, le serveur X (auquel cas, vous avez définitivement perdu toutes vos sessions, me dites pas que ça vous est jamais arrivé).

Tmux versus Screen

Screen est l'autre multiplexeur de terminaux. Non, on n'est pas en face d'un troll vi-emacs-like mais presque… GNU-screen est un projet GNU tandis que tmux est un projet BSD, c'est dire l'ampleur du débat!

Tmux est un peu plus souple dans l'arrangement des fenêtres et des panneaux mais plus sensible aux erreurs de manipulation.

Je ferai souvent des comparaisons dans les lignes qui suivent.

Fonctionnement

Tmux utilise un architecture client/serveur. Un seul processus tmux gère l'ensemble des sessions et des panneaux. Par exemple, il y a ici trois sessions:

% pstree
...
     ├─tmux─┬─2*[zsh]
     │      ├─zsh───w3m
     │      ├─zsh───irssi
     │      ├─zsh───mocp
     │      └─zsh───pstree
...
% tmux list-sessions
0: 1 windows (created Sat Jul  7 08:54:59 2012) [170x47] (attached)
1: 4 windows (created Sat Jul  7 08:55:15 2012) [194x48] (attached)
2: 1 windows (created Sun Jul  8 11:46:26 2012) [194x48]

Les processus sont bien-sûr détachés du terminal où vous avez lancé le serveur, mais si vous killez le serveur en lui-même, vous perdez tous vos clients. A contrario, screen lance un processus indépendant à chaque invocation, ce qui le rend moins sensible aux fausses manips.

Une session de tmux se compose de fenêtres, qu'on retrouve visuellement en bas de l'écran, comme un système d'onglets. Tmux y ajoute le nom de l'application courante, pas besoin de donner un nom statique à chaque client comme sous screen, même si cette possibilité existe.

Chaque fenêtre peut être découpée en panes (panneau en anglais). Il y a au moins un pane par fenêtre. Chaque pane est un client du serveur.

Les fenêtres d'une session et les sessions sont automatiquement numérotées à partir de zéro.

Utilisation

Lancement des sessions

tmux

La première fois, cela suffit à lancer le serveur et le premier client. Quand on jongle entre les sessions, il vaut mieux utiliser des paramètres:

tmux new
tmux new -s session
tmux ls
tmux attach

ou, en choisissant la session:

tmux attach -t session
tmux attach -d -t session
tmux kill-server

<ctrl> + b

Tous les raccourcis dans tmux commencent par ctrl+b dans le soucis de ne pas entrer en conflit avec les autres applications.

Screen utilise quant à lui ctrl+a mais dans les deux cas, cela peut se configurer. Généralement, les habitués de screen changent le ctrl+b par un ctrl+a mais si vous n'avez pas d'habitude en la matière, je conseille de garder les raccourcis par défaut.

Les fenêtres

Les panes

Les sessions

Configuration

La configuration se fait dans le fichier ~/.tmux.conf

Il y a des exemples de fichiers de configuration sur le site officiel. J'en ai pris un mais j'ai commenté toutes les lignes qui redéfinissent les touches:

# $Id: h-boetes.conf,v 1.2 2009/10/25 21:45:26 nicm Exp $
#
#
# From Han Boetes.

#set -g default-command zsh
set -g status-right "#(uptime|awk '{print $11}') #(date)"

# Statusbar properties.
set -g display-time 3000
set -g status-bg black
set -g status-fg cyan
set-window-option -g window-status-current-attr bright,reverse
set-window-option -g window-status-current-bg cyan
set-window-option -g window-status-current-fg black

# Use c-t instead of c-b as the prefix
#unbind C-b
#set -g prefix C-t
#bind C-t send-prefix
#bind t send-prefix

# Bind function keys.
#bind -n F1 select-window -t 1
#bind -n F2 select-window -t 2
#bind -n F3 select-window -t 3
#bind -n F4 select-window -t 4
#bind -n F5 select-window -t 5
#bind -n F6 select-window -t 6
#bind -n F7 select-window -t 7
#bind -n F8 select-window -t 8
#
## All new windows started at startup.
#new emacs
#neww irssi
#neww mutt
#neww
#neww
#neww
#neww
#neww
#
#select-window -t 1

Liens