tmux

GNU Screen vs tmux

Screentmux
Préfixe de commande par défautC-aC-b
Créer une nouvelle session nommée “blah”screen -S blahtmux new -s blah
Attacher la session en cours “blah”screen -x blahtmux new -t blah
Rattacher la session détachée “blah”screen -r blahtmux attach -t blah
Lister les sessions activesscreen -lstmux ls
Détacher la session en coursC-a dC-b d
Créer une nouvelle fenêtreC-a cC-b c
Renommer la fenêtre activeC-a AC-b ,
Afficher la liste des fenêtres dans la session en coursC-a "C-b w
Forcer la fermeture de la fenêtre activeC-a kC-b &
Retourner à la dernière fenêtre utiliséeC-a C-aC-b l

Utilisation courante

Gestion des panneaux (“panes”)

Note : une fenêtre contient au minimum un panneau.

Diviser un panneau horizontalementC-b "
Se déplacer entre les panneaux d’une fenêtreC-b o ou C-b <touche fléchée> vers le panneau désiré
Fermer le panneau courantC-b x
Inverser deux panneauxC-b { ou C-b }
Afficher les informations sur les panneaux actuels (numéro, dimensions)C-b q

Copy mode

Comme avec GNU Screen, il n’est pas possible de remonter l’historique d’une fenêtre (scrollback) via directement la molette de la souris ou <Ctrl>+<PageUp>. Pour accéder au scrollback d’une fenêtre, il faut passer en copy mode en tapant la séquence C-b [ : l’indicateur de positionnement dans le scrollback s’affiche alors en haut à droite du panneau courant. Tapez sur la touche Enter pour quitter le copy mode.

Voici comment réaliser les actions de base en copy mode :

Se déplacer vers la droitel ou touche fléchée droite
Se déplacer d’une ligne vers le hautk ou touche fléchée haut
Se déplacer d’une ligne vers le basj ou touche fléchée bas
Se déplacer d’un écran vers le basC-f ou <PageDown>
Se déplacer d’un écran vers le basC-b ou <PageUp>
Rechercher la chaîne de caractères “blah” vers le haut?blah<Enter> puis n pour parcourir les résultats suivants ou N pour les précédents
Rechercher la chaîne de caractères “blah” vers le bas/blah<Enter> puis n pour parcourir les résultats suivants ou N pour les précédents
Copier un extrait de texteTapez sur <Space> au début de la section à copier, puis déplacez le curseur jusqu’à la fin de la section et tapez sur <Enter> pour enregistrer la copie
Coller un extrait de texteC-b ]

Trucs & astuces

Réarranger les panneaux de la fenêtre courante

Lorsque votre fenêtre courante est divisée en panneaux, tmux vous permet de réarranger ces derniers selon plusieurs modèles pré-établis en tapant la séquence C-b <Space> (le nom du modèle appliqué s’affiche alors brièvement dans la barre de statut).

Redimensionner manuellement un panneau de la fenêtre courante

Une fois un modèle d’arrangement des panneaux appliqué, il est possible de modifier la taille de chaque panneau individuellement. Pour ce faire, placez-vous dans le panneau dont vous souhaitez ajuster les dimensions, et tapez la séquence C-b puis maintenez la touche <Control> et appuyez sur une touche fléchée correspondant à la direction vers laquelle vous souhaitez étendre le panneau ; tant que vous ne relâchez pas la touche <Control>, il est possible d’ajuster la taille du panneau (dans un sens comme dans l’autre).

Transformer un panneau en fenêtre

Si vous souhaitez isoler un panneau d’une fenêtre pour en faire une fenêtre à part entière, placez-vous sur ce dernier et tapez la séquence C-b !.

Ré-attacher automatiquement une session en se connectant en SSH

En se connectant à ses systèmes distants via SSH il peut arriver de subir des déconnexions intempestives, en particulier si on utilise un réseau Wi-Fi au signal faible. tmux se révèle très pratique dans ce genre de cas pour éviter de perdre sa session. Mieux encore, il est possible d’automatiser le lancement/réattachement d’une session tmux dès que vous vous logger en SSH à un système distant en ajoutant ces quelques lignes dans votre configuration de shell ̣(la conf suivante est valable pour Bash, mais il est facile de la transcrire pour votre shell favori) :

if [[ -z "$TMUX" && -n "$SSH_TTY" ]]; then
    tmux has-session &> /dev/null
    if [ $? -eq 1 ]; then
      exec tmux new
      exit
    else
      exec tmux attach
      exit
    fi
fi

Ré-attacher une session “perdue”

Il arrive dans certaines circonstances que tmux refuse la connexion à une session existante (message failed to connect to server: Connection refused), par exemple lorsque la socket de la session a été accidentellement supprimée. Pour contourner ce problème, il est possible d’envoyer le signal USR1 au processus tmux afin qu’il recréé la socket :

killall -s SIGUSR1 tmux
tmux attach

Synchroniser l’envoi de commandes dans plusieurs panneaux

Il peut être pratique d’envoyer des commandes identiques à plusieurs panneaux, par exemple lorsque vous administrez plusieurs serveurs distants simultanément. Pour activer la synchronisation au cours d’une session, entrez la commande <C-b> :setw synchronize-panes (ré-entrez la même commande pour la désactiver).

“Zoomer” sur un panneau

Lorsqu’une fenêtre est découpée en plusieurs panneaux il est possible de temporairement “zoomer” sur l’un d’eux avec la séquence C-b z, ce qui a pour effet de le redimensionner afin d’occuper tout l’espace de la fenêtre. Pour “dé-zoomer”, retapez la séquence C-b z et la fenêtre retrouvera son organisation multi-panneaux initiale.