This Page
diese seite ist eine vorbereitung fuer ein paar vortraege bei der c-base.
Vortragende:
- Anselm "mnemonikk" Helbig
- Sven "SvenG" Guckes
(1) Einfuehrung von GNU screen (2) Einfuehrung von tmux (3) Workshop zu tmux
related tools:
- detach
- dvtm
- twin
Colors
256 colors. depends on surrounding
Window Title
defaut title: first process
Window Number
es geht.
Command Line
key binding tab completion of command names and options
scripting: sequences? branches/conditional!
Copy+Paste
default key bindings a la emacs no incremental search though
buffer list
Misc
synchronize panes: ...
sinnvolle defaults statuszeilen CTRL-B als command key (entwicklung innerhalb screens mit CTRL-A als command key) mehrfaches splitting (hor+vert), persistent ueber detach+reattach sharing of windows between sessions
- Sessions = spezialfall: sessions mit teilmenge einer anderen session permissions: nur fuer einen ganze session
Window Splitting
screen: a split is for all windows tmux: splits are per window (panes)
window numbers and clock in ascii
farben
Development
BSD license OpenBSD -> CVS
Communication
chat, mail, wiki sourceforge
Tmux-Vortrag
Anselms Notizen zum tmux-Vortrag auf dem Linuxtag 2010.
Was ist tmux?
Tmux ist ein "Terminal-MUltipleXer" wie GNU screen.
Was ist ein Terminal-Multiplexer?
Ein Terminal-Multiplexer ist ein Terminalprogramm (vergleiche z.B. gnome-terminal), das selbst in einem Terminal laeuft. Man findet teilweise Features, wie sie auch in konventionellen Terminalprogrammen vorhanden sind:
- mehrere "Reiter"
Copy & Paste
- zurueckrollen ("scrollback buffer")
Im Unterschied zu den gaengigen Terminalprogrammen
- benoetigt der Terminal-Multiplexer keine grafische Oberflaeche
- kann auf einem entfernten Rechner in einer SSH-Sitzung laufen
- kann auch im Hintergrund laufen
Was ist der Unterschied zwischen tmux und GNU screen?
- Tmux ist wesentlich juenger (ca. 2007, screen ca. 1987) und wird aktiv weiterentwickelt.
- Tmux ist Teil von OpenBSD und steht unter der BSD-Lizenz, screen gehoert zum GNU-Projekt und steht unter der GPL.
- Tmux ist kleiner, schneller und verbraucht weniger Speicher und CPU.
- Tmux ist leichter zu konfigurieren, z.B. ist die Fensterliste in der Statusleiste standardmaessig sichtbar (vgl. byobu-Projekt fuer screen AKA screen-lauchner).
- Tmux laesst sich besser skripten.
Screen unterstuetzt mehr (obskure) Terminals, kann ohne Hilfsprogramme via telnet und die serielle Schnittstelle kommunizieren. Gemeinsames Arbeiten in derselben Screen-Sitzung wird besser unterstuetzt (ACLs).
Features von tmux
Allgemeine Struktur
Server => hat (mehrere) "Sessions" Session => hat (mehrere) "Windows" Window => hat (mehrere) "Panes" 0:1.2 => Session 0, Window 1, Pane 2
Panes
- Horizontal und vertikal splitten mit C-b " und C-b %.
- Layout waehlen mit C-b M-1 bis C-b M-4
- Anders als bei screen bleiben gehoeren die Splits zum "window" und nicht zur Session und bleiben beim Umschalten erhalten. Das ist eher vergleichbar mit dem Verhalten von kachelnden Fenstermanagern wie Dwm, Xmonad oder Awesome.
- Panes lassen sich mit join-pane auf andere Windows schieben oder per break-pane in ein neues Window ueberfuehren.
Skripte
Befehle lassen sich ueber die interaktive Eingabezeile (C-b :, bietet TAB-Vervollstaendigung) oder ueber das tmux-Kommando absetzen, Beispiele:
tmux new-window -d htop # oeffnet htop in einem neuen Fenster, dieses wird nicht automatisch selektiert tmux send-keys -t :3 q # schickt das Zeichen "q" an das Fenster mit der Nummer 3 (koennte z.B. htop beenden) tmux new-window # oeffnet ein neues Fenster mit einer Shell und selektiert es tmux send-keys -t :3 "echo foo" C-m # auch Steuerzeichen koennen mit send-keys gesendet werden
Durch die folgenden Kommandos werden zuerst drei vim-Instanzen mit drei verschiedenen Dateien in drei Panes im neuen Fenster "3" geoeffnet. Danach wird das Layout angepasst und ein Modus aktiviert, in dem alle Tastendruecke an alle Panes weitergeleitet werden.
tmux new-window -d -t :3 "vim foo.txt" tmux split-window -d -t :3 "vim bar.txt" tmux split-window -d -t :3 "vim baz.txt" tmux select-layout -t :3 even-vertical tmux set-window-option synchronize-panes on
Hier ein Beispiel, wie man diese Funktionalitaet als Shellfunktion umsetzen koennte:
multivim() { tmux new-window "vim $1" shift for file in "$@"; do tmux split-window "vim $file" done tmux select-layout even-vertical tmux set-window-option synchronize-panes on }
Buffer
C-b [ geht (wie in screen) in den Copy-Modus, der, anders als bei screen, standardmaessig Emacs-Keybindungs unterstuetzt. Anders als bei screen gibt es mehrere "paste buffer".
tmux capture-pane # speichert den sichtbaren Bildschirminhalt in einen Buffer tmux list-buffers # zeigt alle vorhandenen Buffer, reisst den Inhalt an tmux show-buffer # schreibt den Inhalt eines Buffers an die Standardausgabe tmux load-buffer # liest den Inhalt einer Datei in einen Buffer tmux save-buffer # schreibt einen Buffer in eine Datei
Weitere Funktionen
C-b w (choose-window) # grafische Fensterliste C-b q (display-panes) # Panes koennen per Ziffer angewaehlt werden
Die Fenstergroesse wird, wenn noetig, verkleinert. Eine Session kann man mehrmals offen haben oder ein Fenster auf verschiedenen Sessions betrachten (innerhalb desselben Servers).
Tmux in Ubuntu
Tmux ist seit karmic koala (9.10) in "universe", aktuell ist Version 1.1 (vom 2010-11-05) in lucid lynx (10.04) verfuegbar. Die aktuelle stabile Version von tmux ist 1.2 (vom 2010-03-10). Es ist auch nicht schwer, tmux aus den Quellen zu bauen, die Entwicklung findet in CVS statt, die einzigen Abhaengigkeiten sind libevent und ncurses.
EOF