Linux / Commande tmux : créer, détacher et retrouver une session de terminal

tmux est un multiplexeur de terminaux : il organise plusieurs terminaux dans des fenêtres et des panneaux, puis permet de détacher leur affichage et de s'y reconnecter. Sur un serveur distant, les programmes lancés dans une session peuvent continuer après la perte du client SSH tant que le serveur tmux et le système restent actifs. Une session tmux ordinaire ne restaure pas ses processus après un redémarrage de la machine.

Comprendre session, fenêtre et panneau

  • Une session regroupe des fenêtres et porte un nom qui permet de la retrouver.
  • Une fenêtre réunit un ou plusieurs panneaux ; vous pouvez changer de fenêtre dans la même session.
  • Un panneau contient un terminal avec son shell ou son programme. Plusieurs panneaux peuvent être visibles côte à côte.

Le serveur tmux maintient ces terminaux ; le client affiche une session dans votre terminal extérieur. Détacher le client conserve la session, tandis que quitter les programmes qui occupent ses panneaux peut la terminer. Cette distinction explique pourquoi une déconnexion et un arrêt de session n'ont pas le même effet.

Vérifiez la disponibilité avec command -v tmux et la version avec tmux -V. Si l'outil manque, consultez les paquets et dépôts officiels de votre distribution avant l'exercice. Les touches ci-dessous supposent la configuration par défaut.

Créer une session nommée et un repère

Depuis un terminal habituel, commencez par regarder les sessions existantes :

tmux ls

S'il n'y a pas de serveur actif, un message peut l'indiquer : cette absence n'implique pas nécessairement une installation défectueuse. L'exemple utilise lf-demo ; si ce nom existe déjà, choisissez un autre nom pour votre essai et adaptez les commandes suivantes.

tmux new -s lf-demo

Vous entrez alors dans un nouveau shell de la session. La commande suivante doit être saisie à l'intérieur de ce shell pour créer un repère d'affichage :

printf 'Repère de la session lf-demo\n'

Le texte apparaît dans le panneau. Il ne s'agit pas d'une copie du terminal extérieur : les programmes que vous souhaitez retrouver doivent avoir été lancés dans cette session.

Détacher puis retrouver la même session

  1. Appuyez sur Ctrl+b.
  2. Relâchez ces touches, puis appuyez sur d minuscule.
  3. Vous retrouvez le shell extérieur ; la session lf-demo reste sur le serveur tmux.

La touche d est une commande tmux après son préfixe, pas une commande du shell. Une fois détaché, consultez :

tmux ls

La présentation par défaut varie selon la version et la configuration. Pour vérifier explicitement les noms, le nombre de fenêtres et le nombre de clients attachés :

tmux list-sessions -F '#{session_name}: fenetres=#{session_windows}, clients=#{session_attached}'

Pour une session de test avec une seule fenêtre et sans autre client, la ligne correspondante doit indiquer :

lf-demo: fenetres=1, clients=0

Reconnectez-vous depuis le shell extérieur avec le nom relevé :

tmux attach -t lf-demo

Vous retrouvez le terminal du panneau et son repère. Vous pouvez détacher de nouveau avec Ctrl+b puis d. Cette séquence évite de saisir attach immédiatement après new dans le nouveau shell et de créer involontairement une session imbriquée.

Créer des fenêtres et partager l'affichage

Ces touches se saisissent dans une session attachée. Après Ctrl+b, relâchez le préfixe puis saisissez la touche indiquée :

Suite de touches Résultat par défaut
Ctrl+b puis c Créer une fenêtre.
Ctrl+b puis n ou p Passer à la fenêtre suivante ou précédente.
Ctrl+b puis % Partager le panneau en deux zones côte à côte.
Ctrl+b puis " Partager le panneau en deux zones superposées.
Ctrl+b puis une flèche Sélectionner un panneau voisin.
Ctrl+b puis ? Afficher les raccourcis ; q quitte cette vue d'aide.

La commande tmux split-window permet aussi de créer un panneau. Les raccourcis peuvent avoir été personnalisés : vérifiez l'aide avant de conclure qu'une touche ne fonctionne pas. Chaque panneau contient son propre contexte ; assurez-vous du panneau actif avant de lancer une commande.

Terminer l'essai et connaître les limites

Si vous avez uniquement ouvert des shells de test vides, saisissez exit dans chacun lorsque vous souhaitez réellement les fermer. Quand le dernier panneau de la dernière fenêtre de cette session a fini, la session de test disparaît dans la configuration ordinaire. Détacher, en revanche, garde ces shells et leurs programmes. Ne confondez pas ces deux intentions.

Pour retrouver une session distante après une coupure réseau, reconnectez-vous au même serveur avec le même compte, puis utilisez tmux ls et attach. Une autre machine ou un autre compte ne retrouve pas automatiquement le même serveur tmux. Le programme peut aussi avoir fini pendant votre absence.

Une panne de la machine, l'arrêt du serveur tmux ou une politique qui termine les processus du compte peut interrompre les travaux. Pour des tâches critiques, prévoyez également la journalisation, les sauvegardes et la gestion de service appropriées : tmux conserve un terminal actif, pas un état de calcul à restaurer après panne.

Le guide officiel de démarrage tmux explique les sessions et les touches. Le manuel tmux décrit les commandes et les variables de format utilisées pour vérifier les clients attachés ; comparez-les à man tmux sur votre système.