Fermez votre terminal, rouvrez-le, et retrouvez exactement où vous l'aviez laissé : c'est ce que tmux rend possible. Vous lancez en SSH un processus long, la connexion saute : avec tmux, il continue de tourner côté serveur, votre session intacte.
Pensez à tmux comme à un immeuble qui ne ferme jamais. La session, c'est l'immeuble entier. La fenêtre, c'est un étage avec son ascenseur. Le panneau, c'est une pièce où vous mettez votre éditeur dans un coin et vos logs dans l'autre. Une fois cette hiérarchie ancrée, tout découle.
À la fin, vous saurez créer et rattacher des sessions, organiser fenêtres et panneaux. Vous configurerez Ghostty pour les vraies couleurs, partagerez une session avec un collègue, et ajouterez des thèmes via un gestionnaire de plugins.
tmux repose sur une architecture client-serveur, et c'est la clé de tout le reste. Quand vous lancez tmux, un serveur démarre en arrière-plan et héberge vos sessions ; votre terminal n'est qu'un client qui s'y connecte. Détacher le client (fermer la fenêtre, perdre la connexion SSH) ne tue pas le serveur : les processus continuent de tourner. C'est textuellement ce que dit la documentation officielle : une session « survit à une déconnexion accidentelle (comme un timeout de connexion SSH) ou à un détachement volontaire ».
C'est ce qui distingue tmux des onglets natifs d'un terminal moderne. Les onglets vivent dans l'application graphique : si elle se ferme, ils disparaissent. Une session tmux vit côté shell, indépendante de l'interface. On y revient en détail dans la section Ghostty.
Trois concepts, du plus large au plus fin, structurent tout :
Côté prérequis, c'est léger : un terminal, un accès shell (macOS ou Linux), et l'envie de mémoriser une poignée de raccourcis. Aucune connaissance préalable de tmux n'est nécessaire. Un détail de vocabulaire à poser tout de suite, parce qu'il revient partout : le prefix (préfixe) est la combinaison de touches qui précède chaque commande tmux. Par défaut c'est Ctrl+b. On y arrive.
Sur macOS avec Homebrew (le gestionnaire de paquets de macOS) :
brew installSur Ubuntu ou Debian :
sudo apt install tmuxVérifiez la version installée :
tmux -VVous obtiendrez quelque chose comme tmux 3.7a (la version stable de juin 2026). Notez que apt sur Ubuntu/Debian installe généralement une version bien plus ancienne que brew sur macOS.
⚠️ Version figée par votre distribution. Puisque votre version de tmux est figée, vérifiez-la avec
tmux -V: certaines options mentionnées plus loin ne s'appliquent qu'à partir de tmux 3.4+.
On lance une première session en lui donnant un nom. Le nom est optionnel, mais c'est une bonne habitude dès que vous en aurez plusieurs :
tmux new -s devtmux s'ouvre. Une barre d'état (status bar) apparaît en bas, avec le nom de la session, la liste des fenêtres et l'heure. Vous êtes à l'intérieur de la session.

Toutes les commandes tmux commencent par le prefix Ctrl+b. Le mécanisme est précis : vous appuyez sur Ctrl+b, vous relâchez, puis vous tapez la touche de commande.
⚠️ Le piège numéro un de tmux. L'erreur la plus fréquente est d'appuyer sur
Ctrl+bet sur la lettre en même temps, comme un raccourci clavier classique.
La commande la plus utile de tmux : détacher la session sans arrêter ce qui tourne dedans. Tapez Ctrl+b, relâchez, puis d (comme detach).
Le terminal redevient normal, et vous voyez :
[detached (from session dev)]La session dev tourne toujours en arrière-plan. Pour lister les sessions actives :
tmux lsdev: 1 windows (created Wed Jul 1 09:14:22 2026)Pour y retourner :
tmux attach -t devVous retrouvez tout, exactement comme vous l'aviez laissé. Petite précision qui corrige une idée reçue répandue : tmux attach sans argument ne fonctionne pas seulement quand vous avez une seule session. Si plusieurs sessions existent, tmux rattache automatiquement la plus récemment utilisée. La commande n'échoue que s'il n'y a aucune session du tout.
Une commande à connaître pour le quotidien, l'attach-or-create : elle rattache la session si elle existe, la crée sinon. Idéale en alias shell.
tmux new-session -A -s devtmux lit un fichier de configuration au démarrage. Deux emplacements possibles :
~/.tmux.conf : l'emplacement historique, cherché en premier.~/.config/tmux/tmux.conf : l'emplacement moderne, conforme au standard XDG.Ce n'est pas cumulatif : un seul fichier utilisateur est chargé, et ~.tmux.conf gagne s'il existe. On utilisera ~/.tmux.conf dans la suite.
Beaucoup remappent le prefix sur Ctrl+a, par habitude venant de GNU Screen (l'ancêtre de tmux, qui utilise Ctrl+a) ou par confort clavier.
# Remapper le prefix de Ctrl+b vers Ctrl+a
set-option -g prefix C-a
unbind-key C-b
# Envoyer un vrai Ctrl+a à l'app (raccourci readline pour début de ligne)
bind-key C-a send-prefixC'est là que tmux devient vraiment utile.

Une fenêtre, c'est un onglet à l'intérieur de la session. Créez-en une avec Ctrl+b puis c. La barre d'état affiche maintenant deux fenêtres, 0:bash et 1:bash* : l'astérisque marque la fenêtre active.
Pour naviguer :
Ctrl+b n → fenêtre suivante (next)Ctrl+b p → fenêtre précédente (previous)Ctrl+b 0, Ctrl+b 1, … → accès direct par numéroPar défaut, la numérotation commence à 0 (l'option base-index).
Pour renommer la fenêtre courante : Ctrl+b ,. Pour renommer la session entière : Ctrl+b $. Ça aide énormément dès que vous jonglez entre plusieurs contextes (api, db, logs).
Un panneau est une division à l'intérieur d'une fenêtre. Deux découpes :
Ctrl+b % → division verticale (deux colonnes côte à côte)Ctrl+b " → division horizontale (deux lignes superposées)Pour naviguer entre panneaux : Ctrl+b puis les flèches directionnelles.
Deux raccourcis à garder sous la main :
Ctrl+b z → zoom sur le panneau actif (il prend tout l'écran). Re-Ctrl+b z pour revenir au layout.Ctrl+b q → affiche les numéros de chaque panneau ; tapez le numéro pendant qu'il s'affiche pour y sauter.Pour fermer un panneau, tapez exit (ou Ctrl+d) dans son shell. Pour tuer directement : Ctrl+b x (kill-pane, avec confirmation y/n). Pour tuer une fenêtre entière : Ctrl+b & (kill-window, avec confirmation également).
Pas de « mode » dédié, juste des raccourcis répétables (maintenez le prefix relâché puis répétez la touche pendant 500 ms) :
Ctrl+b puis Alt+↑ / ↓ / ← / → → redimensionne par pas de 5 cellulesCtrl+b puis Ctrl+↑ / ↓ / ← / → → par pas de 1 celluleEn ligne de commande, resize-pane donne un contrôle fin :
tmux resize-pane -D 5 # agrandir vers le bas de 5 lignes
tmux resize-pane -U 10 # vers le haut de 10 lignes
tmux resize-pane -x 80 # largeur absolue : 80 colonnes
tmux resize-pane -x 50% # largeur en pourcentageCtrl+b Espace (next-layout) fait défiler des dispositions toutes prêtes. Les cinq classiques :
Vous pouvez dupliquer votre saisie clavier dans tous les panneaux d'une fenêtre à la fois :
tmux setw synchronize-panes onLe cas d'usage DevOps concret : ouvrez un panneau SSH par serveur, activez la synchro, tapez une seule fois sudo apt update && sudo apt upgrade -y : la commande s'exécute simultanément partout. Puis désactivez immédiatement (synchronize-panes off) pour ne pas envoyer par erreur une commande sur tous les serveurs.
Ctrl+b [ → entre en copy-mode (mode copie/défilement). Vous naviguez dans l'historique.Ctrl+b ] → colle le dernier buffer copié.Ghostty est un terminal moderne, et si vous l'utilisez, il y a une chose à configurer pour ne pas perdre les couleurs 24 bits (le true color, 16 millions de couleurs) à l'intérieur de tmux.
Le diagnostic d'abord. Ghostty positionne la variable d'environnement TERM à xterm-ghostty. Quand tmux démarre à l'intérieur, il réécrit TERM pour son propre compte, et si la configuration ne suit pas, vous perdez le true color. Voici la configuration à jour, recommandée par la documentation officielle tmux :
# Terminal par défaut de tmux
set -g default-terminal "tmux-256color"
# Activer le true color (RGB) pour Ghostty
set -ag terminal-overrides ",xterm-ghostty:RGB"
# Pareil que terminal-overrides mais pour tmux ≥ 3.2
set -as terminal-features ",xterm-ghostty:RGB"Deux points méritent une explication, parce que beaucoup de tutoriels recommandent encore autre chose :
Pourquoi tmux-256color et pas screen-256color ? La FAQ officielle du wiki tmux l'explique : certaines applications dans tmux ne reconnaissent pas bien les touches quand TERM vaut screen ou screen-256color, alors que les descriptions tmux et tmux-256color disposent de ces capacités. tmux-256color (fourni par un ncurses moderne) supporte aussi les italiques, contrairement à screen-256color. La famille screen* n'est pas « fausse », mais tmux-256color a des capacités strictement supérieures.
Pourquoi :RGB et pas :Tc ? Toujours d'après la FAQ officielle : « RGB est le flag officiel, Tc est une extension tmux » (RGB is the official flag, Tc is a tmux extension). Le flag :Tc (pour TrueColor) continue de fonctionner (il n'est pas cassé), mais :RGB est la forme recommandée aujourd'hui.
Après avoir modifié le fichier, rechargez la configuration sans quitter tmux :
tmux source-file ~/.tmux.conf⚠️ Piège. Lancée en dehors d'une session tmux, cette commande renvoie une erreur. Tapez-la depuis l'intérieur d'une session.
On entre dans le territoire DevOps. tmux permet à deux personnes de voir et piloter le même terminal en temps réel. C'est ce qu'on appelle du pair debugging, et ça change tout sur un incident : deux SRE regardent les mêmes logs et agissent ensemble, sans partage d'écran, sans latence.
Deux méthodes, de la plus simple à la plus propre.
sudo -uDeux comptes différents, marc et julie, sur le même serveur. marc a une session qui tourne. Si julie a les droits sudo pour se substituer à marc, elle rejoint en une commande :
# Côté julie
sudo -u marc tmux attach -t devsudo -u marc lance tmux en tant qu'marc ; tmux retrouve automatiquement le socket de sa session. On peut ajouter -r pour un rattachement en lecture seule, mais attention : -r n'est pas un mécanisme de sécurité (on y revient dans la section Sécurité).
Le prérequis est lourd : julie doit avoir des droits sudo sur marc, ce qui est large et pas scopé à tmux. En contrepartie, sudo laisse une trace d'audit (dans /var/log/auth.log par exemple) : un vrai avantage.
tmux -S)C'est la méthode recommandée pour du partage sans élévation de privilège. Un socket est le fichier par lequel client et serveur tmux communiquent. Par défaut il vit dans /tmp/tmux-<uid>/default, dans un répertoire que tmux crée lui-même en 0700 (accessible au seul propriétaire). Avec -S, vous choisissez son emplacement, et cette protection automatique disparaît : la sécurité devient entièrement votre responsabilité.
# Côté marc : créer la session sur un socket dédié
tmux -S /tmp/tmux-shared/dev.sock new -s dev
# Donner l'accès à julie via un groupe (approche recommandée)
mkdir /tmp/tmux-shared
chgrp devops /tmp/tmux-shared && chmod 770 /tmp/tmux-shared
chgrp devops /tmp/tmux-shared/dev.sock && chmod 770 /tmp/tmux-shared/dev.sock
# Côté julie (membre du groupe devops)
tmux -S /tmp/tmux-shared/dev.sock attachDepuis tmux 3.3 (2022), une commande native complète le dispositif : server-access, une ACL (Access Control List, liste de contrôle d'accès) applicative pour le socket.
tmux server-access -a julie # accès lecture-écriture
tmux server-access -ar julie # accès lecture seule
tmux server-access -d julie # révocationAttention : server-access complète le partage de socket, il ne le remplace pas : le socket doit déjà être accessible au niveau fichier. Sur Debian bookworm (tmux 3.3+), il faut d'ailleurs explicitement tmux server-access -a $USER en plus du chmod du socket.
sudo -u et le socket partagé| Critère | sudo -u marc tmux attach | Socket partagé -S |
|---|---|---|
| Prérequis | droits sudo (larges, pas scopés à tmux) | accès fichier (groupe + chmod), pas de sudo |
| Portée de l'accès | tout le compte marc via sudo | seulement ce socket/session |
| Traçabilité | sudo logue l'appel (auth.log) | aucune trace native |
| Bon usage | quand une élévation est réellement nécessaire | pair debugging par défaut, sans élévation |
Voici comment circule l'accès dans la méthode socket :
tpm (Tmux Plugin Manager, le gestionnaire de plugins officiel) installe thèmes et plugins directement depuis votre .tmux.conf. Pensez à Homebrew, mais pour tmux. On le clone d'abord :
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpmPuis on déclare les plugins dans la config. Voici un fichier complet, pour voir où chaque ligne se place :
# Config Ghostty (depuis l'étape 3)
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-ghostty:RGB"
# Plugins tpm
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'nordtheme/tmux'
# Ligne obligatoire : TOUJOURS en dernière position du fichier
run '~/.tmux/plugins/tpm/tpm'⚠️ La ligne
rundoit être la toute dernière du fichier. Ce n'est pas une préférence de style : tpm a besoin que toutes les lignes@pluginsoient déjà lues avant de s'exécuter. Placée trop tôt, certains plugins ne se chargent pas. C'est l'erreur classique avec tpm.
Rechargez, puis installez les plugins avec Ctrl+b puis I (majuscule, comme Install) :
tmux source-file ~/.tmux.confUn bandeau s'affiche (TMUX environment reloaded...), et la barre d'état prend les tons bleu-gris arctiques du thème Nord. Trois raccourcis tpm à retenir :
| Raccourci | Action |
|---|---|
Ctrl+b I | Installer les plugins déclarés |
Ctrl+b U | Mettre à jour tous les plugins |
Ctrl+b Alt+u | Désinstaller les plugins retirés du fichier |
Pour d'autres thèmes populaires et actifs, regardez catppuccin/tmux (très maintenu) ou janoamaral/tokyo-night-tmux. Et pour des réglages par défaut sensés d'un coup, tmux-plugins/tmux-sensible.

Deux plugins vont plus loin que le style : ils font survivre vos sessions à un redémarrage complet de la machine.
tmux-resurrect sauvegarde les sessions, fenêtres et panneaux (avec leur ordre et leurs layouts exacts, même zoomés), les répertoires de travail, et une liste blanche configurable de programmes à relancer (par défaut : vi vim nvim emacs man less more tail top htop irssi weechat mutt, extensible via @resurrect-processes). Point d'honnêteté important : il ne restaure pas le scrollback (l'historique de défilement) par défaut, ne comptez pas dessus. Raccourcis : prefix + Ctrl-s pour sauvegarder, prefix + Ctrl-r pour restaurer.
tmux-continuum automatise resurrect : sauvegarde toutes les 15 minutes par défaut, et restauration automatique au démarrage du serveur tmux (pas en continu). Il nécessite @continuum-restore 'on' et dépend strictement de tmux-resurrect : sans lui, rien ne fonctionne. Ajustez l'intervalle avec @continuum-save-interval.
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'| Symptôme | Cause probable | Solution |
|---|---|---|
no server running on ... | aucune session, ou UID différent (via sudo -u), ou kill-server malencontreux | vérifier tmux ls sous le bon compte ; relancer une session |
| Les couleurs sont ternes / pas de true color | default-terminal ou terminal-overrides mal configurés | appliquer tmux-256color + :RGB (étape 3) |
source-file renvoie une erreur | commande lancée hors d'une session tmux | la taper depuis l'intérieur de tmux |
| Les plugins tpm ne se chargent pas | ligne run pas en dernière position | déplacer run '.../tpm' en fin de fichier |
| Lag en sortant du mode insertion de Neovim | escape-time trop élevé | set -sg escape-time 10 |
Vous êtes dans un tmux local, vous faites SSH sur un serveur qui a lui-même un tmux : deux tmux imbriqués, et un seul prefix Ctrl+b. Pour envoyer une commande au tmux distant, doublez le prefix : Ctrl+b Ctrl+b puis la touche. Le premier Ctrl+b est consommé par le tmux local, le second est transmis au tmux distant. Solution plus confortable pour un usage intensif : donner au tmux distant un prefix différent (Ctrl+a distant / Ctrl+b local).
Quelques options qui rendent tmux plus agréable au quotidien :
# Numérotation à partir de 1 (aligné sur le clavier)
set -g base-index 1
set -g pane-base-index 1
# Historique de défilement plus long (2000 lignes par défaut)
set -g history-limit 50000
# Activer la souris (sélection, redimension, changement de fenêtre)
set -g mouse on
# Réactivité de la barre d'état (15 s par défaut)
set -g status-interval 5history-limit à 2000 lignes se remplit vite avec des logs verbeux ; 50000 est confortable. mouse on (désactivé par défaut, unifié depuis tmux 2.1) rend la sélection et le redimensionnement plus intuitifs. Attention à status-interval : le réduire rend l'affichage plus réactif, mais si votre barre d'état exécute des scripts lourds, ça coûte du CPU.
tmux n'est pas seul. Deux alternatives reviennent souvent.
GNU Screen est l'ancêtre : créé en 1987, écrit en C. Sa dernière version, 5.0.1 (mai 2025), est une release de sécurité pure corrigeant trois CVE (CVE-2025-46802/46804/46805). Sa cadence est celle d'une maintenance corrective lente, sans nouveau développement de fonctionnalités. Screen reste pertinent pour une raison : sa présence quasi universelle sur les vieux systèmes restreints où l'on ne peut rien installer.
Zellij est le challenger moderne : écrit en Rust, lancé vers 2021, dernière version v0.44.3 (mai 2026). Son atout numéro un est la découvrabilité : une barre d'aide contextuelle permanente affiche les raccourcis disponibles, là où tmux mise sur le prefix et la mémoire. Il propose nativement des layouts déclaratifs, des panneaux flottants persistants, et un système de plugins WebAssembly (WASM, un format binaire portable exécutable partout). Sa config utilise le format KDL. Nuance honnête sur le poids : son binaire pèse environ 38 Mio contre ~900 Kio pour tmux, Rust n'est pas automatiquement aussi léger que le C ici.
| Critère | tmux | GNU Screen | Zellij |
|---|---|---|---|
| Ancienneté | 2007 | 1987 | ~2021 |
| Langage | C | C | Rust |
| Dernière stable (juil. 2026) | 3.7a | 5.0.1 | 0.44.3 |
| Cadence de release | Régulière | Très lente | Active |
| Taille binaire | ~900 Kio | Léger | ~38 Mio |
| Courbe d'apprentissage | Moyenne-élevée | Moyenne | Faible (aide intégrée) |
| Config | .tmux.conf | .screenrc | KDL |
| Écosystème plugins | Grand, éprouvé (TPM) | Quasi inexistant | Jeune (WASM) |
| Présence par défaut | Très large | Quasi universelle | Aucune, install manuelle |
| Excelle pour | DevOps/serveur, SSH distant | Systèmes anciens/restreints | Poste perso, UX moderne |
Le consensus n'est pas tranché : des migrations dans les deux sens sont rapportées. Pour un usage DevOps sur serveurs distants, tmux reste le choix par défaut grâce à sa présence universelle et son écosystème éprouvé.
tmux transforme un terminal en un espace de travail persistant : vos sessions survivent aux coupures SSH, votre écran se découpe en fenêtres et panneaux, et deux personnes peuvent piloter la même session en temps réel. Le geste de base à ancrer : tmux new -s <nom> pour créer, Ctrl+b d pour détacher, tmux attach -t <nom> pour revenir. Le reste (panneaux, layouts, thèmes) se construit par-dessus, une commande à la fois.
Merci de me suivre dans cette aventure ! 🍺