tmux est un multiplexer de terminal — oui, ce billet est un tout petit peu technique — permettant d'ouvrir une session sur une machine et de s'en détacher en laissant la session ouverte (un peu comme screen).

Dans l'usage quotidien1 de ma machine, j'utilise régulièrement un terminal et j'ai un répertoire par « activité » : un répertoire pour tel cours, un répertoire pour telle organisation… Un peu comme tout le monde j'imagine excepté les personnes qui mettent tout sur le bureau !

Lorsque je me consacre à un cours par exemple, je peux être dans le répertoire du cours pour trouver un énoncé, dans un autre terminal, être dans le répertoire pour les corrections… j'utilise donc plusieurs terminaux pour un même cours. Comme je travaille tantôt sur un cours, tantôt sur un autre cours et que j'ai plusieurs bureaux virtuels, ça devient vite désorganisé.

Pendant tout un temps, je retenais que le premier bureau, c'est pour tel cours, le second pour un autre, le cinquième pour les navigateurs internet, le sixième pour la communication instantanée et mail, etc. Depuis quelques temps, j'utilise tmux pour les terminaux et je conserve cette habitude de laisser dans mon bureau virtuel 6 le mail et irc et dans le 5, les navigateurs internet.

tmux me permet d'ouvrir une session par cours. Dans cette session, je peux ouvrir plusieurs terminaux. Les intérêts de tmux sont pour moi :

  • la possibilité de pouvoir me détacher et attacher une session. Ce qui me permet de ne plus être lié à un bureau virtuel pour une activité ;
  • la possibilité de découper ma fenêtre en plusieurs ;

Bref, voici mon aide-mémoire de commandes.

tmux lance une session (numérotée) mais c'est mieux de directement la nommer avec l'option -t :


tmux new -t 

Pour lister les sessions existantes :


tmux ls

Pour rejoindre — s'attacher à — une session existante :


tmux a [-t ]
tmux a [-t ]

Pour tuer toutes les sessions tmux, il suffit de tuer le serveur. Il est aussi possible de n'en tuer qu'une par son nom ou son numéro :


tmux kill-server
tmux kill-session -t 
tmux kill-session -t 

Dès lors que l'on se trouve dans une session tmux, un préfixe défini permet de lancer une commande. Ctrl-b est le préfixe par défaut. Dans la suite, prefix signifie chez moi Ctrl-b. Vous pourrez le redéfinir mais pour moi — en bépo — c'est accessible.

  • prefix d se détache de la session courante ;
  • prefix : permet d'écrire une commande tmux ;
  • prefix $ (re)nomme la session courante ;
  • prefix ) passe une autre session (la suivante « à droite ») ;
  • prefix ( passe une autre session (la suivante « à gauche ») ;
  • prefix s liste les sessions (comme tmux ls mais en étant attaché) et permet de passer d'une session à l'autre ;

Fenêtre

Une session tmux se compose d'une ou plusieurs fenêtres. Une fenêtre occupe tout l'écran du terminal.

  • prefix , renommer la fenêtre ;
  • prefix c créer une nouvelle fenêtre ;
  • prefix n aller à la fenêtre suivante ;
  • prefix X aller à la fenêtre X ;
  • prefix w liste les fenêtres et permet de les parcourir et d'en choisir une ;
  • prefix esperluette supprime la fenêtre courante (et tous ses panels) ;

Panels

Une fenêtre peut être découpée en morceaux / carrés / panels.

  • prefix % scinde le panel en deux verticalement ;
  • prefix = scinde le panel en deux horizontalement (par défaut c'est " mais j'ai changé) ;
  • prefix flèche passe d'un panel à l'autre dans la direction de la flèche ;
  • prefix Ctrl-flèche redimensionne le panel courant dans le sens de la flèche ;
  • prefix o échange les panels ;
  • prefix ; retourne au dernier panel ;
  • prefix x supprime le panel courant

Il est possible d'exécuter les mêmes actions dans tous les panels en même temps. Pour ce faire, entrer la commande :setw synchronize-panes on (et off quand c'est terminé).

Ensuite, on s'amuse à écrire un fichier de configuration en fonction des habitudes que l'on a. Le mien se trouve là.

  • quand je ferme un pane ou une fenêtre, je n'ai pas besoin de confirmer ;

# kill pane without confirm
bind-key x kill-pane
# new window in some directory
bind-key c new-window -c "#{pane_current_path}"
  • je redéfinis le split horizontal en demandant d'ouvrir le nouveau panel dans le répertoire courant ;

# split window verticaly and horizontaly
bind-key = split-window -v -c "#{pane_current_path}"
bind-key % split-window -h -c "#{pane_current_path}"
  • j'augmente la taille du buffer pour l'historique ;

# big history (default is 2000)
set -g history-limit 5000

Voilà, pour le reste, nous verrons à l'usage…


Crédit photo chez DeviantArt par Thoum


  1. Je sais que le mot est un peu tombé en désuétude au profit de journalier… que je trouve beaucoup moins joli. Oui les mots peuvent être beaux.