すでにtmuxにあるtmuxセッションをデタッチする方法は?


118

ローカルマシンでtmuxセッションを開き、リモートマシンにsshしました。この後、リモートマシンで「tmux attach」コマンドを入力し、ローカルtmuxセッションでリモートtmuxセッションを取得しました。

今、私はリモートtmuxセッションをデタッチしたい、私は試しました

C-b d

しかし、リモートセッションではなくローカルtmuxセッションを切り離しました。

リモートtmuxセッションをデタッチするにはどうすればよいですか?

回答:


162
C-b C-b d

(デフォルトのバインディングを想定)

最初のCbは、ローカルのtmuxによって解釈されます(すべてのキーストロークを最初に見るため)。2番目のCbは、ローカルtmuxがアクティブペインにCbを送信するコマンドです。この生成されたCbは、リモートtmuxに到達します。dが地元を通過tmuxは変わりません。リモートtmuxに到達すると、detachコマンドをトリガーします。

  1. あなたはタイプCbは
    ローカルtmuxはそれをプレフィックスキーとして解釈します。ローカルtmuxの下で実行されているプロセスには何も送信されません。
  2. あなたはタイプCbは
    ローカルtmuxには、send-prefixコマンドにバインドされています。
    1. ローカルtmuxは、アクティブなペイン(ssh)で実行されているプロセスにCbを送信します
    2. sshはsshdなどを介して)リモートエンドで実行されているプロセス(リモートtmux)に転送します
      リモートtmuxはこれをプレフィックスキーとして解釈します。リモートtmuxの下で実行されているプロセスには何も送信されません。
  3. あなたはタイプDを
    ローカルtmuxは通常通りに渡します(2番目のCbがローカルtmuxの完全なコマンドキーシーケンスを完了したため)。
    リモートtmuxにバインドされていdetach-clientます。アクティブなクライアントを切り離します。

これは、tmuxセッション内で実行されているプログラムにCbを送信する必要がある場合と同じです。Cbを通常のシェルに送信したい場合(たとえば、シェルがCbのある場所でEmacsスタイルの編集を使用している場合(および矢印キーの使用が嫌いな場合))、Cb Cbを使用してシェルに単一のCbを取得する必要があります。backward-char


8
別の方法としてC-a C-a、最後のアクティブなウィンドウにジャンプするための使用を見てきました。そのような状況ではC-a a d、切り離そうとします。ありがとう!
mkelley33

2
:上記のコンボは、ユーザーのtmux.conf aではなく、キーがバインドされている場合にのみ使用できますb
mkelley33

私の外tmuxのは、使用C-aして内側のC-b、そして私の作品唯一のものがあり、内1から取り外すことができるようにC-a C-b-b d、私は二必要ですなぜ私は得ることはありませんb
ギエムCucurull

デフォルトのキーバインディングがない場合にこのオプションを有効にできるようにするためのリマインダー::コマンドを実行してtmuxコマンドをインタラクティブに実行し、コマンドを介してバインディングを設定できbind-key -n j send-prefixます。この例ではj、プレフィックスを送信するためにバインドしたかった。それ以外の場合は、デイブの答えを使用してください:tmux detachコマンドを使用してください。
nealmcb

46

キーバインディングを正しいtmuxインスタンスにすることを気にせずに行う別の方法tmux detachは、リモートtmuxセッションに入力することです。


8

私は成功せずに最初の答えを試しました。

次の操作を行うことで、必要な結果を得ることができました。

tmux attach

私はtmuxに入って、他のセッションがまだ接続されているのを見ました

そこで、現在のセッションを切り離してシェルに戻りました。 Ctrl + b; d

次に、私は次を発行しました: tmux attach -d

これは、デフォルトのセッションに接続し、現在接続されている他のすべてのセッションを切断することを意味します。クライアントとセッションの manページをご覧ください

attach-session [-dr] [-t target-session](別名:attach)tmuxの外部から実行する場合、現在の端末で新しいクライアントを作成し、それをtarget-sessionに接続します。内部から使用する場合、現在のクライアントを切り替えます。 -dを指定すると、セッションに接続されている他のクライアントはすべて切り離されます。 -rは、クライアントが読み取り専用であることを示します(detach-clientコマンドにバインドされたキーのみが効果を持ちます)。


0

他のオプションを試してみたい場合は、以下の手順に従ってください

  1. で現在のtmuxセッションをデタッチしCtrl+b dます。これで、通常のターミナルコマンドラインプロンプトに移動できます。
  2. を行います tmux ls。現在接続されているセッションを探します
  3. このコマンドを実行して、既に接続されているセッションをデタッチします tmux detach-client -s <attached_session_name>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.