Tmux mit gnome-terminal starten

8

Ich bin ein wenig verwirrt darüber, wie man tmux startet. Wenn ich mein Terminal (aktuelles Gnome-Terminal) starte, möchte ich, dass tmux läuft.

Ich mache das gerade, indem ich "tmux" in meiner .zshenv aufrufe (ähnlich wie .bashrc in bash). Dies startet zwar tmux, hat aber einige nervige Nebenwirkungen. Wenn Sie zuerst Strg-D drücken, um die Shell zu verlassen, wird nur tmux beendet und das Gnome-Terminal ohne tmux läuft noch. Ein zusätzliches Strg-D wird das ebenfalls töten. Zweitens erhalte ich eine zweite verschachtelte Instanz von tmux, wenn ich mit diesem Setup in eine Box ssh. Ich möchte nicht, dass tmux erneut gestartet wird, wenn ich ssh.

Ist dies der richtige Ansatz, wie sollte tmux normalerweise gestartet werden?

man selbst
quelle

Antworten:

9

Etwas von zu starten .zshenvist definitiv der falsche Ansatz. Diese Datei wird von jeder Instanz von ausgeführt zsh, auch wenn ein Skript ausgeführt wird. Verwenden Sie diese Option für Aufgaben .zshrc, die in interaktiven Shells ausgeführt werden sollen, und .profile(oder .zprofile, wenn Sie zsh als Anmeldeshell festgelegt haben) für Aufgaben, die beim Anmelden ausgeführt werden sollen.

Wenn Sie tmux in jedem Terminal möchten, starten Sie tmux direkt unter dem Terminal, z. B. gnome-terminal -e tmux(ändern Sie Ihren GUI-Launcher, um diese Argumente zu übergeben). Sie können Argumente auch mit übergeben -e(obwohl Sie beim Zitieren vorsichtig sein müssen), z gnome-termminal -e 'tmux -s ~/.alternate.tmux.conf'.

Wenn Sie tmux auch starten möchten, wenn Sie sich über ssh anmelden, müssen Sie es von Ihrem Computer aus starten ~/.profile. Tun Sie dies nur, wenn der übergeordnete Prozess der Anmeldeshell sshd:

parent_process_name=$(ps -o comm= -p $PPID`)
case ${parent_process_name##*/} in
  sshd) type tmux >/dev/null 2>/dev/null && exec tmux;;
esac

Ein anderer Ansatz zum Starten von tmux über ssh wäre das Abrufen eines Sitzungsnamens aus der Umgebung. Auf diese Weise können Sie eine Verbindung zu einer vorhandenen Sitzung herstellen. Am einfachsten ist es, ein kleines Skript auf der Serverseite zu schreiben, z ~/bin/tmux-login-session.

#!/bin/sh
if tmux has-session -t "$1"; then
  exec tmux attach-session -t "$1"
else
  . ~/.profile
  exec tmux new-session -s "$1"
fi

Verwenden Sie dann einen ssh-Befehl wie den folgenden:

ssh -t hostname.example.com bin/tmux-login-session SESSION_NAME
Gilles 'SO - hör auf böse zu sein'
quelle
Hallo, ich möchte tmux nicht starten, wenn ich ssh verwende, aber ich danke Ihnen für das interessante Skript. Soweit "gnome-terminal -e tmux" von einem anderen Terminal aus verwendet wird (um es zu testen), scheint es ein neues gnome-terminal kurz zu öffnen und es dann sofort zu schließen.
selbst
@ user33084: Das sollte nicht passieren. Dies kann an der Verwendung der falschen Shell-Konfigurationsdatei liegen (z. B. müssen alle Umgebungsvariablen in definiert werden ~/.profile, nicht .zshenvoder .zshrc, oder sie sind unter solchen Umständen nicht verfügbar). Was siehst du, wenn du rennst gnome-terminal -e 'sh -c "tmux; read line"'?
Gilles 'SO - hör auf böse zu sein'
9

So kann man tmux so einstellen, dass es mit gnome-terminal startet :

  1. Starten Sie das Gnome-Terminal
  2. Menü> Bearbeiten> Profileinstellungen> Titel und Befehl (Registerkarte)
  3. Aktivieren Sie "Benutzerdefinierten Befehl anstelle meiner Shell ausführen"
  4. Populate Benutzerdefinierte Befehl mit tmux

Diese Anleitung funktioniert für mich unter Ubuntu 11.04. Das Äquivalent sollte für gnome-terminal für jede Linux-Variante funktionieren.

user1055604
quelle
Es wird funktionieren, aber es wird die Option "Terminal im aktuellen Ordner öffnen" verlieren. Es wird immer ein neues Terminal im Haus geöffnet.
Alberto
6

Führen Sie die folgenden Befehle am Terminal aus, damit tmux bei jedem Start von gnome-terminal ausgeführt wird :

gconftool --type string --set /apps/gnome-terminal/profiles/Default/custom_command "tmux"
gconftool --type bool --set /apps/gnome-terminal/profiles/Default/use_custom_command "true"

Diese Befehle veranlassen gnome-terminal, tmux beim Terminalstart zu starten.

  • Dies führt zum Beenden des Gnome-Terminals, wenn Sie tmux beenden.
  • Es wird ohnehin nicht mit ssh oder Login stören, da es sich um eine Gnome-Terminal-Einstellung handelt.
  • Sie können auch alle Verknüpfungen des Gnome-Terminals verwenden, die Sie auf dem Desktop angeheftet haben, und es über die Befehlszeile starten, während tmux ausgeführt wird, sodass Sie für dieses Verhalten keine benutzerdefinierte Verknüpfung erstellen müssen.
user1055604
quelle
0

Ctrl+DBeendet die aktuelle Shell und beendet Ihren Terminalemulator nicht (es sei denn, Ihre aktuelle Shell ist der erste Prozess, der im Terminalemulator gestartet wird). Wenn Sie beenden möchten gnome-terminal, können Sie Alt+F4oder verwenden Shift+Ctrl+Q.

JanC
quelle