Tmuxを起動する方法について少し混乱しています。ターミナル(現在のgnome-terminal)を起動するときに、tmuxを起動して実行したいと思います。
私は現在、.zshenvで「tmux」(bashの.bashrcのようなもの)を呼び出すことでこれを行っています。これは実際にはtmuxを起動しますが、いくつかの厄介な副作用があります。まず、Ctrl-Dを押してシェルを終了し、tmuxのみを強制終了し、tmuxのないgnome-terminalを実行したままにします。追加のCtrl-Dはそれも殺します。次に、この設定でsshをボックスに入れると、tmuxの2番目のネストされたインスタンスが取得されます。 sshを実行したときにtmuxを再度起動したくありません。
これは正しいアプローチですか、tmuxは通常どのように起動する必要がありますか?
.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を設定する方法は次のとおりです。
これらの命令は、Ubuntu11.04で機能します。同等のものは、あらゆる種類のLinuxのgnome-terminalで機能するはずです。
ターミナルで次のコマンドを実行して、起動するたびに実行される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を起動します。
Ctrl+D
は現在のシェルを終了しますが、ターミナルエミュレーターを終了しません(現在のシェルがターミナルエミュレーター内で開始される最初のプロセスでない限り)。 gnome-terminal
を終了する場合は、Alt+F4
またはShift+Ctrl+Q
を使用できます。