Tmux mit gnome-terminal starten

8932
oneself

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

Ich mache dies derzeit, indem ich in meiner .zshenv "tmux" (wie bashc .bashrc) rufe. Tmux wird zwar gestartet, hat jedoch einige störende Nebenwirkungen. Wenn Sie zum Verlassen der Shell die Tastenkombination Strg-D drücken, wird nur tmux beendet, und das tmux-lose gnome-terminal läuft noch. Ein zusätzliches Ctrl-D wird das auch töten. Zweitens, wenn ssh in eine Box mit diesem Setup geht, erhalte ich eine zweite, verschachtelte Instanz von tmux. Ich möchte nicht, dass tmux erneut startet, wenn ich ssh.

Ist dies der richtige Ansatz? Wie sollte tmux normalerweise gestartet werden?

7

4 Antworten auf die Frage

9
Gilles

Das Starten von etwas .zshenvist definitiv der falsche Ansatz. Diese Datei wird von jeder Instanz ausgeführt zsh, auch wenn ein Skript ausgeführt wird. Verwenden Sie diese Option .zshrcfür Dinge, die in interaktiven Shells ausgeführt werden sollten, und .profile(oder .zprofile, wenn Sie zsh als Login-Shell festgelegt haben) für Dinge, die beim Anmelden ausgeführt werden sollten.

Wenn Sie tmux in jedem Terminal wünschen, starten Sie tmux direkt unter dem Terminal, zB gnome-terminal -e tmux(ändern Sie Ihren GUI-Launcher, um diese Argumente zu übergeben). Sie können Argumente auch mit übergeben -e(seien Sie jedoch vorsichtig beim Zitieren), 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. Führen Sie dies nur aus, wenn der übergeordnete Prozess der Login-Shell wie folgt lautet sshd:

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

Ein anderer Ansatz, um tmux über ssh zu starten, besteht darin, einen Sitzungsnamen aus der Umgebung zu erhalten. Auf diese Weise können Sie eine Verbindung zu einer vorhandenen Sitzung herstellen. Am einfachsten ist es, ein kleines Skript auf dem Server zu schreiben, zB ~/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 folgt:

ssh -t hostname.example.com bin/tmux-login-session SESSION_NAME 
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 verwendet wird (um es zu testen), scheint es, ein neues Gnome-Terminal kurz zu öffnen und es sofort zu schließen. oneself vor 13 Jahren 0
@ user33084: Das sollte nicht passieren. Möglicherweise wurde die falsche Shell-Konfigurationsdatei verwendet (z. B. müssen alle Umgebungsvariablen in `~ / .profile` definiert werden, nicht` .zshenv` oder `.zshrc`). Andernfalls sind sie unter Umständen nicht verfügbar diese). Was sehen Sie, wenn Sie "gnome-terminal -e" sh -c "tmux; Lesezeile" "" ausführen? Gilles vor 13 Jahren 0
8
user1055604

Here is how one can set tmux to launch with gnome-terminal:

  1. Launch gnome-terminal
  2. Menu > Edit > Profile Preferences > Title and Command (Tab)
  3. Check Run a custom command instead of my shell
  4. Populate Custom command with tmux

These instruction work for me on Ubuntu 11.04. The equivalent should work for gnome-terminal for any flavor of Linux.

5
user1055604

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" 

Dieser Befehlssatz veranlasst gnome-terminal, tmux beim Start des Terminals zu starten.

  • Dies führt dazu, dass gnome-terminal beendet wird, wenn Sie tmux beenden.
  • Es stört sowieso nicht mit ssh oder dem Login, da es sich um eine gnome-terminal-Einstellung handelt.
  • Sie können auch alle Verknüpfungen von gnome-terminal verwenden, die Sie auf dem Desktop fixiert haben, und diese von der Befehlszeile aus starten, während tmux ausgeführt wird. Daher müssen Sie für dieses Verhalten keine benutzerdefinierte Verknüpfung erstellen.
0
JanC

Ctrl+DBeendet die aktuelle Shell. Der Terminal-Emulator wird nicht beendet (es sei denn, Ihre aktuelle Shell ist der erste Prozess, der innerhalb des Terminal-Emulators gestartet wird). Wenn Sie den Vorgang beenden möchten gnome-terminal, können Sie Alt+F4oder verwenden Shift+Ctrl+Q.