web-dev-qa-db-ja.com

gnome-terminalを使用してtmuxを起動する

Tmuxを起動する方法について少し混乱しています。ターミナル(現在のgnome-terminal)を起動するときに、tmuxを起動して実行したいと思います。

私は現在、.zshenvで「tmux」(bashの.bashrcのようなもの)を呼び出すことでこれを行っています。これは実際にはtmuxを起動しますが、いくつかの厄介な副作用があります。まず、Ctrl-Dを押してシェルを終了し、tmuxのみを強制終了し、tmuxのないgnome-terminalを実行したままにします。追加のCtrl-Dはそれも殺します。次に、この設定でsshをボックスに入れると、tmuxの2番目のネストされたインスタンスが取得されます。 sshを実行したときにtmuxを再度起動したくありません。

これは正しいアプローチですか、tmuxは通常どのように起動する必要がありますか?

8
oneself

.zshenvから何かを起動することは、間違いなく間違ったアプローチです。このファイルは、スクリプトを実行している場合でも、zshのすべてのインスタンスによって実行されます。インタラクティブシェルで実行する必要があることには.zshrcを使用し、ログイン時に実行する必要があることには.profile(またはログインシェルとしてzshを設定している場合は.zprofile)を使用します。に。

すべてのターミナルでtmuxが必要な場合は、ターミナルのすぐ下でtmuxを起動します(例:gnome-terminal -e tmux)(GUIランチャーを変更してこれらの引数を渡します)。 -eを使用しても引数を渡すことができます(ただし、引用符には注意してください)。 gnome-termminal -e 'tmux -s ~/.alternate.tmux.conf'

Ssh経由でログインしたときにtmuxも起動したい場合は、~/.profileから起動する必要があります。ログインシェルの親プロセスが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

Sshを介してtmuxを起動する別のアプローチは、環境からセッション名を取得することです。そうすれば、既存のセッションに接続できます。最も簡単な方法は、サーバー側で小さなスクリプトを作成することです。 ~/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

次に、次のようなsshコマンドを使用します。

ssh -t hostname.example.com bin/tmux-login-session SESSION_NAME

gnome-terminalで起動するようにtmuxを設定する方法は次のとおりです。

  1. Gnome-terminalを起動します
  2. メニュー>編集>プロファイル設定>タイトルとコマンド(タブ)
  3. チェックシェルの代わりにカスタムコマンドを実行する
  4. カスタムコマンドtmuxを入力します

これらの命令は、Ubuntu11.04で機能します。同等のものは、あらゆる種類のLinuxのgnome-terminalで機能するはずです。

9
user1055604

ターミナルで次のコマンドを実行して、起動するたびに実行されるtmuxを取得しますgnome-terminal

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"

これらの一連のコマンドにより、gnome-terminalはターミナルの起動時にtmuxを起動します。

  • これにより、tmuxを終了したときにgnome-terminalが終了します。
  • Gnome-terminal設定であるため、sshやログインに干渉することはありません。
  • また、デスクトップに固定したgnome-terminalのすべてのショートカットを使用して、tmuxを実行した状態でコマンドラインから起動できるため、この動作のカスタムショートカットを作成する必要はありません。
6
user1055604

Ctrl+Dは現在のシェルを終了しますが、ターミナルエミュレーターを終了しません(現在のシェルがターミナルエミュレーター内で開始される最初のプロセスでない限り)。 gnome-terminalを終了する場合は、Alt+F4またはShift+Ctrl+Qを使用できます。

0
JanC