Darf ich vorstellen tmux - Terminal-Multiplexer
s
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
- Drücke
Strg
- Drücke
A
- Loslassen
Strg
- 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 KopiermodusStrg
+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 bewegenresize-pane -U
= Trennlinie nach oben bewegenresize-pane -R
= Trennlinie nach rechts bewegenresize-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 bewegenresize-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,
- gibt es bereits eine laufende tmux-Session, falls nein, wird die tmux-Session
d
neu angelegt und gestartet - git es bereits laufende tmux, werden die aufgelistet und dem Benutzer zur Auswahl angezeigt
- ausgewählte tmux-Session wird gestartet
- 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.
Follow Me❗️