tmux: l'outil magique pour gérer vos terminaux (partie 1)

Posté le 10 novembre 2010

Si vous connaissez GNU Screen, tmux c'est pour faire la même chose mais EN MIEUX ! :)

tmux en action

Je vous explique: vous jonglez régulièrement avec plusieurs fenêtres de terminaux (urxvt, xterm...) pour effectuer différentes tâches comme se connecter via SSH à des machines distantes, éditer des fichiers avec vim, mettre à jour votre distribution (apt-get, pacman, urpmi...), vous aimez également de temps à autre dialoguer sur IRC (irssi, weechat...) ou consulter les manpages d'une commande. Autant de tâches qui nécessitent d'avoir x terminaux ouverts sur le bureau au milieu desquels vous vous mélangez un peu les pinceaux, non ?

Ou simplement vous êtes un inconditionnel de la console et vous n'utilisez jamais Xorg (oui ça existe :) ) mais vous aimeriez pouvoir utiliser plusieurs applications en même temps ?

Et bien vous allez adorer tmux. C'est un multiplexeur de terminaux, hein ? kesako ? Un outil qui va vous permettre de gérer plusieurs fenêtres dans une seule console, de splitter la console si vous le souhaitez, de fermer votre session sur votre serveur au boulot et de l'ouvrir de nouveau, chez vous, via SSH en retrouvant tout vos terminaux et les applications qui tournent dedans tels que vous les aviez laissés. Allez assez bavardé, lançons nous !

Installation et paramétrage:

Tout d'abord installons-le, sous Arch Linux ça se fait de cette manière:

pacman -S tmux

A noter qu'il est inclus également dans le système de base d'OpenBSD.

Bien que la config par défaut de tmux soit tout à fait utilisable, j'aime configurer quelques petites fonctions pour plus de confort. Pour ceci, créez un fichier nommé .tmux.conf dans votre répertoire utilisateur et copiez-y le contenu suivant:

# UTF-8
set-option -g status-utf8 on
set-window-option -g utf8 on

# Set 256-colour terminal
set -g default-terminal "screen-256color"

# Number of lines held in window history
set -g history-limit 1000

# Set status bar
set -g status-bg black
set -g status-fg white
set -g status-interval 60
set -g status-left-length 30
set -g status-left '#[fg=green](#S) #(whoami)@#H#[default]'

# Highlight active window
setw -g window-status-current-bg blue

# Set window notifications
setw -g monitor-activity on
set -g visual-activity on

# Automatically set window title
setw -g automatic-rename on

# Use mouse to select pane
set -g mouse-select-pane on

# Mode-keys style for copy mode
setw -g mode-keys vi

# Default session
new -d -s "MaSession"

Je vous renvoie vers la très complète page de manuel de tmux pour l'explication détaillée des options de configuration utilisées ci-dessus.

Utilisation:

une fois lancé:

tmux

tmux s'utilise avec le clavier. En effet chaque action se réalise à l'aide d'un code touche commençant par [Ctrl+b]. Pour info, GNU Screen, lui, utilisait [Ctrl+a] donc si vous êtes un habitué, il est possible de changer ce code touche pour le faire correspondre à vos souhaits.

Par exemple, pour ouvrir une nouvelle fenêtre:

[Ctrl+b]+c

Afficher la liste des codes touche et leur signification:

[Ctrl+b]+?

Passer à la fenêtre suivante:

[Ctrl+b]+n

Sélectionner la fenêtre n°2:

[Ctrl+b]+2

Choisir la fenêtre dans une liste:

[Ctrl+b]+w

Diviser la fenêtre verticalement:

[Ctrl+b]+%

Diviser la fenêtre horizontalement:

[Ctrl+b]+"

Casser la division:

[Ctrl+b]+!

Notez que tmux transformera alors vos divisions en fenêtres vous ne perdrez donc pas leur contenu, c'est beau non ?

Sélectionner une division (pane):

[Ctrl+b]+up (down, left or right)

Un peu de magie ?

Voici enfin sans doute la fonction la plus pratique de tmux: vous avez 5 ou 6 applications en cours dans votre tmux, lui-même tournant dans un xterm, mais voilà vous devez temporairement pour une raison quelconque fermer votre session X. Pas besoin de fermer vos applis, faites simplement:

[Ctrl+b]+d

Ceci détachera votre tmux et son contenu du terminal actif. Fermez maintenant votre session, puis ouvrez-la de nouveau, lancer votre terminal et tapez:

tmux attach

Et oh joie ! Oh miracle ! vous retrouvez tout dans l'état dans lequel vous l'aviez laissé, au caractère prêt ! Sachez de plus que la fonction "detach" est exécutée par défaut si vous fermez malencontreusement votre xterm sans avoir préalablement tapé [Ctrl+b]+d. Vous pourrez donc récupérer le tout avec la commande ci-dessus.

Voilà pour aujourd'hui, dans une deuxième partie, nous verrons comment scripter tmux pour faire des trucs sympa. En attendant, je vous conseille vivement de consulter la page de manuel qui vous fera écarquiller les yeux tellement cet outil est génial ;) A plusque !

Commentaires

#1

Jeob, le 10 novembre 2010 à 10:54 :

Encore un très bon article sur un outil qui peut vite devenir indispensable

Merki

#2

Pierre, le 20 janvier 2011 à 13:27 :

Merci! interessant.

Par contre je n'arrive pas a scroller dans un terminal contenu dans un écran divisé.

d'apres le man un [ctrl-b] + = permettrait de rentrer dans un mode défilement mais je n'y arrive pas

#3

Pierre, le 20 janvier 2011 à 13:46 :

AH mais j'ai trouvé!

Il suffit de passer en mode copy

avec [ctrl-b] + [

#4

maki, le 22 août 2011 à 20:02 :

Bonsoir,
quels sont selon toi les avantages à utiliser tmux plutôt que screen?

#5

Comète, le 22 août 2011 à 21:13 :

@maki: voici ce qui m'a plu par rapport à screen:

- le split vertical
- facile à personnaliser et à scripter
- la doc plus claire
- un projet très actif et de plus intégré au base system d'OpenBSD
- semble moins gourmand au niveau ressources

#6

erdnaxeli, le 22 août 2011 à 21:14 :

Quels sont les avantages par rapport à screen ? Pour l'instant ils ne sont pas flagrants.

#7

erdnaxeli, le 22 août 2011 à 21:15 :

j'ai rien dit, j'aurais du lire tous les commentaires avant de poster ma question inutile.

#8

Comète, le 22 août 2011 à 21:38 :

@erdnaxeli: pas de souci ;)

#9

Slider, le 25 août 2011 à 11:58 :

+: La synchronisation de panneau,
une même commande dans tous les panneaux,
+: énorme possibilité de scripting
+: leger, secure (openBSD)
+: Split vertical/horizontal et la réorganisation des panneaux (Ctrl B+ espace)
-: pas de gestion du tty (série), sniff ca va venir j'espere (~ screen /dev/ttyUSB0 9600)