Como desanexar uma sessão tmux que já está em um tmux?


118

Abri uma sessão tmux na minha máquina local e ssh na máquina remota. Depois disso, digitei o comando "tmux attach" na máquina remota e recebi uma sessão remota do tmux na minha sessão local do tmux.

Agora eu quero desanexar a sessão remota do tmux, tentei

C-b d

mas desanexou minha sessão local do tmux em vez da remota.

Como posso desanexar a sessão remota do tmux?

Respostas:


162
C-b C-b d

(assumindo ligações padrão)

O primeiro Cb é interpretado pelo seu tmux local (porque é o primeiro a ver todas as suas teclas). O segundo Cb é um comando que faz com que o tmux local envie um Cb para o painel ativo; este Cb gerado chega ao tmux remoto . O d passa pelo tmux local inalterado; quando chega ao tmux remoto , dispara o detachcomando.

  1. Você digita Cb .
    O tmux local o interpreta como a chave do prefixo; nada é enviado para os processos em execução no tmux local .
  2. Você digita Cb .
    Seu tmux local está vinculado ao send-prefixcomando.
    1. Seu tmux local envia um Cb para o processo em execução no painel ativo ( ssh ).
    2. O ssh o encaminha (através do sshd , etc.) para o processo em execução no terminal remoto ( tmux remoto ).
      Seu tmux remoto o interpreta como a chave de prefixo; nada é enviado para os processos em execução no tmux remoto .
  3. Você digita d .
    Seu tmux local o passa normalmente (desde que o segundo Cb concluiu uma sequência completa de teclas de comando para o tmux local ).
    Seu tmux remoto está vinculado a detach-client; desanexa o cliente ativo.

É o mesmo que quando você precisa enviar um Cb para qualquer programa em execução dentro de uma sessão do tmux . Se você deseja enviar Cb para seu shell normal (por exemplo, porque seu shell está usando a edição no estilo Emacs, onde Cb está backward-char(e você não gosta de usar as teclas de seta)), seria necessário usar Cb Cb para obter um único Cb para o shell.


8
Como alternativa, tenho visto frequentemente o uso de C-a C-apara pular para a última janela ativa. Sob tais circunstâncias, tente C-a a ddesconectar. Obrigado!
mkelley33

2
Nota : o combo que eu mencionei acima só estaria disponível se a achave estiver vinculada em vez de bno tmux.conf do usuário.
mkelley33

Meu tmux externo usa C-ae o interno C-b, e para poder separar do interno a única coisa que funciona para mim é C-a C-b-b d, mas não entendo por que preciso do segundob
Guillem Cucurull

Apenas um lembrete para permitir que as pessoas habilitem essa opção se elas não tiverem :ligações de teclas padrão: você pode executar o comando para executar um comando tmux interativamente e, em seguida, configurar uma ligação por meio do bind-key -n j send-prefixcomando. Neste exemplo, eu queria ligar jpara enviar o prefixo. Caso contrário, use a resposta de Dave: use o tmux detachcomando
nealmcb 10/07

47

Outra maneira de fazer isso sem se preocupar com as combinações de teclas que estão na instância correta do tmux é digitar tmux detacha sessão remota do tmux.


8

Eu tentei a primeira resposta sem sucesso.

Consegui os resultados desejados, fazendo o seguinte:

tmux attach

Entrei no tmux e vi a outra sessão ainda estava anexada

Então, desanexei minha sessão atual para retornar ao shell: Ctrl + b; d

Então eu emiti o seguinte: tmux attach -d

Isso diz para anexar à sessão padrão e desanexar todas as outras sessões atualmente anexadas. Consulte a página do manual em Clientes e sessões

attach-session [-dr] [-t target-session] (também conhecido por: attach) Se executado a partir do tmux externo, crie um novo cliente no terminal atual e anexe-o à sessão de destino. Se usado de dentro, alterne o cliente atual. Se -d for especificado, quaisquer outros clientes conectados à sessão serão desanexados. -r significa que o cliente é somente leitura (apenas chaves vinculadas ao comando desanexar-cliente têm algum efeito)


0

Se você quiser tentar outra opção, siga as etapas abaixo

  1. desanexe a sessão atual do tmux com Ctrl+b d. Para que você agora vá para o prompt normal da linha de comando do terminal.
  2. Faça um tmux ls. Procure a sessão atualmente anexada
  3. Execute este comando para desanexar a sessão já anexada tmux detach-client -s <attached_session_name>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.