||~-[[fr/DebianWiki/EditorGuide#Traductions|Traduction(s)]]: [[Tmux|Anglais]] - Français - ||| <> = Tmux = Tmux est un multiplexeur de terminal au même titre que [[screen]]. J'essaye actuellement de le prendre en main pour pouvoir le comparer avec '''screen''' au niveau des perf mais aussi pour les fonctionnalités =) À défaut de voir le gain de performances dans l'immédiat, je vais déjà essayer de retrouver un fonctionnement proche de celui que j'avais avec screen. == Installation == {{{#!highlight bash aptitude install tmux }}} == Utilisation == === Commandes === {{{#!highlight bash # Créer une session tmux # Se connecter automatiquement à une session (si une seule existante) tmux attach }}} === Raccourcis === La combinaison par défaut pour ''appeler'' les raccourcis avec '''CTRL+b''': || '''CTRL+b , ''' || Renommer le terminal courant || || '''CTRL+b " ''' || Split vertical du terminal courant en deux + ouverture d'un terminal dans le nouveau panel || || '''CTRL+b % ''' || Split horizontal du terminal courant en deux + ouverture d'un terminal dans le nouveau panel || || '''CTRL+b o ''' || Aller au panel suivant || || '''CTRL+b ''' || Aller au panel précédent || || '''CTRL+b {flèches directionnelles} ''' || Aller au prochain panel qui se trouve dans la direction de la flèche || || '''CTRL+b ; ''' || Basculer dans le dernier panel actif || || '''CTRL+b ! ''' || Créer un nouveau terminal à partir du panel courant || || '''CTRL+b x ''' || Fermer le panel courant || || '''CTRL+b c ''' || Créer un nouveau terminal || || '''CTRL+b n ''' || Aller au terminal suivant || || '''CTRL+b p ''' || Aller au terminal précédent || || '''CTRL+b w ''' || Afficher la liste des terminaux disponibles || || '''CTRL+b d ''' || Détacher tmux || || '''CTRL+b : ''' || Ouvrir l'invite de commande || || '''CTRL+b ( ''' || Aller à la session précédente || || '''CTRL+b ) ''' || Aller à la session suivante || === Options et paramètres === 1. Pour commencer une configuration personnalisée de '''Tmux''', il faut savoir qu'il existe des options dites '''globales''', qui correspondent aux options qui sont appliquées partout, suivies des options ''non-globales'' qui, si elles sont définies, permettent de redéfinir le comportement dans un cas précis (pour telle fenêtre, ...). Pour spécifier une option globale, il suffit d'utiliser l'argument '''-g''':{{{#!highlight bash # Background bleu pour toutes les fenêtres dans la barre de statut setw -g window-status-bg blue # Background vert pour la fenêtre en cours dans la barre de statut setw window-status-bg green }}} 1. Ensuite, il y a deux types d'options, les '''options de session''' et les '''options de fenêtre'''. Les options de session paramètrent la gestion des sessions (... logique =)) et le fonctionnement général de Tmux. Mais le point à retenir, c'est que les fenêtres sont incluses dans une session, d'où l'intérêt d'avoir des options propres à celles-ci. On utilise respectivement:{{{#!highlight bash # Pour les options de session: set alias de set-option set -g status-bg blue set-option -g status-fg white # Pour les options de fenêtre: setw alias de set-window-option setw -g window-status-bg black set-window-option -g window-status-fg red }}} 1. D'autres paramètres sont disponibles, comme '''-d''', '''-t''', .... Quelques-uns sont expliqués avec exemple dans le fichier de configuration ci-dessous, sinon le manuel permettra de ravir ceux qui recherchent les meilleures configurations =) === Fichier de configuration === Dans le fichier de configuration, il est possible de configurer plusieurs sessions (chacune aura des terminaux spécifiques, qui sont définis en fin de fichier ; cf. ci-dessous). Pour me connecter à la session ''0'', j'utilise: {{{#!highlight bash tmux attach -d -t 0 }}} Si on ne spécifie pas de session, Tmux lira tout de même le fichier ''~/.tmux.conf'' et créera une nouvelle session. Ça permet au minimum de retrouver sa configuration. ''Note'': Avant de se lancer dans la rédaction d'un fichier de configuration ou pour éviter de le recharger à chaque fois, l'ensemble des paramètres peut être testé à partir de l'invite de commande de Tmux ('''CTRL+b :'''). {{{#!highlight bash ###############-------------------------------------------------------------- ## ## Fichier de configuration : ~/.tmux.conf ## 0.2: 12-02-22 ## ## By Gardouille ## ## Ce fichier est lu automatiquement par tmux si il est placé dans le homedir ## ## ## Utilisation: ## tmux attach -d -t SESSION_ID ## ## Dépendances: ## vlock : permet de verrouiller tmux en cas d'inactivé ou d'appel (CTRL+b x) #### statusbar -------------------------------------------------------------- # Couleur du foreground (premier plan) set -g status-fg yellow # Couleur du background (arrière plan) set -g status-bg black ## Terminaux par défaut # Couleur du foreground set-window-option -g window-status-fg cyan # Couleur du background set-window-option -g window-status-bg default # Attribut #bright/bold: gras #dim: #underscore: souligné #blink: "clignotant"? #reverse: Inverse les couleurs background et foreground #hidden: caché #italics: italique set-window-option -g window-status-attr dim ## Terminal actif # Couleur du foreground set-window-option -g window-status-current-fg yellow # Couleur du background set-window-option -g window-status-current-bg cyan # Attribut (cf ci-dessus pour la liste) set-window-option -g window-status-current-attr bold ## Terminal avec notification # Couleur du foreground # Couleur du background # Attribut #setw -g window-status-alert-attr default #setw -g window-status-alert-fg red #setw -g window-status-alert-bg default ## Panel par défaut set -g pane-border-fg white #set -g pane-border-bg black ## Panel actif set -g pane-active-border-fg cyan #set -g pane-active-border-bg green # Centrer la liste des terminaux #set -g status-justify centre # Partie gauche de la barre # vide set -g status-left "" # Partie droit de la barre # %H:%M:%S : Affiche de l'heure (actualisation lors de manipulation ou en fonction de la valeur de status-interval) set -g status-right "[#[fg=cyan,bright]%H:%M:%S#[default]]" # Si tmux est lancé hors de Xorg, on affiche des informations supplémentaires ## Partie gauche de la barre # #H : le nom de la machine en vert if '[ -z "$DISPLAY" ]' 'set -g status-left "[#[fg=green]#H#[default]]"' ## Partie droite de la barre # #(cat /proc/loadavg || cut -d \" \" -f 1,2,3) : charge CPU en magenta # %a %Y-%m-%d %H:%M : Le jour, la date d'aujourd'hui et l'heure en cyan et gras if '[ -z "$DISPLAY" ]' 'set -g status-right "[ #[fg=magenta]#(cat /proc/loadavg || cut -d \" \" -f 1,2,3)#[default] ][ #[fg=cyan,bright]%a %Y-%m-%d %H:%M:%S #[default]]"' if '[ -z "$DISPLAY" ]' 'set -g status-right-length 50' # Raffraichissement de la barre d'état toutes les X secondes set -g status-interval 1 #### keybindings -------------------------------------------------------------- ## Redéfinition de la combinaison principale par celle de screen (CTRL+a) unbind C-b set -g prefix ^A bind a send-prefix ## Redéfinition des raccourcis: # Renommer le terminal courant unbind A bind A command-prompt "rename-window %%" # Aller au terminal précédent (CTRL+a) unbind ^A bind ^A last-window # Aller au terminal suivant (CTRL+n) unbind ^N bind ^N next-window # Aller au terminal précédent (CTRL+p) unbind ^P bind ^P previous-window # Créer un nouveau terminal (CTRL+c) unbind ^C bind ^C new-window # Détacher tmux unbind ^D bind ^D detach # Verrouiller tmux unbind ^X bind ^X lock-server unbind x bind x lock-server ## Nouveaux raccourcis clavier pour les terminaux # Aller au terminal n°{1,12} avec les touches F{1-12} #bind ... selectw -t:0 #bind C-& selectw -t:0 bind F1 selectw -t:1 bind F2 selectw -t:2 bind F3 selectw -t:3 bind F4 selectw -t:4 bind F5 selectw -t:5 bind F6 selectw -t:6 bind F7 selectw -t:7 bind F8 selectw -t:8 bind F9 selectw -t:9 bind F10 selectw -t:10 bind F11 selectw -t:11 bind F12 selectw -t:12 # Pour basculer entre les différents terminaux, directement avec les touches F{1,12} (sans utiliser CTRL+a), on peut utiliser ça: #bind -n F1 select-window -t 1 #bind -n F2 select-window -t 2 #bind -n F3 select-window -t 3 #bind -n F4 select-window -t 4 #bind -n F5 select-window -t 5 #bind -n F6 select-window -t 6 #bind -n F7 select-window -t 7 #bind -n F8 select-window -t 8 #bind -n F9 select-window -t 9 #bind -n F10 select-window -t 10 #bind -n F11 select-window -t 11 #bind -n F12 select-window -t 12 ## Nouveaux raccourcis clavier pour les splits/panels # split windows comme vim # Définition des splits comme dans vim (s: vertical et v: horizontal) #bind s split-window -v bind v split-window -h # Permet de se déplacer entre les panels avec les touches hjkl # h: gauche # j: bas # k: haut # l: droite bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R # Redimentionnement des panels comme vim # Possibilité de changer la valeur "2" par ce qu'on veut # < : agrandissement vers la gauche # > ''': agrandissement vers la droite # - : agrandissement vers le bas # + : agrandissement vers la haut bind < resize-pane -L 2 bind > '''resize-pane -R 2 bind - resize-pane -D 2 bind + resize-pane -U 2 # Aller au panel suivant avec Tab unbind Tab bind Tab select-pane -t:.+ # Aller au panel précédent avec SHIFT+Tab unbind BTab bind BTab select-pane -t:.- ## Raccourcis clavier pour les sessions # Proposer la liste des sessions avec choix possible unbind _ bind _ choose-session unbind C-_ bind C-_ choose-session #### Configuration -------------------------------------------------------------- # Numéroter les terminaux à partir de 1 #set -g base-index 1 # Verrouillage de la session après inactivité (en s) set -g lock-after-time 3600 # pour que le lock marche sous linux (apt-get install vlock) set -g lock-command vlock #### Session -------------------------------------------------------------- # -sX : numéro de la session # -nNOM_TERMINAL : nom du terminal # -d : indique à tmux de ne pas attacher la session et de ne pas prendre les # nouvelles fenêtres comme une fenêtre courante # -t0:X : modifier les paramètres de la fenêtre X de la session 0. !Attention # la fenêtre doit exister avant de pouvoir modifier ses paramètres! # monitor-activity : permet de mettre en avant une fenêtre quand son contenu reçoit un événement # # Nouvelle session avec la première fenêtre qui exécute su new -d -s0 -nr00t 'exec su' #setw -t0:0 aggressive-resize on # Nouvelle fenêtre 0:1 avec htop neww -d -nht0p 'exec htop' #setw -t0:1 monitor-activity on # Nouvelle fenêtre 0:2 avec irssi neww -d -nIrssI 'exec irssi' #neww -d -nNO_IRSSI # Nouvelle fenêtre 0:3 dans /media setw default-path /media/ neww -d -nUdata # Nouvelle fenêtre 0:4 dans ~ setw default-path /home/darker/ neww -d -nh0me setw -t0:4 aggressive-resize on # Fenêtre par défaut: 2 select-window -t 2 new -d -s1 -ntest #neww -d -nht0p 'exec htop' #neww # Pour se connecter à une session, on peut utiliser: # tmux attach -d -t Xj }}} Un petit aperçu du rendu: {{attachment:tmux_01.png}} == Utilisation Avancées == === Les panels === En plus des quelques raccourcis vu ci-dessus, les panels offrent de nombreuses autres fonctionnalités: La commande suivante: (CTRL+b : ) || '''set-window-option synchronize-panes on ''' || Activer la synchronisation de la saisie clavier entre tous les panels présent || === Les sessions === Pour les gros aficionados de la ligne de commande, Tmux permet de disposer de plusieurs sessions. Pour rappel la session est ce qui inclut les différentes fenêtres. Mais avec Tmux, c'est surtout la possibilité de switcher facilement entre les différentes sessions. || '''CTRL+b ( ''' || Basculer à la session précédente || || '''CTRL+b ) ''' || Basculer à la session suivante || || '''CTRL+b s ''' || Lister les sessions disponibles || || '''choose-session''' || Propose une liste des sessions disponibles avec la possibilité d'en sélectionner une || || '''CTRL+b d ''' || Détacher la session || Pour se connecter à une session, on peut utiliser: {{{#!highlight bash # Se connecter automatiquement à la dernière session détachée: tmux attach # Se connecter à la session 3 tmux a -t 3 # a, attach et attach-session sont similaires}}} === Mode Copie === Ce mode permet (au moins?) deux fonctionnalités particulièrement intéressantes: * parcourir l'historique * copier / coller du texte entre les différentes fenêtres || '''CTRL+b [ ''' || Ouvrir le mode copie à l'emplacement du curseur || || '''CTRL+b PG_UP ''' || Ouvrir le mode copie en remontant d'une page dans l'historique de la fenêtre || || '''CTRL+b ] ''' || Copier le dernier buffer || || '''CTRL+b ='''' || Ouvrir la liste des buffers disponibles et copie celui sélectionné || || ''en mode copie'' '''CTRL+SPACE''' || Commencer la sélection || || ''en mode copie'' '''RETURN''' || Copier la sélection || || ''en mode copie'' '''q,Échap''' || Quitter le mode copie sans copier la sélection dans le buffer || || ''en mode copie'' '''Flèches directionnelles''' || Déplacer le curseur || || ''en mode copie'' '''PAGE_{UP,DOWN}''' || Remonter/Descendre d'une page dans l'historique || || ''en mode copie'' '''CTRL+a''' || Aller en début de ligne || || ''en mode copie'' '''CTRL+e''' || Aller en fin de ligne || Le déplacement et plus généralement le comportement de Tmux peut être modifié pour ressembler à ceux que l'on retrouve dans vi ou emacs, voir le manuel pour appliquer ces modifications. == Voir aussi == * [[DebianPkg:tmux|Détail du paquet tmux]] * [[DebianBug:tmux|Rapport de bug tmux]] * [[http://packages.qa.debian.org/tmux|Aperçu technique et nouveautés]] * [[http://tmux.sourceforge.net/|Site officiel]] * [[http://openbsd.org/faq/fr/faq7.html#tmux|Doc OpenBSD]]