Zum Inhalt

Darf ich vorstellen tmux - Terminal-Multiplexer

tmux Fenster mit 4 Paness

tmux ist ein Terminal-Multiplexer für die Kommandozeile. Das bedeutet nichts anderes als, dass man innerhalb einer SSH-Sitzung zu einem Server dort weitere Fenster öffnen und organisieren kann.

Anstatt mehrere SSH-Sitzungen in eigenen Fenstern, z.B. iterm2 zu öffnen, lässt sich das auch alles in einer tmux-Session erledigen.

In diesem einen Fenster lassen sich mehrere Fenster öffnen, was vergleichbar mit den Tabs beim Webbrowser ist. In diesen Fenstern lassen sich wiederum sog. Panes (= Kacheln) anlegen und damit das Fenster weiter unterteilen. Zwischen Fenster und Panes kann man mit Tastenkürzeln sehr schnell hin- und herspringen.

Zudem sind vergleichbare Funktion wie bei screen mit detachen und attachen mit an Board.

Die mühsam angelegten Fenster und Panes müssen damit nicht jedes Mal beim Beenden der SSH-Sitzung geschlossen werden, sondern können detached werden und zu einem späteren Zeitpunkt mit einer neuen SSH-Sitzung vom gleichen oder einem anderen Gerät wieder aufgerufen (= attached) werden.

Eine weitere Einschränkung für das ein oder andere Tool können z.B. die Einstellungen in der sshd_config sein.

Die Eingabe der tmux-Befehle ist nur über du eigene Befehlszeile möglich, die sich mit der Tastenkombination aufrufen lässt.

tmux starten

tmux

Neue tmux-Sitzung starten und benennen

tmux new -s [Sitzungsname]

tmux-Sitzung beenden

exit

Verbindung zu letzter tmux-Sitzung wiederherstellen

tmux a 

Alle tmux-Sitzungen anzeigen (Anzeigen von Sitzungsnamen und Anzahl geöffneter Fenster)

tmux ls

# In eine vorhandene Sitzung einwählen
tmux a -t [Sitzungsname]

Abtrennen ("detach") von bestehender Sitzung (ggf. mit Sitzungsnamen)

tmux detach

Warning

🚨 tmux Tastenkürzel Reihenfolge 🚨 1. Drücke Strg 2. Drücke b (oder a, je nach Einstellung in der .tmux.conf) 3. Strg loslassen 4. Drücke d

Verbinden ("attach") zu bestehender Sitzung (ggf. mit Sitzungsnamen)

tmux attach

Panes und Fenster

🚨 tmux Tastenkürzel Reihenfolge 🚨

Strg + A + D = detach

  1. Drücke Strg
  2. Drücke A
  3. Loslassen Strg
  4. Drücke d

Panes erstellen

Die folgenden Befehle sind hilfreich für die Arbeit mit Panes.

Shortcut Beschreibung Kommentar
Strg + A + " Pane HORIZONTAL teilen ↔️
Strg + A + % Pane VERTIKAL ↕️
Strg + Q + Pane-Nummer Panes wechseln
Strg + A + x Pane schließen
Strg + A + Pfeiltasten (⬅️ ⬆️ ➡️ ⬇️) Navigieren zwischen den Panes
Strg + A + h zur linken Pane
Strg + A + i zur rechten Pane
Strg + A + j zur unteren Pane
Strg + A + k zur oberen Pane
Strg + A + q Anzahl der Panes anzeigen
Strg + A + o chronologisch durch alle Panes springen
Strg + A + } Pane mit den nächsten vertauschen
Strg + A + { Pane mit dem vorherigen vertauschen
Strg + A + Leertaste zwischen den vordefinierten Layouts für Panes wechseln, dazu müssen mindestens 2 Panes vorhanden sein
Strg + A + ! aktuelles Pane lösen und in neuem Fenster öffnen
Shortcut Beschreibung Kommentar
Strg + A + c neues Fenster
Strg + A + n nächstes Fenster
Strg + A + p vorheriges Fenster
Strg + A + n Fenster mit wechseln
Strg + A + w alle aktuell bestehenden Fenster auflisten, zwischen Fenstern wechseln
Strg + A + l zum letzten benutzten Fenster wechseln
Strg + A + , aktuelles Fenster umbenennen
Strg + A + & aktuelles Fenster beenden
Strg + A + Alt + Pfeiltasten (⬅️ ⬆️ ➡️ ⬇️) durch der Reihe nach durchschalten
Strg + A + Alt + 1, 2, 3, (…) zu Fenster Nummer n springen
Strg + A + [ Scrollmodus nutzen (mit Pfeiltasten in aktuellem Fenster scrollen)
Shortcut Beschreibung Kommentar
Strg + A + s Anzeige aller Sitzungen und Wechsel zwischen Sitzungen lassen sich mit x beenden.
Strg + A + $ aktuelle Sitzung umbenennen
Strg + A + d detach
Strg + A + : tmux Befehlszeile
Strg + A + ? tmux Hilfe
Strg + A + t Uhr anzeigen

Copy And Paste

  • Strg + A + [ = Starte Kopiermodus
  • Auswählen mit Pfeiltasten oder vim-Schortcuts
  • Enter = Beende Kopiermodus
  • Strg + A + ] = Einfügen

Panes anpassen - Shortcuts

Panes anpassen mit Strg + A + : und resize-pane.

Die Aufteilung der Panes lässt sich anpassen.

Strg + A + :

Und dann den Befehl eingeben:

  • resize-pane -D = Trennlinie unten bewegen
  • resize-pane -U = Trennlinie nach oben bewegen
  • resize-pane -R = Trennlinie nach rechts bewegen
  • resize-pane -L = Trennlinie nach links bewegen

Die Position der Trennlinie kann auch direkt mit angegeben werden.

  • resize-pane -U 20 = Trennlinie 20 Zellen nach oben bewegen
  • resize-pane -t 2 -R 10 = Trennlinie 10 Zellen nach rechts bewegen

Pane maximieren und minimieren (zuvor die Tastenkombination Strg + A + : drücken)

resize-pane -Z

tmux.conf

In der Konfigurationsdatei tmux.conf lässt sich das Tool an die eigenen Bedürfnisse anpassen.

Nach der Installation von tmux ist die Datei noch nicht vorhanden. Sie lässt sich aber aus einer Beispieldatei an den richtigen Platz kopieren.

# Option 1 - bei Raspberry Pi
cp /usr/share/doc/tmux/example_tmux.conf ~/home/benutzername

# Option 2
cp /usr/share/tmux/example_tmux.conf ~/home/benutzername

Nachdem die tmux.conf nun im eigenen Home-Verzeichnis liegt, kann sie bearbeitet werden.

Die Tastenkombination ist im Standard Strg + B.

# Change the prefix key to C-b
set -g prefix C-b
unbind C-a
bind C-b send-prefix

In einigen Anleitungen findet sich auch der Hinweis die Tastenkombination Strg + A zu verwenden. Für diese Tastenkombination ist der Abschnitt in der .tmux.conf anzupassen. Ich persönlich finde Strg + A auf der Tastatur einfacher zu erreichen.

# Some tweaks to the status line
# %D = dd/mm/yy
# %d = dd
# %m = mm
# %Y = yyyy
set -g status-right "%d.%m.%Y  %H:%M:%S"

# Change the prefix key to C-a
set -g prefix C-a
unbind C-b
bind C-a send-prefix

Info

Möchte man die Tastenkombination wechseln, ist die bisherige Tastenbindung zwingend mit unbind aufzuheben und mit bind neu einzulesen.

Einige Konfigurationen in der tmux.conf

# Some tweaks to the status line
set -g status-right "%d.%m.%Y  %H:%M:%S"
set -g window-status-current-style "underscore"

# Background status bar
set -g status-bg cyan

# Color inactive window
set -g window-status-style bg=blue

# Color active window
set -g window-status-current-style bg=yellow,fg=red

# Change the prefix from C-a key to C-b
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# Turn the mouse on
set -g mouse on

Nach jeder Änderung an der tmux.conf ist tmux zu beenden und neu zu starten. Erst dann werden die Änderungen eingelesen.

tmux kill-server 
tmux

Bei allen weiteren Fragen zu tmux hilft die sehr umfangreiche manpage weiter: 1

man tmux

Wofür verwendet ich tmux?

Auf meinem MacBook Air verwendet ich iterm2 ohne tmux. Gerne nutze ich auch sehr viele Fenster mit für unterschiedliche Dinge. Die vielen iTerm-Fenster lassen sich auf dem Monitor sehr bequem und schnell mithilfe von Tastaturkürzeln anordnen. Dafür benötige ich kein tmux.

tmux verwende ich auf meinen Servern für die Administration. Dafür wird auf dem Client ein iTerm-Fenster geöffnet und eine SSH-Verbindung zum Server hergestellt und tmux automatisch geöffnet.

tmux Tweaks

tmux wird bei jeder Anmeldung automatisch gestartet.

Die Datei .tmux_menu.sh liegt in diesem Beispiel im Home-Verzeichnis des Benutzers, sie kann aber auch in einem anderen Verzeichnis abgelegt werden. Zu beachten ist, der Eigentümer des Home-Verzeichnisses benötigt ausführbare Rechte für die Datei.

Die Datei macht im Endeffekt nichts anderes als zu schauen,

  1. gibt es bereits eine laufende tmux-Session, falls nein, wird die tmux-Session d neu angelegt und gestartet
  2. git es bereits laufende tmux, werden die aufgelistet und dem Benutzer zur Auswahl angezeigt
    1. ausgewählte tmux-Session wird gestartet
    2. Benutzer kann eine neue tmux-Session anlegen

Die Datei ist gut dokumentiert und es werden die bereits von oben bekannten tmux-Befehle verwendet.

sudo touch ~/.tmux_menu.sh

Der Inhalt ist in die Datei einzufügen.3

#!/bin/bash

# Inspired by: https://ostechnix.com/enhancing-ssh-login-with-a-tmux-session-selection-menu/

# Get a list of existing tmux sessions:
TMUX_SESSIONS=$(tmux ls | awk -F: '{print $1}')
TMUX_SESSION_NAME="d"

# If there are no existing sessions:
if [[ -z $TMUX_SESSIONS ]]; then
    echo "No existing tmux sessions. Creating a new session called '$TMUX_SESSION_NAME' (= default)..."
    tmux new -s $TMUX_SESSION_NAME
else
    # Present a menu to the user:
    echo "Existing tmux sessions:"
    echo "$TMUX_SESSIONS"
    echo "Enter the name of the session you want to attach to, or 'new' to create a new session: "
    read user_input

    # Attach to the chosen session, or create a new one:
    if [[ $user_input == "new" ]]; then
        echo "Enter name for new session: "
        read new_session_name
        tmux new -s $new_session_name
    else
        tmux attach -t $user_input
    fi
fi

Das Skript wird ausführbar gemacht

chmod u+x .tmux_menu.sh

In die Datei .bash_profile wird eine neue Zeile eingefügt. Ist die Datei noch nicht vorhanden, dann einfach anlegen.

Die .bash_profile sorgt dafür, dass bei jeder neuen SSH-Verbindung das Skript .tmux_menu gestartet wird, mit dem Rechten des Benutzers.

nano ~/.bash_profile
# If not inside a tmux session, and if the shell is interactive, then run the tmux menu script
if [[ -z "$TMUX" ]] && [[ $- == *i* ]]; then
    ~/.tmux_menu.sh
fi

source ~/.bashrc

Die letzte Zeile source ~/.bashrc sorgt dafür, dass tmux auch farbig bleibt.2

tmux kann alle Farbe verlieren und kennt dann nur noch eine weiße Schrift. Wird dann einfach bash eingegeben, erscheint die Farbe.

tmux-Konfigurationsdateien in ein anderes Verzeichnis verschieben

Die beiden Dateien .tmux_menu.sh und .tmux.conf lassen sich in das Verzeichnis ~/.config verschieben. Das Home-Verzeichnis wirkt dadurch aufgeräumter und übersichtlicher. Die Dateinamen ändern sich, der Punkt . wird weggelassen. Die beiden Dateien müssen nicht mehr versteckt werden.

mkdir ~/.config/tmux

chown 755 ~/.config/tmux

touch ~/.config/tmux/tmux.conf

touch ~/.config/tmux/tmux_menu.sh

chown u+x ~/.config/tmux/tmux_menu.sh
  • tmux.conf - Der Inhalt der Datei bleibt gleich.
  • tmux_menu.sh - Der Inhalt der Datei bleibt gleich.
  • .bash_profile - Die Zeile ~/.tmux_menu.sh wird zu ~/.config/tmux/tmux_menu.sh.

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj