tmux
, der Name steht für Terminal MUltipleXer, ist ein Projekt, das lang laufende, mit anderen teilbare, auch entfernt verfügbare Terminalsitzungen ermöglicht, so wie man das von GNU Screen gewohnt ist.
tmux
verhält sich grundsätzlich ersteinmal identisch zu screen
. Kommandos an tmux
müssen mit einem Präfix-Key eingegeben werden. Die Vorgabe für diesen Präfix ist C-b
– lustigerweise, weil tmux
unter screen
entwickelt wurde – lässt sich aber ohne weiteres anpassen. Mir kommt C-b
sehr gelegen, da screen
mit der Nutzung von C-a
mit dem Kürzel für "Zeilenanfang" kollidiert, das ich doch sehr oft benutze.
Was tmux
für die Systemadministration interessant macht, und da arbeitet es anders als screen
, das in einer Sitzung eine beliebige Anzahl Fenster (Window, entspricht einer Terminalkonsole) zu verwalten erlaubt, von denen zu jedem Zeitpunkt aber nur eines sichtbar sein kann, ist, dass tmux
erlaubt einzelne Fenster in Arbeitsflächen (Panes) aufzufteilen, so dass man mehrere Terminalkonsolen gleichzeitig im Blick haben kann. D.h. man kann über eine Konsole sowohl shell-kommandos absetzen, als auch einen tail
beobachten – für die remote Nutzung etwa über Tablets (ConnectBot
unter Android) sehr hilfreich.
tmux
ist Teil des OpenBSD Basissystems und wird nach wie vor aktiv entwickelt. The Changelog hat in einer der letzten Folgen ein interessantes Gespräch geführt, das viele Ideen zum kreativen Einsatz von tmux
enthält – u.a. nutzen die Gäste tmux
-Sitzungen zu Pair Programming. Das funktioniert, weil sich auf eine Sitzung mehrere Clients verbinden können. Anders als bei screen
können verschiedene Clients aber nicht unterschiedliche Fenster bearbeiten. Alle Clients einer Sitzung sehen exakt dasselbe.
Bei der Nutzung ist zu beachten, dass die TERM
Variable in der Shell außerhalb von tmux
exakt zum verwendeten Terminal passen muss, und dass innerhalb von tmux
immer gilt TERM=screen
. Die mögliche Ausnahme ist TERM=screen-256color
für unterstützende Terminals.
Im Terminal scrollen ist bei einer Aufteilung in Arbeitsflächen natürlich nicht mehr möglich. tmux
bietet dafür den copy-mode an, der neben dem Scrollen auch das Markieren und Kopieren von Text aus dem Terminal ermöglicht. Mit zusätzlichen Programmen kann man tmux
auch so einrichten, dass es seinen Paste-Buffer mit der Fensterumgebung abgleicht. Ich benutze aktuell xclip
dafür. Das ganze funktioniert auch über entfernte, ssh basierte Sitzungen, wenn auf dem entfernten Host die DISPLAY
Variable korrekt gesetzt ist, und xclip
installiert ist; natürlich nur dann, wenn die ssh-Verbindung mit X11Forwarding hergestellt wurde.
Insgesamt sieht meine aktuell noch sehr schmale Konfiguration (~/.tmux.conf
) so aus:
# ich nutze rxvt-unicode mit 256 Farben set-environment -g TERM screen-256color # damit xclip lokal arbeiten kann set-environment -g DISPLAY :0.0 # paste-buffer in die X11 selection bind C-c run "tmux show-buffer | xclip -i -selection primary"# X11 selection in den tmux paste-buffer bind C-v run "tmux set-buffer -- "$(xclip -o -selection primary)"; tmux paste-buffer"
Da es die Möglichkeit gibt, die Statuszeile um eigene kleine "Widgets" zu erweritern – CPU Load, Speicherauslastung, etc kommen einem in den Sinn – und man viele Kommandos durch bind
auf Tastaturkürzel legen kann, wird die Konfiguration mit der Zeit sicherlich wachsen.