Comment détacher une session tmux qui se trouve déjà dans un tmux?

118

J'ai ouvert une session tmux sur ma machine locale et ssh sur la machine distante. Après cela, j’ai tapé la commande "tmux attach" sur la machine distante, puis j’ai eu une session tmux distante sur ma session tmux locale.

Maintenant, je veux détacher la session distante tmux, j'ai essayé

C-b d

mais il a détaché ma session tmux locale plutôt que la session distante.

Comment puis-je détacher le tmux sesstion distant?

superadmin
la source

Réponses:

162
C-b C-b d

(en supposant des liaisons par défaut)

Le premier Cb est interprété par votre tmux local (car il est le premier à voir toutes vos frappes au clavier). Le second Cb est une commande qui amène votre tmux local à envoyer un Cb à son volet actif; ce Cb généré arrive au tmux distant . Le d traverse le tmux local sans changement; quand il arrive au tmux distant, il déclenche la detachcommande.

  1. Vous tapez Cb .
    Votre tmux local l' interprète comme la clé de préfixe; rien n'est envoyé aux processus s'exécutant sous le tmux local .
  2. Vous tapez Cb .
    Votre tmux local l’ a lié à la send-prefixcommande.
    1. Votre tmux local envoie un Cb au processus exécuté dans le volet actif ( ssh ).
    2. ssh le transmet (via sshd , etc.) au processus en cours d'exécution sur l'extrémité distante ( tmux distant ).
      Votre tmux distant l’ interprète comme la clé de préfixe; rien n'est envoyé aux processus s'exécutant sous le tmux distant .
  3. Vous tapez d .
    Votre tmux local le transmet normalement (puisque le second Cb a terminé une séquence de touches de commande complète pour le tmux local ).
    Votre tmux distant est lié à detach-client; il détache le client actif.

C'est la même chose que lorsque vous devez envoyer un Cb à un programme exécuté dans une session tmux . Si vous voulez envoyer Cb à votre shell normal (par exemple parce que votre shell utilise l'édition de style Emacs où Cb est backward-char(et que vous n'aimez pas utiliser les touches fléchées)), vous devez utiliser Cb Cb pour obtenir un seul Cb sur le shell.

Chris Johnsen
la source
8
Alternativement, j'ai souvent vu l'utilisation de C-a C-apour passer à la dernière fenêtre active. Dans de telles circonstances, essayez C-a a dde vous détacher. Merci!
mkelley33
2
Remarque : la liste que je mentionne ci-dessus ne serait disponible que si la aclé est liée au lieu de btmux.conf de l'utilisateur.
mkelley33
Mon tmux externe utilise C-aet le interne C-b, et pour pouvoir me détacher du interne, la seule chose qui fonctionne pour moi est C-a C-b-b d, mais je ne comprends pas pourquoi j'ai besoin du secondb
Guillem Cucurull
Juste un rappel pour autoriser les personnes à activer cette option si elles ne disposent pas de liaisons de clé par défaut: vous pouvez exécuter la :commande pour exécuter une commande tmux de manière interactive, puis configurer une liaison via la bind-key -n j send-prefixcommande. Dans cet exemple, je voulais lier jpour envoyer le préfixe. Sinon, utilisez la réponse de Dave: utilisez la tmux detachcommande.
nealmcb
47

Une autre façon de le faire sans se soucier des liaisons de clé pour accéder à la bonne instance de tmux consiste à taper tmux detachla session tmux distante.

Dave Wongillies
la source
8

J'ai essayé la première réponse sans succès.

J'ai pu obtenir les résultats souhaités en procédant comme suit:

tmux attach

Je suis entré dans tmux et j'ai vu que l'autre session était toujours attachée

J'ai donc détaché ma session en cours pour revenir à un shell: Ctrl + b; d

Puis j'ai publié ce qui suit: tmux attach -d

Cela signifie d'attacher à la session par défaut et de détacher toutes les autres sessions actuellement attachées. Voir la page de manuel sous Clients et sessions

attach-session [-dr] [-t target-session] (alias: attach) S'il est exécuté hors de tmux, créez un nouveau client dans le terminal actuel et attachez-le à target-session. S'il est utilisé de l'intérieur, changez le client actuel. Si -d est spécifié, tous les autres clients attachés à la session sont détachés. -r signifie que le client est en lecture seule (seules les touches liées à la commande detach-client ont un effet)

policier
la source
0

Si vous souhaitez essayer une autre option, suivez les étapes ci-dessous.

  1. détachez la session tmux en cours avec Ctrl+b d. Alors que vous allez maintenant à l’invite de ligne de commande du terminal normal.
  2. Faire un tmux ls. Rechercher la session actuellement attachée
  3. Exécutez cette commande pour détacher la session déjà attachée tmux detach-client -s <attached_session_name>
RAM
la source