tmux - Häufig gestellte Fragen NOTE: Mit ``windows'' ist kein Betriebssystem, sondern "Tabs" innerhalb einer tmux-Sitzung gemeint! ***************************************************************************** * NOTE: An den meisten Problemen mit der Darstellung ist ein falscher * * Wert in der Variable TERM schuld. Bevor ihr einen Fehlerbericht * * einreicht, stellt sicher das TERM korrekt innerhalb und außerhalb von * * tmux korrekt gesetzt ist. * * * * Innerhalb tmux muss TERM auf "screen" oder ähnliches (wie z. B. * * "screen-256color") gesetzt sein. Wenn das nicht der Fall ist, schick * * auch keinen Fehlerbericht ein. * * * * Außerhalb tmux muss TERM zu deinem Terminal passen; also z. B. "rxvt" * * für rxvt und ähnliche. * ***************************************************************************** * Was ist bei tmux anders als bei GNU screen? tmux und GNU screen haben einige Gemeinsamkeiten. Einige der Hauptunterschiede die ich kenne (aber bitte bedenkt das ich GNU screen nun seit einigen Jahren nicht mehr nutze) sind: - tmux nutzt ein client-server - Model. D. h. jeder Server hat einen Unix Domain Socket in /tmp und innerhalb eines Servers sind mehrere Sessions, welche man mehreren Clients (terminals) anhängen kann, vorhanden. Das hat einige Vorteile: Windows können gleichzeitig an mehrere Sessions angehängt werden. Windows können frei zwischen den Sessions verschoben werden und ein Client kann zwischen den Sesions verschoben werden (C-b D). Das hat allerdings auch einen große Nachteil: Wenn der Server crasht, sind auch alle Sessions beendet. Aber tmux ist sehr stabil!. Dieses Modell ist anders als bei GNU Screen, wo typischerweise jede neue Instanz von Screen unabhängig ist. tmux unterstützt das gleiche Verhalten, in dem es mehrere Server nutzt, mit der Option ``-L socket-name'', aber das ist nicht empfehlenswert. - Unterschiedliches Kommandozeileninterface. Bei tmux kann man fast alle Kommandos welche tmux anbietet, einfach eingeben und alle Vorteile der Shell - wie z. B. Tab-Vervollständigung - nutzen. - tmux nennt die Namen der Window (welche man in der Statuszeile sieht) "names"; bei Screen heissen sie "titles". - tmux hat mehrere "paste Buffer", in denen Inhalte abgelegt werden können. - tmux unterstützt automatisches Umbenennen der Windows, in den Namen des Programms (ohne aufwendiges Hacken mit den Escape-Sequenzen). - tmux bietet VI und Emacs - Tasten an. Ist zwar auch nicht vorrangig, aber ich nutze Emacs und wenn tmux nur das Emacs Layout anbieten würde, würden alle VI User sauer. Die Keybindings sind jedenfalls vollständig konfigurierbar. - tmux hat eine Option um die Größe des Window zu beschränken. - Mit tmux kann man innerhalb der Window suchen (C-b f). - Das splitten der Window (pane) ist anders als bei GNU Screen. Tmux hat zwei Objekte: Windows und panes; creen hat nur Windows. Dieser Unterschied hat mehrere Auswirkungen: * Mit Screen kann kann ein Windows mehrere Layouts haben; in tmux kann ein pane lediglich in einem Window sein (das zu ändern ist sehr viel Arbeit und ein ziemlich heftiger Eingriff). * Die Layouts von tmux sind unveränderlich. * Innerhalb tmux werden alle Panes geschlossen, wenn man ein Window beendet. * tmux panes haben keine individuellen Namen, Überschriften oder ähnliches. - Die Statuszeile von tmux ist einfacher zu nutzen und übersichtlicher strukturiert. Ich denke es ist schwer das anders zu sehen. Mit tmux kann man kein Kommando automatisch wiederholen lassen und dessen Ausgabe in der unteren Statuszeile anzeigen lassen. Kommandos müssten jedes Mal erneut ausgeführt werden. - tmux hat einen modernen, einfach erweiterbaren Quelltext. Wenn man sich die Sourcen von Screen ansieht, kann man schwer was dagegen sagen. - tmux hängt von libevent ab, aber ich sehe das nicht als Nachteil: libevent ist klein und portabel und auch modernen Systemen mit einen Paketmanagementsystem, welches die Abhängigkeiten automatisch auflöst, nicht wirklich ein Problem. libevent bringt einige Vorteile in Bezug auf die Performance und die Übersichtlichkeit des Quelltextes. - Screen erlaubt es, das das Window größer als das Terminal ist und kann es darüber hinaus verschieben. tmux limitiert die Größe auf den größten Client der angehängt ist. - Screen hat eingebaute Serial- und Telnet-Unterstützung; das ist Bloat und wird wahrscheinlich nich in tmux implementiert. - Die Bedienung ist unterschiedlich. - tmux unterstützt mehr Plattformen, wie z. B. IRIX und auch seltenere Terminals. * Ich habe einen Fehler gefunden! Was soll ich jetzt unternehmen? Überprüfe zuerst ob das Problem bei der aktuellsten Version von tmux (über GIT) noch vorhanden und reproduzierbar ist. Manchmal kann es vorkommen das Fehler schon behoben wurden, aber nur innerhalb von GIT verfügbar sind. Bitte schick Fehlerberichte via Email an nicholas.marriott@gmail.com oder tmux-users@googlegroups.com. Bitte häng auch so viel wie möglich der folgenden Informationen an: - Die von dir eingesetzte Version von tmux; - das von dir genutzte Betriebssystem und die Version; - das Terminal welches du nutzt und die Angabe der Variable TERM als du tmux gestartet hast; - eine Beschreibung des Problems; - wenn das Problem reproduzierbar ist, dann die einzelnen Schritte; - für Darstellungsfehler ist ein Screenshot und die Ausgabe von "infocmp $TERM" (außerhalb von tmux) sehr sinnvoll. * Wieso kann tmux $x nicht? Bitte schick einen Feature-Request an tmux-users@googlegroups.com. * Ich sehe keine Farben in meinem Termial! Hilfe! Auf einigen Plattformen haben die bekannten Terminals keine Farben. Screen ignoriert das, tmux nicht. Wenn der eingesetzte Terminal-Emulator Farben unterstützt, verwende eine Variable für TERM, welche diese auch anzeigt (wie z. B. xterm-color). * tmux friert mein Terminal ein, wenn ich eine Session anhängen will. Ich muss sogar die Shell mit ``kill -9'' beenden. Einige Konsolen mögen es wirklich nicht wenn man den Titel des Windows ändern will. Sag tmux einfach, das er das lassen soll. Entweder indem man die Option "set-titles off" über den Kommandopromt eingibt oder indem man folgendes in die .tmux.conf einträgt: set -g set-titles off Wenn es das noch immer nicht behebt, schick einen Fehlerbericht. * Wieso ist C-b die Kommandosequenz? Wie kann ich das ändern? Die Standardtaste ist C-b, weil der Prototyp von tmux ursprünglich innerhalb von GNU Screen entwickelt wurde und C-b wurde gewählt, weil man keine Probleme mit dem Meta-Key von Screen haben wollte. Es hat auch den Vorteil, das es keine Probleme mit C-a von Emacs (start-of-line) und der Shell gibt. Das zu ändern ist einfach: Dazu muss man lediglich die Option "prefix-key" und - wenn notwendig - das Keybinding vom "send-prefix" Kommandos C-b (C-b C-b erzeugt standardmäßig C-b) mit einer neuen Taste belegen. Zum Beispiel: set -g prefix C-a unbind C-b bind C-a send-prefix * Wie nutzt ich UTF-8? Wenn tmux in einem Terminal läuft, das UTF-8 unterschützt, muss UTF-8 innerhalb tmux aktiviert werden. Seit Version 0,9 versucht tmux automatisch zu erkennen ob das Terminal UTF-8 tauglich ist. Dazu prüft es die Variablen LC_ALL, LC_CTYPE und LANG. list-clients werden ebenfalls genutzt ob das erkannte korrekt ist; wenn nicht, ist die Option ``-u'' der Kommandozeile von tmux da, um tmux zu sagen das das Terminal UTF-8 unterstützt∴ $ tmux -u new Seit Version 1.0 aktiviert tmux die für UTF-8 relevanten Optionen automatisch (z. B. status-utf8 und utf8】 wenn die Bedingungen erfüllt sind. * Wie nutzte ich ein Terminal mit 256 Farben? Davon ausgegangen das das Terminal auch 256 Farben unterstü«t, ist es ausreichend wenn man folgendes in die ~/.tmux.conf einträgt: set -g default-terminal "screen-256color" Beachtet auch das nicht alle Plattformen "screen-256color" unterstützen ("infocomp screen-256color" wird dann einen Fehler auswerfen). In diesem Fall lies den nächsten Punkt in diesen FAQ. tmux versucht zu erkennen ob ein Terminal 256 Farben unterstützt, in dem terminfo und der String "colors#256" von "infocomp $TERM" geprüft wird. Wenn beides fehlschlägt, kann man die Kommandozeilenoption ``-2'' nutzen, um tmux zu sagen das das Terminal 256 Farben unterstützt. * Vim oder $anderesprogramm zeigen keine 256 Farben an. Was ist da los? Einige Programme versuchen die Anzahl der möglichen Farben zu erkennen, in dem sie terminfo oder den Eintrag "Co" von termcap auslesen. Wie auch immer; das ist nicht zuverlässig. Es gibt zwei Optionen (abgesehen des Setzens von "screen-256color") die es Programmen ermöglichen zu erkennen ob sie innerhalb eines 256-Colors Terminals innerhalb von tmux laufen: - Manuelles Anweisen damit das Programm immer 256 Farben nutzt oder wenn TERM auf screen gesetzt ist. Bei Vim kann man dazu die Option t_Co überschreiben: . - Man kann auch eine angepasste Terminfo erstellen, welche colors#256 enthält und diese unter ~/.terminfo speichern. * Wie kann ich dafür sorgen das Ctrl-PgUp und Ctrl-PgDown in Vim funktionieren? Mit tmux kann man Ctrl (und wenn es durch das Terminal unterstützt wird, auch Alt und Shift) Tasten mit Keysequenzen im xterm(1)-Style zuweisen. Das kann entweder für jedes Window einzeln oder global mit dem Kommando setw -g xterm-keys on erledigt werden. Weil die Variable TERM innerhalb von tmux auf "screen" gesetzt sein muss, erkennt Vim diese Tasten nicht automatisch. Dafür kann man aber die passenden Keysequenzen überschreiben. Dazu reicht folgender Eintrag in der ~/.vimrc if &term == "screen" set t_kN=^[[6;*"" set t_kP=^[[5;*" endif Gleiches funktioniert auch für andere Tasten. Please note that the "xterm-keys" setting may affect other programs, in the same way as running them in a standard xterm; for example most shells do not expect to receive xterm(1)-style key sequences so this setting may prevent keys such as ctrl-left and ctrl-right working correctly. tmux also passes through the ctrl (bit 5 set, for example ^[[5~ to ^[[5^) modifier in non-xterm(1) mode; it may be possible to configure vim to accept these, an example of how to do so would be welcome. Nutzer von Vim können auch die Option "ttyfast" setzen. * Wie kann ich Ctrl und Shift Links/Rechts in GNU Emacs nutzen? Die "terminal-init-screen" - Funktion unter term/screen.el wird bei neuen Frames aufgerufen, aber sie weißt keine Funktionstasten zu. Wenn die Option "xterm-keys" von tmux aktiviert ist, kann man folgendes zur init.el oder ~/.emacs hinzufügen: (defadvice terminal-init-screen ;; The advice is named `tmux', and is run before `terminal-init-screen' runs. (before tmux activate) ;; Docstring. This describes the advice and is made available inside emacs; ;; for example when doing C-h f terminal-init-screen RET "Apply xterm keymap, allowing use of keys passed through tmux." ;; This is the elisp code that is run before `terminal-init-screen'. (if (getenv "TMUX") (let ((map (copy-keymap xterm-function-map))) (set-keymap-parent map (keymap-parent input-decode-map)) (set-keymap-parent input-decode-map map)))) Selbstverständlich muss man sicherstellen, dass die ~/.tmux.conf den Eintrag "set -g xterm-keys on" enthält. * Wieso setzt elinks den Window Titel nicht wenn er unter tmux läuft? Es gibt keinen Weg um zu erkennen ob das Terminal das Setzen/Ändern des Windowtitels unterstü«t, also versucht elinks zu erraten, in dem es das Environment ausliest. Vor TERM=screen nutzt es die Variable STY um zu erkennen ob es innerhalb von GNU Screen läuft. Folgende Shellfunktion erledigt das und löscht auch den Windowtitel wenn es beendet wird (elinks setzt, wieso auch immer, zum Wert von TERM): elinks() { STY=`which elinks` $* echo -ne \\033]0\;\\007; } * Was ist ein geeigneter Weg um Zeichen mit #(command) zu escapen? Wenn man das Konstrukt #(command) einsetzt um die Ausgabe von einem Kommando in die Statuszeile einzubinden, wird das Kommando zweifach geparsed. Zuerst wenn es durch die Konfigurationsdatei oder die Kommandozeile und dann wenn das Kommando durch die Statuszeile an die Shell "übergeben" wird. Wenn man z. B. den String "(test)" in der Statuszeile haben will, kann man entweder einfache oder doppelte Anführungszeichen nutzen: set -g status-right "#(echo \\\\(test\\\\))" set -g status-right '#(echo \\\(test\\\)' In beiden Fällen setzt die Option "status-right" den String "#(echo \\(test\\))" und das Kommando führt dann "echo \(test\)" aus. * tmux nutzt sehr viel CPU. Was kann ich tun? Das automatische Umbenennen von Windows benötigt sehr viel Rechenleistung, besondersn an langsamen Computern. Wenn das ein Problem ist, stell es einfach mit der Option "setw -g automatic-rename off" ab. Wenn es das Problem nicht behebt, schick uns eine Fehlermeldung. * Ich nutze PuTTY and meine window pane Trennzeichen sind immer qqqqqq! PuTTY is using a character set translation that doesn't support ACS line drawing. With a Unicode font, try setting PuTTY to use a different translation on the Window -> Translation configuration page. For example, change UTF-8 to ISO-8859-1 or CP437. It may also be necessary to adjust the way PuTTY treats line drawing characters in the lower part of the same configuration page. * Was ist die beste Methode um die Auslastung anzuzeigen? Wieso nicht #L? It isn't possible to get the load average portably in code and it is preferable not to add portability goop. Das folgende funktioniert zumindest unter Linux, *BSD und OS X: uptime|awk '{split(substr($0, index($0, "load")), a, ":"); print a[2]} * How do I attach the same session to multiple clients but with a different, wie z. B. screen -X? Ein oder mehr Windows können mit mehreren Sessions mit "link-window" verknüpft oder man kann eine gruppierte Session mit allen Windows mit "new-session -t" erstellen. * Ctrl und die Pfeiltasten funktionieren nicht wenn ich PuTTY nutze! PuTTY kehrt die Bedeutung der Pfeiltasten zu Ctrl um, womit es ziemlich schwer ist, das innerhalb von tmux zu erkennen.. Damit die Ctrl-Taste korrekt arbeitet, ändere die Einstellungen von terminfo zu "kUP5" (Ctrl-UP, ..) und verbiete smkx/rmkx, damit tmux das nicht ändert. Übernimm z. B. folgende Zeile in die ~/.tmux.conf (vorrausgesetzt, due hast TERM auf xterm gesetzt): set -g terminal-overrides "xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@" Obige Zeile funktioniert aber nur ab Version 1.2 und neuer!. * Wie kann ich ein Window in tmux "blanken"? GNU Screen bietet ein Feature an, womit es möglich ist den Bildschirm nach einer bestimmten Zeit Inaktivität zu "blanken". Damit man das gleiche in tmux erreicht, kann man die Option "lock-command" nutzen. Folgendes funktioniert mit der GNU Bash: set -g lock-command 'tput civis && read -s -n1' Das löscht den Cursor und weist die Shell an zu warten bis eine Taste gepresst wird. Für die Zsh muss man "read -s k1" nutzen. Außerdem ist es möglich andere Programme einzubinden wie z. B. lock(1) oder vlock(1): bind x set lock-command '/usr/bin/vlock' \; lock-client \; set lock-command 'tput civis && read -s -n1' * Ich sehe keine Kursivschrift! Oder less(1) und Vim zeigen kursiv und reverse komplett falsch an! GNU Screen unterstützt keine Kursivschrift und die Terminfo von Screen nutzt die Escape-Sequenzen nicht korrekt. Wenn - seit Version 2.1 - das Standardterminal auf "screen" gesetzt ist oder "screen-*"enthält, verhält sich tmux wie Screen und Kursiv wird dekativiert. Um Kursiv zu aktivieren, erstell einen neuen Eintrag in der Terminfo Namens "tmux"; auf einigen Plattformen kann er bereits vorhanden sein (überprüfe es mit "infocmp tmux"): $ cat </dev/null" Or for inside and outside copy mode with the prefix key: bind C-y run -b "tmux save-buffer - | xclip -i" Auf OS X kann man reattach-to-usernamespace nutzen damit pbcopy/pbpaste funktioniert: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard * Wieso sehe ich Punkte um die Session wenn ich sie hinzufüge? tmux limits the size of the window to the smallest attached session. If it didn't do this then it would be impossible to see the entire window. The dots mark the size of the window tmux can display. Um das zu vermeiten, detach'e alle anderen Clients wenn du sie hinzufügst: $ tmux attach -d Man kann auch in tmux bestimmte Clients mit C-b D oder alle mit: C-b : attach -d