Le multiplexeur de terminaux tmux

Retour à la page Systèmes

Motivation

Le multiplexeur de terminaux tmux (tmux.github.io) ressemble à son confrère GNU screen (gnu.org/software/screen) plus ancien
Tous deux permettent d'utiliser plusieurs fenêtres dans un seul terminal, comme autant de terminaux, d’y copier/coller du texte, et surtout de retrouver son travail intact après une perte de connexion.
Mais tmux gère mieux la division des fenêtres en panneaux, et il a des paramètres par défaut plus agréables. Screen reste valable sur des systèmes particuliers (par exemples connectés avec un port série).

Lancement et configuration

  • tmux <command> : voir man tmux pour toutes les possibilités;
  • tmux list-sessions, ... : un certain nombre de commandes pour savoir à qui se connecter;
  • tmux attach : récupère une session en cours;
  • tmux -u : force tmux à considérer le terminal comme unicode;
  • tmux setw mode-keys emacs : choisit le comportement en mode copie;

Une fois lancé, tmux peut être contrôlé via des commandes introduites par un préfixe (C-b par défaut) dont la présence sera implicite dans les paragraphes qui suivent.

Des commandes capitales sont:

  • ? pour afficher la liste des raccourcis clavier;
  • : pour entrer des commandes qui n'ont pas de raccourci (voir man tmux pour en avoir une idée);
  • d pour détacher la session courante;

Les fenêtres

  • c crée une nouvelle fenêtre;
  • , renomme la fenêtre courante;
  • p ou n passe d'une fenêtre à la précédente ou la suivante;
  • 0,...,9 pour choisir une fenêtre en particulier;

Les panneaux

Initialement, chaque fenêtre comporte un seul panneau, qui prend tout le terminal.

  • % divise verticalement la fenêtre ou le panneau courant;
  • " le divise horizontalement;
  • C-flèche le redimensionne en "poussant" le bord correspondant;
  • { ou } passe d'un panneau au suivant;

Un panneau se ferme en quittant tous les programmes (même le shell) qui tournent à l'intérieur.

Copier-coller

Pour copier du texte d'un panneau, ou d'une fenêtre à l'autre de tmux:

  • [ entre dans le mode copie;
  • ] colle le texte copié;

Une fois dans le mode copie, les commandes pour sélectionner le texte à copier et le mémoriser dépendent du mode d'édition (vi ou emacs):

  • Mode emacs: C-SPC commence la sélection, A-w copie et revient au mode normal; Le mode copie emacs comprend aussi quelques commandes de déplacement/recherches de emacs.
  • Mode vi: SPC commence la sélection, RTN copie et revient au mode normal; Le mode copie vi comprend aussi quelques commandes de déplacement/recherche de vi.

Copier vers l'extérieur du terminal dépend du terminal en question, pas de tmux. Les séparations entre panneaux (comme |) ne sont alors pas comprises. Pour éviter ces perturbations, on peut occuper temporairement tout le terminal avec le panneau courant:

  • z fait occuper tout le terminal au panneau courant
  • on peut alors copier comme d'habitude sur ce terminal (par exemple: sélection à la souris sur xterm)
  • z fait revenir le panneau à sa taille initiale

Ennuis divers

  • Les commandes éxécutées à chaque démarrage de tmux figurent dans un fichier $HOME/.tmux.conf
  • L’installation par défaut de tmux a l'horripilante manie de renommer la fenêtre courante à chaque commande. Remède: set-option -g allow-rename off
  • Pour changer la touche préfixe (par exemple pour passer de C-b à C-m), mettre set -g prefix C-m
  • Sur terminaux iso-8859-15, et même avec charmap ad-hoc, tmux 2.3 n'affiche pas bien les «é» et «œ» (décalage de curseur, «_» affiché, ...); la version 1.8 s'en tire bien.