Einführung

Mit tmux kann man wie mit screen mehrere Terminalfenster innerhalb einer Konsole verwalten. tmux hat jedoch ein paar Vorteile gegenüber dem Klassiker screen.

Vorteile von tmux gegenüber screen

  • Fenster können auch vertikal gesplittet werden
  • Visuelle Benachrichtigung bei Aktivitäten aus anderem Fenster
  • Mehr Konfigurationsoptionen
  • Einfachere Konfiguration als (vgl. hardstatusstring von screen)
  • Innerhalt tmux kann man zwischen mehreren Sessions wechseln (Client-Server Prinzip)
  • Gut Skriptbar (von der Shell aus)
  • Mehrere Buffer für Kopieren/Einfügen
  • Fensternamen passen sich dynamisch den aufgerufenen Programmen an
  • Fenster können verschoben und vertauscht awerden
  • Konfiguration während dem laufenden Betrieb ändern und neu laden
  • Programme wie less, welche normalerweise die Konsole wieder leeren, werden auch geleert
  • Noch aktiv unter Entwicklung

Konfiguration

tmux wird mit der Konfigurationsdatei ~/.tmux.conf konfiguriert.

Standardmässig nutzt tmux die Tastenkombination Ctrl-B als Meta-Key. Da ich Ctrl-B oft in vi und in less zum zurückblättern verwende, ist diese Tastenkombination nicht sehr ideal für mich. Deshalb wechselte ich den Meta-Key wieder zu Ctrl-A, wie ich es von screen her kenne:

# u s b b n e i i C b t n n - i d d a n - - - d g k k s e e t C p y y a - r t b e C a t f - i a s C x e - l n b C a d - s - a a t p l - r s w e i f M n i e d x t o a w - K e y

Nett von tmux finde ich, dass die Fenstertitel dynamisch den gestarteten Programmen angepasst werden können:

# s s e e S t t e w t - - g w g i v n m i d o s o n u w i a t l n o - o r a t - c i a t f c i i t v c i i a v t t i y i t o y o n n s o n

Die Statusbar (Leiste ganz unten an der Konsole) kann wie folgt konfiguriert werden:

# s s # s s s s s s e e e e e e e e P t t S t t t t t t a t w n - - a - - - - - e g g t g g g - g g s u g p p s s s s s s a a b t t t w t t n n a a a a i a a e e r t t t n t t - - u u u d u u b a s s s o s s o c - - - w - - r t b f i - r r d i g g n s i i e v t t g g r e w b e a h h - - h l r t t t f b i a v u - g o t c a s l " r e k l - e | w d c n h e 3 u g # i r 0 r t ( t - r h w e f e h g n 5 o t 5 a w - m h a i i t ) t t @ e r # H r e | v e # r ( s a e w k ' { p r i n t $ 1 , $ 2 , $ 3 } ' / p r o c / l o a d a v g ) | % Y - % m - % d % H : % M "

tmux

Für das Splitten von Fenstern habe ich mir auch zusätzliche Tastenkombinationen eingerichtet. Mit Ctrl-a | kann ich nun Fenster vertikal und mit Ctrl-a - horizontal splitten.

# b b i i P n n a d d n - - e k k l e e y y s p | - l i s s t p p t l l e i i r t t - - w w i i n n d d o o w w - h

Mit den vi-ähnlichen Keybindings kann man ganz einfach zwischen den gesplitteten Fenster wechseln:

# b b b b i i i i M n n n n i d d d d t h j k l h j s s s s k e e e e l l l l l e e e e d c c c c u t t t t r - - - - c p p p p h a a a a n n n n P e e e e a n - - - - e L D U R l s w e c h s e l n

Meine Konfigurationsdatei für tmux

Schlussendlich sieht meine Konfigurationsdatei so aus:

########################################################################
#
# ~/.tmux.conf
# Konfigurationsdatei für tmux
#
########################################################################

########################################################################
# Allgemein

# History
set -g history-limit 1000000

# 265 Farben
set -g default-terminal "screen-256color"

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

# Copymode: vi
set-window-option -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

########################################################################
# Aussehen

# Panes
set -g pane-border-fg white
set -g pane-active-border-fg white

# Statusbar
set -g status-bg white
set -g status-fg black
set -g status-interval 30
setw -g window-status-current-attr reverse
set -g status-right-length 55
set -g status-right "| #(whoami)@#H | #(awk '{print $1,$2,$3}' /proc/loadavg) | %Y-%m-%d %H:%M "

########################################################################
# Keybindings

# C-a statt C-b als Meta-Key
unbind C-b
set -g prefix C-a
bind-key C-a last-window
bind-key a send-prefix

# Panel splitter
bind-key | split-window -h
bind-key - split-window -v

# Mit hjkl durch Panels wechseln
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# Konfigurationsdatei dynamisch laden
unbind r
bind r source-file ~/.tmux.conf

# EOF

Benutzung

Kennt man screen, ist man recht schnell mit der Bedienung von tmux vertraut:

  • C-a c Neues Fenster erzeugen
  • C-a n Zu Fenster n gehen (n = 1 bis 9)
  • C-a C-a Zurück zum vorher ausgewählten Fenster
  • C-a ? Hilfe anzeigen
  • C-a a Sendet Ctrl-A
  • C-a d Sitzung detachen (wieder attachen mit $ tmux attach

Ein paar Tastenkombinationen sind anders:

  • C-a x Fenster killen
  • C-a , Dem aktuellen Fenster einen Titel geben

Neue Funktionen sind z. B. folgende (basierend auf meiner Konfigurationsdatei von oben):

  • C-a | Fenster vertikal splitten
  • C-a - Fenster horizontal splitten
  • C-a h In gesplittetes Fenster links wechseln (genau so mit jkl)
  • C-a q Gesplittete Fenster durchnummerieren und auswählen
  • C-a Space Layout der gesplitteten Fenster wechseln (erinnert an Tiling-Windowmanager)
  • C-a s Laufende Sessions anzeigen und wechseln
  • C-a r Konfiguration neu laden

Texte können so kopiert werden (Vorzeitiges Abbrechen mit q):

  • C-a [ In vi-Kopiermodus wechseln
  • hjkl Navigieren
  • v Auswahl beginnen
  • y Auswahl kopieren
  • C-a ] Auswahl einfügen

Viele weitere Funktionen sind in der Manpage beschrieben.