64

tmux毎回入力する代わりに、新しいセッションウィンドウに常に使用できるようにするにはどうすればtmuxよいでしょうか。

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

.bashrcある種のことのように思えますか?

4

11 に答える 11

69

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

その警告を考えると、最も簡単な解決策は、tmux呼び出しをあなたの最後に.bashrc追加することです。

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

# ...other stuff...

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

execターミナルを開いたときに開始するbashプロセスがに置き換えられることtmuxを意味することに注意してくださいCtrl-B D(つまり、tmuxから切断する)と、元のbashプロセスに戻るのではなく、実際にウィンドウが閉じます。これはおそらくあなたが望む動作ですか?

また、ifステートメントが必要です(現在のbashウィンドウがすでにtmuxプロセスにあるかどうかを検出します)。そうでない場合、tmuxを開始するたびに、含まれているbashプロセスが独自のtmuxセッションを開始しようとし、ネストされたtmuxenの数が無限になります。えーと、かなり迷惑になる可能性があります(とはいえ、見た目はかっこいいです)。


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

次のような小さな実行可能シェルスクリプトを使用します~/bin/terminal(で~/bin$PATHであるため、自動的に検出されます)。

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

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

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

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

于 2012-06-17T05:25:51.867 に答える
17

私の元の受け入れられた答えは、最近のアップグレード後に私のUbuntu14システムで動作を停止しました。

いずれかを使用

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

また

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

ログインすらできなくなります。これを解決できたのは、コンピューターに2回目の管理者ログインがあったためです。

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

ここに画像の説明を入力してください

私はまだ持っています

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

私の最後の.bashrc行として、しかしそれは私のMacOSXシステムのためだけになりました。

于 2015-04-22T10:24:27.713 に答える
14

単一のtmuxセッションが必要な場合は、bashの場合は〜/ .bashrcに、 zshの場合は〜/.zshrcに次のように記述します。

tmux attach &> /dev/null

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

tmux attachは、それが接続するセッションがあるかどうかを確認することであり、セッションがなかった場合は、「セッションなし」に関する警告は表示されません。

于 2014-04-02T19:21:24.800 に答える
9

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

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

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

于 2016-08-28T04:50:26.123 に答える
3

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

[[ $TERM != "screen" ]] && exec tmux
于 2014-01-08T17:48:29.370 に答える
3

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


tmuxターミナルのカスタムショートカット


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

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

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

于 2015-06-07T09:23:04.077 に答える
3

私はこの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
于 2017-02-20T18:18:58.173 に答える
2

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

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

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

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

上記をLiveUbuntuデスクトップでテストし、その後ログインすることができました。ログインコマンドを呼び出してログインしない限り、これによってGUIログインが中断されることはありません。これを実行するLinuxGUIを認識していません。

于 2016-02-01T21:13:15.010 に答える
2

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

xfce4-terminal -e tmux

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

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

ThunarのOpenTerminalHereコマンドのコマンドは少し異なります。その後藤を変更するには:

Thunar>編集>カスタムアクションの設定...>ここでターミナルを開き>[編集]ボタンをクリックして、次を置き換えます。

exo-open --working-directory%f --launch TerminalEmulator

使用:xfce4-terminal --working-directory%f -e tmux

于 2016-10-29T15:29:57.340 に答える
1

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

[ -z "$TMUX" ] && export TERM=xterm-256color && exec tmux
于 2014-06-12T11:47:23.613 に答える
0

追加してみませんか

# 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から取得

于 2015-05-02T09:14:57.477 に答える