Credit : Logo officiel
Utiliser tmux pour gerer ses sessions terminal
tmux, ou comment ne plus jamais perdre une session
Mardi soir, 23h, deploy d'un client en cours. La connexion WiFi de mon train (TGV Strasbourg-Paris) decide de mourir. Sans tmux, le npm run build qui tournait depuis 12 minutes est mort, le serveur se retrouve dans un etat partiel et il faut tout reprendre. Avec tmux : je me reconnecte 3 minutes plus tard, tmux attach et je retrouve mon shell exactement la ou je l'avais laisse, le build a continue tranquillement. C'est cette experience qui transforme un sysadmin junior en quelqu'un qui survit aux urgences.
Si vous faites du SSH regulierement et que vous n'utilisez pas tmux, arretez tout et lisez cet article. Premiere chose que je tape en me connectant a un serveur, c'est tmux attach || tmux new -s work. Toujours. Ca a evite des dizaines de catastrophes.
Dans ce guide je couvre : l'installation, le modele mental (sessions/windows/panes), les raccourcis essentiels, ma config personnelle peaufinee depuis des annees, le mode copie, les scripts d'auto-demarrage, et les pieges classiques.
Installation
# Debian/Ubuntu
sudo apt install tmux
# CentOS/RHEL/Rocky
sudo dnf install tmux
# macOS
brew install tmux
# Verifier la version (>= 3.0 conseille)
tmux -V
La version 3.0+ apporte la souris fluide, les couleurs vraies (truecolor), et la directive set-hook pour des actions automatiques. Sur Debian 12, vous avez la 3.3a, c'est parfait.
Le modele mental : sessions, windows, panes
tmux s'organise en trois niveaux hierarchiques :
- Session : un espace de travail independant, persistant cote serveur
- Window (fenetre) : un onglet dans une session
- Pane (panneau) : une subdivision d'une fenetre, avec son propre shell
Une session = un environnement de travail complet (un client, un projet, un serveur). Une window = un contexte (build, logs, edition). Un pane = une commande qui tourne en parallele.
Toutes les commandes commencent par le prefixe Ctrl+b (note C-b). Par exemple C-b c cree une nouvelle fenetre. Personnellement je remappe le prefixe en Ctrl+a parce que c'est plus rapide et plus ergonomique au clavier (voir ma config plus bas).
Pourquoi c'est revolutionnaire
L'interet majeur de tmux : si votre connexion SSH se coupe, la session tmux continue de tourner sur le serveur. Vous la retrouvez intacte en vous reconnectant. C'est magique et ca sauve des vies. Le shell tmux est independant de la connexion qui l'a lance.
Gerer les sessions
# Creer une session nommee
tmux new -s serveur
# Se detacher proprement (depuis tmux)
C-b d
# Lister les sessions actives
tmux ls
# serveur: 3 windows (created Mon Apr 21 10:15:43 2026)
# client-acme: 5 windows (attached) (created Mon Apr 21 09:12:00 2026)
# Se rattacher
tmux attach -t serveur
# raccourci : tmux a -t serveur
# Tuer une session
tmux kill-session -t serveur
# Tuer toutes les sessions
tmux kill-server
Workflow type d'une journee
Le matin, je lance tmux new -s work. Je travaille dedans toute la journee. Si je dois rebooter mon poste, tmux a au prochain login me retrouve mes onglets ouverts, mes processus en cours, mes logs qui tournent. C'est mon ecosysteme cognitif portable.
Les fenetres (windows)
Dans une session, on cree autant de fenetres que necessaire :
C-b c Nouvelle fenetre
C-b , Renommer la fenetre courante
C-b n Fenetre suivante
C-b p Fenetre precedente
C-b 0-9 Aller a la fenetre N
C-b w Liste interactive des fenetres
C-b f Trouver une fenetre par nom
C-b & Fermer la fenetre (avec confirmation)
Nommez vos fenetres : C-b , puis tapez "logs", "build", "edit". Le statut bas devient lisible : 1:logs 2:build 3:edit*. Indispensable des qu'on depasse 5 fenetres.
Les panneaux (panes)
Dans une fenetre, on splitte en panneaux pour avoir plusieurs shells visibles simultanement :
C-b % Split vertical (panneau a droite)
C-b " Split horizontal (panneau en bas)
C-b o Basculer entre panneaux
C-b fleches Naviguer entre panneaux
C-b z Zoom sur un panneau (toggle plein ecran)
C-b x Fermer le panneau
C-b { Deplacer le panneau a gauche
C-b } Deplacer le panneau a droite
C-b q Afficher numeros des panneaux (puis taper le numero)
C-b ! Convertir le panneau en fenetre independante
Pour redimensionner, maintenez C-b puis utilisez les fleches. Ou activez la souris (voir config) et faites-le au drag.
Le C-b z (zoom) est mon raccourci favori : un panneau prend tout l'ecran le temps d'un travail concentre, et un second C-b z revient au layout multi-panes. Tres utile quand on bosse a deux paires d'yeux.
Ma config tmux
Voila mon ~/.tmux.conf peaufine pendant des annees. Je le synchronise sur tous mes serveurs via mon repo dotfiles git :
# Prefixe en Ctrl+a (plus ergonomique que C-b)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Souris (oui, c'est pas honteux)
set -g mouse on
# Numerotation des fenetres et panneaux a partir de 1
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
# Recharger la config a la volee
bind r source-file ~/.tmux.conf \; display "Config rechargee"
# Splits intuitifs avec | et -
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# Nouvelle fenetre dans le repertoire courant
bind c new-window -c "#{pane_current_path}"
# Navigation vim-like entre panneaux
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Resize avec H/J/K/L (capitales)
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# Historique plus long
set -g history-limit 50000
# Mode copie style vim
setw -g mode-keys vi
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -selection clipboard"
# Truecolor
set -g default-terminal "screen-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# Reduire le delai apres echap (pour vim)
set -sg escape-time 10
# Barre de statut
set -g status-style "bg=colour235 fg=white"
set -g status-left-length 30
set -g status-left "#[fg=green]Session: #S | "
set -g status-right "#[fg=cyan]#H | %d/%m %H:%M"
# Notifier l'activite dans une autre fenetre
setw -g monitor-activity on
set -g visual-activity off
Rechargez avec tmux source-file ~/.tmux.conf ou C-a r si vous avez le binding.
Les options qui m'ont change la vie
set -g mouse on: on peut cliquer pour changer de panneau, scroller dans l'historique, redimensionner au drag. Ca enleve toute resistance pour les nouveaux venus.renumber-windows on: quand vous fermez la fenetre 2 sur 5, les autres se renumerotent en 1-2-3-4 au lieu de garder un trou en 2.-c "#{pane_current_path}": les nouveaux splits/fenetres s'ouvrent dans le repertoire courant, pas dans$HOME.escape-time 10: sans ca, vim a un delai de 500ms quand vous appuyez sur Escape. Insupportable.
Mode copie : scroller et copier
tmux a un mode copie pour scroller dans l'historique et copier du texte sans souris :
C-b [ Entrer en mode copie
q Quitter le mode
v Commencer la selection (vi-mode)
y Copier la selection
C-b ] Coller le buffer
/ Rechercher en avant
? Rechercher en arriere
n / N Resultat suivant / precedent
g / G Debut / fin du buffer
Avec ma config, C-a [ puis v pour selectionner, y pour copier dans le presse-papier systeme via xclip. Sur macOS, remplacez xclip -selection clipboard par pbcopy.
Script de demarrage automatique
J'ai ce script dev-env.sh qui me prepare un environnement de dev complet en une commande :
#!/bin/bash
SESSION="dev"
tmux has-session -t $SESSION 2>/dev/null && tmux attach -t $SESSION && exit
tmux new-session -d -s $SESSION -n editor -c /var/www/monprojet
tmux send-keys -t $SESSION:editor 'vim .' C-m
tmux new-window -t $SESSION:2 -n logs
tmux send-keys -t $SESSION:logs 'tail -f /var/log/nginx/access.log' C-m
tmux split-window -t $SESSION:logs -v
tmux send-keys -t $SESSION:logs.2 'tail -f /var/log/nginx/error.log' C-m
tmux new-window -t $SESSION:3 -n monitor
tmux send-keys -t $SESSION:monitor 'htop' C-m
tmux new-window -t $SESSION:4 -n shell -c /var/www/monprojet
tmux select-window -t $SESSION:editor
tmux attach -t $SESSION
Une commande, un environnement complet. C'est aussi parfait pour onboarder un nouveau dev sur un projet.
tmux en pair programming
Deux personnes peuvent attacher a la meme session simultanement et voir les memes panneaux en temps reel :
# User 1 cree la session
tmux new -s pair
# User 2 (sur le meme serveur via ssh) rejoint
tmux attach -t pair
Les deux voient le meme contenu, peuvent taper a tour de role. Excellent pour debugger a distance avec un collegue.
Sessions independantes sur la meme tmux server
Pour eviter qu'un collegue voit les autres fenetres, lancez deux sessions partageant la meme "tmux session window" via -t shared :
tmux new-session -t pair -s pair-dylan
Votre attache a la session pair mais vos changements de fenetre sont independants. Idealemnt fait sur un serveur dedie.
Erreurs courantes et leur fix
Les couleurs sont mauvaises sous vim
Ajoutez dans ~/.tmux.conf :
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
Et verifiez que $TERM vaut bien tmux-256color apres reattach.
tmux a echoue avec "no current session"
C'est qu'aucune session ne tourne. Lancez tmux new -s NOM pour en creer une.
Les copies ne vont pas dans le presse-papier systeme
Il faut un outil bridge : xclip ou xsel sous Linux, pbcopy sous macOS. Voir la config copy-pipe ci-dessus.
Le scroll molette ne marche pas dans vim
C'est tmux qui intercepte. Avec set -g mouse on, vim recoit les events de scroll mais doit etre configure pour les utiliser. Dans .vimrc : set mouse=a.
Tous mes scripts qui detectent un TTY plantent dans tmux
tmux fournit bien un TTY. Mais certains outils detectent le $TERM exotique. Forcez si besoin : TERM=xterm-256color votre-commande.
Pour aller plus loin
- SSH config : simplifier ses connexions
- Tunnels SSH pour acceder aux services a distance
- Bases de systemd pour gerer les services Linux
- Logs Linux : ou chercher et comment lire
- Monitorer un serveur avec Netdata
Le terminal qui ne meurt jamais
tmux ca change la vie en terminal, point. Investissez 30 minutes pour apprendre les raccourcis essentiels et 20 minutes de plus pour configurer votre .tmux.conf aux petits oignons, vous ne pourrez plus jamais vous en passer. Pour les debutants qui le trouvent intimidant : commencez juste avec tmux new -s work et C-b d / tmux a. Ces deux commandes a elles seules valent deja l'investissement, vous etes immunise contre les coupures de connexion et les fermetures involontaires de terminal. Le reste viendra naturellement avec l'usage quotidien.
Si vous voulez aller plus loin, jetez un oeil aux gestionnaires de plugins comme TPM (Tmux Plugin Manager) qui permettent d'installer rapidement des extensions populaires : tmux-resurrect pour sauvegarder l'etat des sessions au reboot, tmux-continuum pour la sauvegarde auto, ou tmux-yank pour le copier-coller multiplateforme. Mais commencez simple. Bienvenue dans le monde des sessions persistantes : vous ne reviendrez plus en arriere.