¿Cómo separar una sesión tmux que ya está en un tmux?

118

He abierto una sesión tmux en mi máquina local y ssh en la máquina remota. Después de esto, escribí el comando "tmux attach" en la máquina remota, luego obtuve una sesión tmux remota en mi sesión tmux local.

Ahora quiero separar la sesión remota de tmux, he intentado

C-b d

pero separó mi sesión tmux local en lugar de la remota.

¿Cómo puedo separar la sesión remota de tmux?

superadmin
fuente

Respuestas:

162
C-b C-b d

(suponiendo enlaces predeterminados)

El primer Cb es interpretado por su tmux local (porque es el primero en ver todas sus pulsaciones de teclas). El segundo Cb es un comando que hace que su tmux local envíe un Cb a su panel activo; Este Cb generado llega al tmux remoto . La d pasa a través del tmux local sin cambios; cuando llega al tmux remoto , activa el detachcomando.

  1. Se escribe Cb .
    Su tmux local lo interpreta como la clave de prefijo; no se envía nada a los procesos que se ejecutan bajo el tmux local .
  2. Se escribe Cb .
    Su tmux local lo tiene vinculado al send-prefixcomando.
    1. Su tmux local envía un Cb al proceso que se ejecuta en el panel activo ( ssh ).
    2. ssh lo reenvía (a través de sshd , etc.) al proceso que se ejecuta en el extremo remoto ( tmux remoto ).
      Su tmux remoto lo interpreta como la clave de prefijo; no se envía nada a los procesos que se ejecutan bajo el tmux remoto .
  3. Escribe d .
    Su tmux local lo pasa normalmente (ya que el segundo Cb terminó una secuencia de teclas de comando completa para el tmux local ).
    Su tmux remoto lo tiene obligado detach-client; separa al cliente activo.

Esto es lo mismo que cuando necesita enviar un Cb a cualquier programa que se ejecute dentro de una sesión tmux . Si desea enviar Cb a su shell normal (por ejemplo, porque su shell está utilizando la edición de estilo Emacs donde está Cbbackward-char (y no le gusta usar las teclas de flecha)), necesitaría usar Cb Cb para obtener un solo Cb en el shell.

Chris Johnsen
fuente
8
Alternativamente, he visto con frecuencia el uso de C-a C-asaltar a la última ventana activa. En tales circunstancias, intente C-a a dsepararse. ¡Gracias!
mkelley33
2
Nota : el combo que menciono anteriormente solo estaría disponible si la aclave está enlazada en lugar de ben tmux.conf del usuario.
mkelley33
Mi tmux externo usa C-ay el interno C-b, y para poder separarme del interno, lo único que funciona para mí es C-a C-b-b d, pero no entiendo por qué necesito el segundob
Guillem Cucurull
Solo un recordatorio para permitir que la gente habilite esta opción si no tienen combinaciones de teclas predeterminadas: puede ejecutar el :comando para ejecutar un comando tmux de forma interactiva y luego configurar un enlace a través del bind-key -n j send-prefixcomando. En este ejemplo, quería vincular jpara enviar el prefijo. De lo contrario, use la respuesta de Dave: use el tmux detachcomando.
nealmcb
47

Otra forma de hacerlo sin preocuparse de que las combinaciones de teclas lleguen a la instancia correcta de tmux es escribir tmux detachla sesión remota de tmux.

Dave Wongillies
fuente
8

Intenté la primera respuesta sin éxito.

Pude obtener los resultados que quería haciendo lo siguiente:

tmux attach

Entré en tmux y vi que la otra sesión todavía estaba adjunta

Así que separé mi sesión actual para volver a un shell: Ctrl + b; d

Luego emití lo siguiente: tmux attach -d

Esto dice adjuntar a la sesión predeterminada y desconectar todas las demás sesiones actualmente adjuntas. Vea la página del manual en Clientes y Sesiones

attach-session [-dr] [-t target-session] (alias: attach) Si se ejecuta desde fuera de tmux, cree un nuevo cliente en el terminal actual y conéctelo a target-session. Si se usa desde adentro, cambie el cliente actual. Si se especifica -d, cualquier otro cliente conectado a la sesión se desconecta. -r significa que el cliente es de solo lectura (solo las teclas vinculadas al comando detach-client tienen algún efecto)

poli
fuente
0

Si desea probar otra opción, siga los pasos a continuación.

  1. separe la sesión actual de tmux con Ctrl+b d. Para que ahora vaya a la línea de comando de terminal normal.
  2. Hacer un tmux ls. Busque la sesión que está adjunta actualmente
  3. Ejecute este comando para separar la sesión ya adjunta tmux detach-client -s <attached_session_name>
RAM
fuente