guest@6admin.io:~$

tmux : le multiplexeur qui a pris le fauteuil

Screen a vingt-trois ans, byobu a habillé ses défauts et il reste des irritants que ni l’un ni l’autre ne règlent: pas de vrais panes (Screen fait des régions, qui se redimensionnent mal), un UTF-8 rétrofité, une config $HOME/.screenrc aux bindkeys hérités des années 80. C’est là qu’entre tmux, né en 2007 sur OpenBSD et qui commence à prendre le fauteuil en 2010.

Le modèle client-serveur

La différence architecturale qui change tout: Screen lance un serveur par utilisateur (les sessions partagent un process), tmux lance un serveur par session et les clients s’y attachent. Conséquences pratiques:

  • les sessions tmux survivent indépendamment: tuer un client ne perturbe pas les autres;
  • tmux attach devient réellement mono-session, fini les sessions fantômes qui traînent;
  • le découpage en fenêtres et panes est natif, pas un découpage de régions posté sur un écran.

Les panes, enfin

# ~/.tmux.conf
set -g prefix C-a                    # l'habitude Screen ne se perd pas
unbind C-b
bind C-a send-prefix

set -g default-terminal "screen-256color"
set -g status-bg colour238
set-window-option -g mode-keys vi

# splits, les vrais
bind | split-window -h
bind - split-window -v
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

Un prefix | coupe verticalement, prefix - horizontalement et les hjkl naviguent de pane en pane. Le buffer de copie est partagé entre panes et fenêtres, le scroll se fait en mode copie avec les touches vi. L’UTF-8 est traité nativement depuis le début: les emoticons et les prompts accentués ne se cassent plus au premier split.

Ce que Screen garde

Honnêteté d’époque: Screen reste indispensable sur les systèmes qui ne l’ont pas en paquet (les vieux Debian et les boxes exotiques) et certaines habitudes de warning (C-a C-a pour rebondir entre deux fenêtres) n’ont pas d’équivalent immédiat. Et byobu enveloppe toujours Screen là où tmux n’est pas installé. La migration se fait par habitude, pas par décret: nouveau serveur, nouveau tmux; ancien serveur, l’attachement Screen reste.

Le point qui ne se voit qu’après coup

Le vrai cadeau de tmux n’est pas les panes, c’est la config lisible. $HOME/.tmux.conf se relit d’un serveur à l’autre, se versionne dans les dotfiles, se transfère par rsync. La config Screen d’époque était un sac de bindkeys sans comment. C’est exactement le genre de fichier qui, quelques années plus tard, finit naturellement dans un repo de dotfiles avec un loader.