web-dev-qa-db-ja.com

新しいシェルセッションを開始するたびにTMUXをアクティブにするにはどうすればよいですか?

毎回tmuxと入力する代わりに、新しいセッションウィンドウで常にtmuxを使用する方法

ターミナルウィンドウを開いていない状態で開いた場合、最初のセッションはどのようにしてtmuxに配置できますか?

.bashrcたぶん何か?

60
Michael Durrant

warningこれにより「破損」する可能性があります(ターミナルウィンドウを開くことができなくなります-これは良くありません!)Ubuntuログイン。細心の注意を払って、同じ問題が発生した場合にログインできるコンピューター上に2番目の管理者アカウントがあることを確認してください。(other詳細と異なるアプローチについて回答してください。

その警告が与えられた場合、最も簡単な解決策は、tmux呼び出しを_.bashrc_の最後に追加することです。

_alias g="grep"
alias ls="ls --color=auto"

# ...other stuff...

if [[ ! $TERM =~ screen ]]; then
    exec tmux
fi
_

execは、ターミナルを開いたときに開始するbashプロセスがtmuxによってreplacedされるため、_Ctrl-B D_(つまり、tmuxから切断)は、元のbashプロセスに戻るのではなく、実際にウィンドウを閉じます。

また、ifステートメントが必要です(現在のbashウィンドウがすでにtmuxプロセスにあるかどうかを検出します)。そうしないと、tmuxを起動するたびに、含まれるbashプロセスが独自のtmuxセッションを開始しようとして無限につながります入れ子になったtmuxenの数は、間違いなく非常に迷惑な場合があります(つまり、見た目はクールです)。


ただし、bashを実行するとtmuxプロセスに変わる可能性があるため、他のプログラムが予期しない方法でbashを動作させる可能性がある非常に小さなリスクがあります。端末エミュレータを起動します。

私は小さな実行可能シェルスクリプト_~/bin/terminal_(_~/bin_を_$PATH_で使用しているため、自動的に検出されます)を使用します。

_#!/bin/sh
exec gnome-terminal -e tmux
_

(私はgnome-terminalを使用していないので、execを削除する必要があるかもしれませんが、わかりません。)

これで、terminal sciptを実行するたびに、tmuxを備えた端末ができます。これをメニュー/デスクトップ/キーボードショートカットに追加して、デフォルトのターミナルを置き換えることができます。

(この方法を使用すると、後で必要に応じて、ターミナルエミュレータに関する他のものをより簡単にカスタマイズすることもできます。)

65
huon

元の受け入れられた回答は、最近のアップグレード後にUbuntu14システムで動作しなくなりました。

いずれかを使用

[ -z "$TMUX" ] && command -v tmux > /dev/null && TERM=xterm-256color && exec tmux

または

[ $TERM != "screen" ] && TERM=xterm-256color && exec tmux

ログインすることさえできなくなります。この問題は、コンピューターに2回目の管理者ログインがあるために解決できました。

Ubuntu(およびosxでも)で私が修正したのは、代わりにtmuxを実際に実行するように端末プログラムを変更することでした。

enter image description here

私はまだ持っています

[ `uname -s` != Linux ] && exec tmux

最後の.bashrc行ですが、私のMac OSXシステムで彼だけが使用できるようになりました。

15
Michael Durrant

単一のtmuxセッションが必要な場合は、bashの場合は〜/ .bashrcに、zshの場合は〜/ .zshrcに以下を入力します。

tmux attach &> /dev/null

if [[ ! $TERM =~ screen ]]; then
    exec tmux
fi

tmux attach lineは、接続先のセッションがあるかどうかを確認するためのものであり、セッションがなかった場合、「no session」。

14
K.H.A.

私にとっては、リモートマシンにシェル接続するたびにtmuxが開始され、tmuxをデタッチまたは終了すると、接続が自動的に閉じられるはずです。しばらくこの問題を掘り下げた後、次のコードは私が望むことを正確に実行し、私の知る限りでは最も最適化されていると考えられています。

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session && exit;}

この行がbashrcファイルの最初の行であり、最初にロードされることを確認してください。 execがbashプロセスをtmuxに置き換えた後、接続するセッションがなくても接続が閉じられるため、「tmux attach」の前に「exec」呼び出しを置くことはできません。したがって、接続されたセッションをデタッチまたは終了した後に接続を終了するには、「exit」呼び出しが必要です。ただし、実行する最後のコマンドであるため、new-sessionコマンドの前に「exec」を追加しても問題ありません。

7
huangzonghao

私はこれで始めました https://wiki.archlinux.org/index.php/Tmux#Bash そして、すべてのセッションがすでにアタッチされている場合、切り離されたセッションを取り戻し、新しいセッションを作成するように拡張しました

# .bashrc

case $- in
    *i*)
    if command -v tmux>/dev/null; then
        if [[ ! $TERM =~ screen ]] && [[ -z $TMUX ]]; then
          if tmux ls 2> /dev/null | grep -q -v attached; then
            exec tmux attach -t $(tmux ls 2> /dev/null | grep -v attached | head -1 | cut -d : -f 1)
          else
            exec tmux
          fi
        fi
    fi
    ;;
esac
3
Lee Ballard

キーボードショートカットにしました(UbuntuではなくLinux Mintで、これが簡単かどうかわかりません)...


custom shortcut for tmux terminal


見にくいかもしれませんが、カスタムショートカットgnome-terminal --window --maximize -e tmuxです。これにより、新しいgnome-terminalウィンドウが最大化され、executes tmuxが自動的に開始されます。

さらに、別のカスタムショートカットを使用して、「通常の」gnome-terminal最大化を開始します(-e tmuxなしでも同じです)。

どんな端末でも好きな方法で起動でき、最もカスタマイズ可能な方法なので、これが最良の方法だと思います。

3
dylnmc

次のコード行.bashrcの最後に追加し、

[[ $TERM != "screen" ]] && exec tmux
3
prayagupd

ログインおよびsshセッションでtmuxを有効にするには、これを.bashrcの最後に追加できます。

# enable tmux at login
PNAME="$(ps -o comm= $PPID)";
if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] ; then
  exec tmux
fi

このスクリプトは、bashシェルの親プロセスを探します。ログインまたはsshからbashが起動された場合、tmashが実行されます。これをGUIターミナルで動作させたい場合は、そこに追加することもできます。たとえば、Ubuntuの標準gnome-terminalを起動したときにtmuxを自動的に起動する場合、これを使用します。

PNAME="$(ps -o comm= $PPID)";
if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] || [ $PNAME == "gnome-terminal" ] ; then
  exec tmux
fi

Live Ubuntu Desktopで上記をテストしましたが、その後ログインできました。ログインコマンドを起動してログインしない限り、GUIログインが中断されることはありません。これを実行するLinux GUIを知りません。

2
ekrekeler

Xfce4(私はFedora 24 XFCEスピンを実行していますが、それは素晴らしいです)内で、最も簡単な解決策は、パネルショートカットを編集して実行することです。

xfce4-terminal -e tmux

この同じコマンドを使用して、キーボードアプリケーションのショートカットを置き換えることができます。

以前に.bashrcにifステートメントを挿入しましたが、ログインが失敗しました(正しいパスワードが入力されるたびにログインボックスにループバックします)。

ThunarのOpen Terminal Hereコマンドのコマンドは少し異なります。そのgotoを変更するには:

Thunar>編集>カスタムアクションの構成...>ここでターミナルを開く>編集ボタン

exo-open --working-directory%f --launchTerminalEmulator

with:xfce4-terminal --working-directory%f -e tmux

2
Duncan Betts

端末タイプが256色に正しく設定されていることを確認する1ライナー:

[ -z "$TMUX" ] && export TERM=xterm-256color && exec tmux
1
Michael Durrant

追加はどうですか

# If not running interactively, do not do anything
[[ $- != *i* ]] && return
[[ -z "$TMUX" ]] && exec tmux

あなたの.bashrcに。 zshでも機能します。

https://wiki.archlinux.org/index.php/Tmux#Start_tmux_with_default_session_layout から取得

0
theDrifter