LinuxPedia

Wiki libre et indépendant dédié à GNU-Linux et BSD.

Outils pour utilisateurs

Outils du site


commande:tmux

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:

  • Ouvrir plusieurs terminaux virtuels depuis une seule et unique session de terminal
  • Récupérer ses sessions distantes en cas de coupure du réseau
  • Arranger ses terminaux comme des fenêtres en mozaïc et des bureaux virtuels

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 se lance simplement en l'appelant:
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:

  • pour lancer une nouvelle session:
tmux new
  • Pour nommer la session (par défaut un uméro):
tmux new -s session
  • Pour avoir la liste des session ouvertes:
tmux ls
  • Pour rattacher une session:
tmux attach

ou, en choisissant la session:

tmux attach -t session
  • Une session peut être attachée plusieurs fois, c'est marrant de pouvoir utiliser un terminal à plusieurs et ça peut être pédagogique mais pour éviter cela, il vaut mieux forcer la session à se détacher avant d'être attachée:
tmux attach -d -t session
  • killer le serveur (¡attention!):
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

  • c : créer une nouvelle fenêtre
  • & : killer la fenêtre courante et tous les panes qu'elle contient
  • p|n : fenêtre précédente/suivante
  • [numéro] : aller vers la fenêtre numéro x
  • , : renommer la fenêtre

Les panes

  • “ : sépare le pane courant en deux panes, haut et bas
  • % : sépare en deux panes, gauche et droite
  • x : killer le pane
  • ! : séparer le pane de la fenêtre (l'envoie vers une nouvelle fenêtre)

Les sessions

  • s : switcher de session interactivement
  • d : détacher la session

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

commande/tmux.txt · Dernière modification: 2018/11/17 13:52 (modification externe)