[[Vorlage(Getestet, focal, bionic)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [https://tmux.github.io/ tmux] {en} ist ein Terminal-Multiplexer für die Kommandozeile, vergleichbar mit [:Screen:screen] oder [:Terminator:]. tmux ermöglicht es, innerhalb eines Terminals oder einer Terminalemulation verschiedene virtuelle Konsolensitzungen zu erzeugen und zu verwalten. Sitzungen können getrennt („detach“) und später weitergeführt werden („attach“). Mit tmux ist es möglich, Konfigurationen für unterschiedliche Zwecke zu definieren, sodass man die jeweils gewünschte Umgebung zur Verfügung hat. Merkmale: * Client-Server Struktur * Darstellung mittels [wikipedia:ncurses:] (und damit für die [:Terminal#Virtuelle-Konsole:Konsole] geeignet) * Horizontales und vertikales Aufteilen des Fensters * Fenster können frei vergrößert oder verkleinert werden * Statusleiste mit Informationen wie Sitzungen, Fenstern, Programmnamen, Hostname und Datum/Uhrzeit * Copy & Paste zwischen den verschiedenen Anwendungen * Verwaltung mehrerer „paste buffer“ * Benennen und Finden von Sitzungen * Steuerung mittels Tastenkombinationen und Befehlen, sowie „Aliasen“ * Tastaturbelegung frei wählbar * Gut dokumentierte Befehlsschnittstelle (manpage) * Anpassbar über die '''tmux.conf''' oder zur Laufzeit * Über Skripte steuerbar = Installation = tmux ist in den offiziellen Paketquellen enthalten und kann über das folgende Paket installiert werden [1]: {{{#!vorlage Paketinstallation tmux, universe }}} = Bedienung = == Start und Konfiguration == tmux wird über ein normales Terminal [2] gestartet: {{{#!vorlage Befehl tmux }}} Sollte kein Server gestartet sein, wird dieser automatisch mitgestartet. tmux kennt eine Reihe von Aufrufoptionen, die in der [:man:Manpage] sehr gut beschrieben sind. Zum Starten von tmux mit Unterstützung für 256 Farben im Terminal und eigener Konfigurationsdatei wird z.B. folgender Befehl genutzt: {{{#!vorlage Befehl tmux -2 -f tmux.conf }}} Alternativ kann tmux mit einem Bash-Script (z.B. '''tmux.sh''') gestartet werden, in der die jeweilige '''tmux.conf''' eingebunden wird[3]: {{{#!code bash #!/bin/bash SESSION=main tmux="tmux -2 -f tmux.conf" # if the session is already running, just attach to it. $tmux has-session -t $SESSION if [ $? -eq 0 ]; then echo "Session $SESSION already exists. Attaching." sleep 1 $tmux attach -t $SESSION exit 0; fi # create a new session, named $SESSION, and detach from it $tmux new-session -d -s $SESSION $tmux new-window -t $SESSION:0 $tmux split-window -h -t $SESSION:0 $tmux new-window -t $SESSION:1 $tmux new-window -t $SESSION:2 $tmux new-window -t $SESSION:3 $tmux split-window -h -t $SESSION:3 $tmux new-window -t $SESSION:4 $tmux select-window -t $SESSION:0 $tmux attach -t $SESSION }}} === Beispiele der Kommandos === * Auflisten aller aktuell laufenden tmux-Sitzungen: {{{#!vorlage Befehl tmux ls }}} * Neue tmux-Sitzung mit dem Namen „hans“ starten: {{{#!vorlage Befehl tmux new -s hans }}} * Verbinden zur bestehenden Sitzung mit dem Namen „hans“: {{{#!vorlage Befehl tmux attach -t hans }}} * Beendet tmux-Server und -Clients und zerstört alle Sitzungen: {{{#!vorlage Befehl tmux kill-server }}} === Beispiele für Konfigurationen === Beispiel für eine '''~/tmux.conf''' {{{ set -g history-limit 1000 set -g status-interval 1 set -g status-left '#H#[default]' set -g status-right '#(cut -d ” ” -f 1-4 /proc/loadavg)#[default] #%Y-%m-%d %H:%M:%S#[default]' setw -g monitor-activity on set -g visual-activity on }}} Beispiel für eine '''~/tmux.conf''' in der die Mausunterstützung ab [:16.10:Ubuntu 16.10] aktiviert wird. {{{ set -g mouse on }}} Diese Kommandos können angewendet werden von * außerhalb und innerhalb von tmux mit `tmux `, * der Konfigurationsdatei '''~/.tmux.conf''' * und von der Kommando-Zeile ([[Vorlage(Tasten, strg+b)]], danach [[Vorlage(Tasten, ":")]]) innerhalb von tmux in einer laufenden Shell. == Kommandos == Hier nur ein paar wichtige Kommandos zum warm werden, die volle Anzahl gibt es in den [:man:]-pages zum Nachlesen. Die wichtigsten Parameter: * `-g` – globale Einstellung/Auswirkung * `-t targe` – Ziel, zum Teil komplett adressierbar: "0:1.2" : Sitzung 0, Fenster 1, Scheibe 2 * `-s source` – Quelle, adressierbar wie `-t` * `-d detach` – im Hintergrund / nicht aktivieren {{{#!vorlage Tabelle Kommando Bedeutung +++ attach -t :.[[BR]]a -t :. Sich mit der Sitzung verbinden / Client mit dem Server verbinden +++ set -g Mouse [on/off][[BR]]show -g Mouse [on/off] Maus aktivieren/deaktivieren[[BR]]aktuellen Wert anzeigen +++ set -g display-time [[BR]]show -g display-time Anzeige-Zeit in 1/1000tel Sekunden der Meldungen [[BR]]aktuellen Wert anzeigen +++ set -g escape-time [[BR]]show -g escape-time Prefix-Tastenkombinations-Zeit in 1/1000tel Sekunden[[BR]]aktuellen Wert anzeigen +++ joinp -s -t [[BR]] join-pane -s -t Fensterscheibe in ein anderes Fenster bewegen +++ linkw -s -t [[BR]]link-window -s -t [[BR]][[BR]]unlinkw -s -t [[BR]]unlinkw-window -s -t [[BR]][[BR]]unlink Verlinkt das Fenster in eine andere Sitzung[[BR]][[BR]]Hebt eine Verlinkung auf[[BR]][[BR]]Hebt diese Verlinkung auf +++ selectl [[BR]]select-layout [[BR]][[BR]] Parameter: [[BR]]selectl even-horizontal [[BR]]selectl even-vertical[[BR]]selectl main-horizontal[[BR]]selectl main-vertical[[BR]]selectl tiled Auswahl der Aufteilung der Fensterscheiben [[BR]][[BR]][[BR]]Parameter:[[BR]]gleichgroße horizontale Fensterscheiben [[BR]]gleichgroße vertikale Fensterscheiben[[BR]]die erste Scheiben über die gesamte horizontale Breite[[BR]]die erste Scheiben über die gesamte vertikale Höhe[[BR]]gleichgroße Aufteilung +++ swap-pane -D [[BR]]swap-pane -s0 -t1 Fenterscheibe mit der nächsten vertauschen[[BR]]Fenterscheibe 0 mit Fenterscheibe 1 tauschen +++ tmux split-window -v -p50 [[BR]]tmux split-window -h -p50 Fenster(scheibe) 50% in zwei vertikale/horizontale Scheiben teilen +++ rename-session -t [[BR]]rename -t Sitzung umbenennen +++ rename-window -t [[BR]]renamew -t Fenster umbenennen +++ kill-server -t Sitzung beenden +++ kill-session -t Sitzung beenden +++ kill-window -t Fenster beenden +++ kill-pane -t Fenster beenden +++ send-keys -t [[BR]]send -t Tasten an die Fensterscheibe senden, auch Kombinationen (C-a) oder Navigationstasten (NPage) }}} == Tastenkombinationen == Die Kommandosequenz wird standardmäßig mit [[Vorlage (Tasten Strg+B)]] eingeleitet, und die folgende Eingabe wird als weiteres Kürzel interpretiert. Im Folgenden einige ausgewählte Tastaturkürzel (Shortcuts). === Allgemein === {{{#!vorlage Tabelle Tastaturkürzel Bedeutung +++ [[Vorlage(Tasten, ?)]] Anzeige der aktiven Tastaturkürzel (keybindings) +++ [[Vorlage(Tasten, strg+b)]], [[Vorlage(Tasten, ":")]] Kommando-Eingabe, siehe [:tmux#Kommandos:] +++ [[Vorlage (Tasten, [)]] Scroll-Modus aktivieren, in dem Pfeiltasten zum Scrollen benutzt werden können (beenden: [[Vorlage(Tasten, q)]]) +++ [[Vorlage (Tasten, lmb + shift)]] Für den Kopiermodus mit der Maus (`mode-mouse`), wenn auch `mouse-select-pane` und/oder `mouse-select-window` verwendet werden }}} === Sitzungen / sessions === {{{#!vorlage Tabelle Tastaturkürzel Bedeutung +++ [[Vorlage (Tasten, s)]] Liste der Sitzungen/Fenster/Scheiben (Client) anzeigen, Sitzungen (Client) wechseln (session) +++ [[Vorlage (Tasten, d)]] Trennen der aktuellen Sitzung (Client) und in den Hintergrund verschieben (detach) +++ [[Vorlage (Tasten, "$")]] Umbenennen der Sitzung/session }}} === Fenster / windows === {{{#!vorlage Tabelle Tastaturkürzel Bedeutung +++ [[Vorlage (Tasten, c)]] Erzeugen eines neuen Fensters (create) +++ [[Vorlage (Tasten, &)]] Beenden des aktuellen Fensters, muss mit [[Vorlage(Tasten, y)]] bestätigt werden +++ [[Vorlage (Tasten, ",")]] Umbenennen des aktuellen Fenstertitels +++ [[Vorlage (Tasten, w)]] Liste der Fenster anzeigen, Fenster wechseln (windows) +++ [[Vorlage (Tasten, l)]] (last) Wechseln zum letzten aktiven Fenster (markiert durch `-` in der Statusleiste und Fensterliste) +++ [[Vorlage (Tasten, p)]] (previous) Wechsel zum vorherigen Fenster (z.B. von 3 nach 2) +++ [[Vorlage (Tasten, n)]] (next) Wechsel zum nächsten Fenster +++ [[Vorlage (Tasten, 1)]] etc. Wechsel zur Fenster-Nr. }}} ===Fensterscheibe / pane (Unterfenster) === {{{#!vorlage Tabelle Tastaturkürzel Bedeutung +++ [[Vorlage (Tasten, doublequote)]] Aktuelle Fensterscheibe (''pane'') horizontal teilen (erzeugt weitere Fensterscheibe) +++ [[Vorlage (Tasten, %)]] Aktuelle Fensterscheibe (''pane'') vertikal teilen (erzeugt weitere Fensterscheibe) +++ [[Vorlage (Tasten, q)]] Fensterscheiben Nummern anzeigen +++ [[Vorlage (Tasten, x)]] Aktuelle Fensterscheibe (''pane'') schließen, muss mit [[Vorlage(Tasten, y)]] bestätigt werden +++ [[Vorlage (Tasten pfeiltasten)]] Die aktive Fensterscheibe (''pane'') wechseln +++ [[Vorlage (Tasten alt+pfeiltasten)]] Die aktive Fensterscheibe (''pane'') in der Größe verändern +++ [[Vorlage(Tasten, strg+b)]] [[Vorlage(Tasten, strg+o)]] durchrotieren der Fensterscheiben / panes (linksherum, gegen den Uhrzeigersinn) +++ [[Vorlage (Tasten Leertaste)]] Wechsel zwischen verschiedenen Aufteilungen der Fensterscheiben (''pane'') +++ [[Vorlage (Tasten alt+1)]] [[BR]] ... [[Vorlage (Tasten alt+5)]] Wechsel zur Aufteilung 1: even-horizontal, gleichgroße horizontale Fensterscheibe[[BR]]Wechsel zur Aufteilung 2: even-vertical, gleichgroße vertikale Fensterscheiben[[BR]]Wechsel zur Aufteilung 3: der Fensterscheiben: main-horizontal, die erste über die gesamte Breite[[BR]]Wechsel zur Aufteilung 4 der Fensterscheiben: main-vertical, die erste über die gesamte Höhe[[BR]]Wechsel zur Aufteilung 5: tiled, gleichgroße Aufteilung +++ [[Vorlage (Tasten alt+hoch+e)]] aktuelle Fensterscheiben gleichmäßig verteilen +++ [[Vorlage(Tasten, strg+b)]] [[Vorlage(Tasten, z)]] '''z'''oomen der aktiven Fensterscheibe/pane (als Vollbild, im gesamten Fenster) +++ [[Vorlage (Tasten, !)]] Die aktuelle Fensterscheibe (''pane'') aus dem Fenster lösen und ein neues Fenster mit dieser Fensterscheibe erstellen }}} == X11-Selektion == Im Artikel [http://www.joocom.de/blog/screen-auf-steroiden-tmux/ screen auf Steroiden: tmux] {de} wird eine einfache Methode beschrieben, tmux mit der X11-Selektion zusammenarbeiten zu lassen. Dazu benötigt man [:xclip:]. Die nötigen Ergänzungen der '''~/tmux.conf''': {{{ # 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" }}} Das fügt zu den tmux-Tastaturkommandos (Prefix [[Vorlage (Tasten, Strg+B)]]) folgende hinzu: {{{#!vorlage Tabelle <-2 rowclass="titel"> X11 primary selection (Shortcuts) +++ Tastaturkürzel Bedeutung +++ [[Vorlage (Tasten, Strg+c)]] aktuellen tmux paste-Puffer in die „X11 primary selection“ schreiben +++ [[Vorlage (Tasten, Strg+v)]] Inhalt der „X11 primary selection“ in den tmux-paste-Puffer übernehmen }}} Das funktioniert so nicht in entfernten tmux-Sitzungen (z.B. per SSH mit X11-forwarding). Dann muss die DISPLAY-Variable in den tmux-panes explizit gesetzt werden. = Links = * [https://tmux.github.io/ Projektseite] {en} mit Beispielen und ausführlicher Dokumentation * [man:tmux:Manpage] {en} * [http://www.pro-linux.de/artikel/2/1745/tmux-mit-byobu-nutzen.html tmux mit Byobu nutzen] {de} - Artikel Pro-Linux, 01/2015 * [http://www.pro-linux.de/artikel/2/1691/tmux-das-kung-fu-der-terminal-ninjas.html tmux – Das Kung-Fu der Terminal-Ninjas] {de} - Artikel Pro-Linux, 06/2014 (Reprint aus [http://www.freiesmagazin.de/ freiesMagazin] {de}, 05/2014) * [:Terminal#Weitere-Terminalprogramme:] {Übersicht} Programmübersicht * [https://media.ccc.de/v/DCJGKA M.Leyrer: Warum ein schwarzes Fenster am Bildschirm reicht (media.ccc.de)] (Video/Vortrag) {de} * [https://www.grund-wissen.de/linux/tmux.html Der Terminal-Multiplexer tmux] Konfiguration, Beispielkonfiguration {de} #tag: Shell, Terminal, Server, Fernwartung