web-dev-qa-db-fra.com

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

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 serveur distant tmux?

101
superadmin
C-b C-b d

(en supposant des liaisons par défaut)

Le premier C-b est interprété par votre tmux local (car il est le premier à afficher toutes vos frappes au clavier). Le second C-b est une commande qui force votre tmux local à envoyer un C-b à son volet actif; ceci généré C-b arrive à la télécommande tmux. Le d passe par le tmux local inchangé; quand il arrive à tmux distant, il déclenche la commande detach.

  1. Vous tapez C-b .
    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 C-b .
    Votre tmux local est lié à la commande send-prefix.
    1. Votre tmux local envoie un C-b au processus exécuté dans le volet actif (ssh).
    2. ssh le transmet (par le biais de sshd, etc.) au processus exécuté sur le serveur distant (remote tmux).
      Votre télécommande tmux 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 C-b 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 C-b à tout programme exécuté dans une session tmux. Si vous vouliez 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 de direction), vous devrez utiliser Cb Cb pour obtenir un seul Cb au shell.

146
Chris Johnsen

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 detach dans la session tmux distante.

43
Dave Wongillies

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

Ensuite, j'ai émis 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 session-cible] (alias: attach) S'il est exécuté hors de tmux, créez un nouveau client dans le terminal actuel et associez-le à la session-cible. 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 clés liées à la commande detach-client ont un effet)

8
bobby

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

  1. détachez la session tmux en cours avec Ctrl+b d. Pour que vous passiez maintenant à l'invite de la ligne de commande normale du terminal.
  2. Faites 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>
0
Ram