Navigation

Contactez-nous

Kitpages
17 rue de la Frise
38000 Grenoble
tel : 04 58 00 33 81

Par Elie Charra (twitter accounteliecharra) Dernière mise à jour : 08 March 2016

Débrider son terminal avec tmux

Introduction

Tmux est un multiplexeur de terminal qui vous permettra d'augmenter significativement votre productivité, que ce soit en local sur son poste ou même sur un serveur distant.

Mais plus exactement qu'est-ce-qu'un multiplexeur de terminal ? Pour reprendre le site web de tmux :

It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal

Cela va donc nous permettre d'avoir de multiples programmes ouverts dans un seul terminal, de pouvoir basculer des uns aux autres et pas mal d'autres choses.

Tmux fonctionne également sur le modèle client / serveur, on va donc pouvoir avoir plusieurs utilisateurs sur un même terminal.

Installation

Le code source de tmux est hébergé sur Github.

Vous pourrez trouver tmux dans la majorité des package manager, dans ce tutorial nous allons travailler sur debian.

Voici donc la commande pour l'installer depuis apt :

$ sudo apt-get install tmux

Utilisation basique

Pour lancer une nouvelle session tmux il suffit simplement de taper :

$ tmux

Interface

Vous deviez retrouver votre shell favori, mais cette fois-ci vous remarquerez la barre de status de tmux en bas.

Dans l'ordre de gauche à droite :

  • [1] : Le numéro de la session active entre crochets (ici 1).
  • 0:~* : Une fenêtre ouverte (fonctionne comme des onglets) avec le titre (ici ~, je suis dans mon homedir et je n'ai pas explicitement donné de nom) ainsi que * qui signifie que la fenêtre est active.
  • elie-N750JK : le nom d'hôte de la machine
  • La date courante

Cette barre est bien sur personnalisable, nous ne nous attarderons pas sur ce point dans ce tutorial.

 

Commandes de base


La gestion de tmux se fait essentiellement via des raccourcis clavier qui commencent tous par une hotkey (Control+b par défaut), voici la liste des commandes utiles sous tmux :

  • c : Créer une nouvelle fenêtre dans la session tmux active
  • n : Switcher entre les différentes fenêtres de la session
  • 0 : Switcher sur la fenêtre 0
  • d : Détacher la session (la session est mise en arrière-plan mais n'est pas fermée)
  • , : Renomme la fenêtre courante
  • w : Affiche la liste des fenêtres (ce qu'on va retrouver dans la statusbar)
  • t : Afficher l’heure
  • & : Ferme la fenêtre
  • ? : Affiche les commandes disponibles
  • : : Affiche le prompt tmux 

Commandes des split

Il est possible de découper une fenêtre en multiples panneaux avec les commandes suivantes :

  • : Split vertical du terminal courant
  • % : Split horizontal du terminal courant 
  • x : Ferme le panneau

Utilisation avancée

Attach & detach

Il est possible de passer toute une session tmux en arrière plan ou de rejoindre une session en cours.

Pour cela 3 commandes utiles :

  • attach : permet de s'attacher à une session
  • detach : permet de passer la session courante en arrière-plan
  • list-sessions : permet de lister les sessions actives

On peux aussi utiliser le raccourci Ctrl+b + d pour détacher la session.

On peux également attacher plusieurs clients à la même session ! 

Configuration

Avec une configuration avancé on peux utiliser la souris pour gérer les panneaux et les fenêtres.

Dans cette configuration on peux aussi s'amuser à customiser la statusbar.

Nous n'allons pas rentrer dans les détails de la configuration, pour en savoir plus se référer à la documentation de tmux.

Voici une configuration basique mais assez complète sans être trop intrusive : https://gist.github.com/eliecharra/50a0214d4623d25ecd1c

# Terminal
# --------

# fireworks
set-option -g default-terminal "screen-256color"

# Mouse
# -----

set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on

# Windows
# -------

# Split window horizontaly (legacy & 1.9+)
bind-key '|' split-window -h
#bind-key '|' split-window -h -c "#{pane_current_path}"

# Split window verticaly (legacy & 1.9+)
bind-key '-' split-window -v
#bind-key '-' split-window -v -c "#{pane_current_path}"
bind-key '_' split-window -v
#bind-key '_' split-window -v -c "#{pane_current_path}"

# Status bar
# ----------

# Refresh every 5 seconds
set-option -g status-interval 5

# Justify on left
set-option -g status-justify left

# Expect utf8 string
set-option -g status-utf8 on

Cette configuration permet le contrôle de tmux à la souris pour :

  • Changer de fenêtre par clic sur la statusbar
  • Changer de panneau par simple clic
  • Redimensionner les panneaux en attrapant les bords
  • Scroller avec la molette
ATTENTION : Cette configuration active la sélection par souris dans tmux (comme le mode visuel dans vim). Pour sortir de ce mode, il faut maintenir SHIFT enfoncé.

Copiez-collez le contenu dans ~/.tmux.conf puis lancez la commande suivante pour appliquer la configuration : 

$ tmux source-file ~/.tmux.conf

Ressources

Petit aide mémoire des raccourcis https://gist.github.com/MohamedAlaa/2961058

Configuration tmux simple mais assez complète https://gist.github.com/eliecharra/50a0214d4623d25ecd1c

Commentaires

Note : on ne peut plus ajouter de commentaire sur ce site
Différences avec terminator
@ibrahim zehhaf Terminator est un terminal "lourd" alors que tmux est un multiplexeur qui tourne dans ce même terminal.

Tmux est headless, par exemple on peux s'en servir sur un serveur pour garder une session sur un travail en cours en se détachant / re-attachant à celle-ci, partaber une session à plusieurs, etc etc.
Jolie découverte
Merci pour cette prestation, j'utilise beaucoup terminator qu'elle est le plus de tmux qui me fera basculer vers lui.