Une situation typique peut être:
$ tmux
[0] $ ssh example.com
$ tmux attach
[0] $
J'ouvre une session tmux, puis ssh dans un serveur et attache à une session tmux existante. À ce stade, j'ai une session tmux dans une autre. Comment envoyer des commandes à la session tmux interne?
Remarque: Les deux sessions tmux ont les mêmes liaisons de touches.
La commande send-prefix
Peut être utilisée pour envoyer votre séquence de touches de préfixe (le processus s'exécutant dans) le volet actif. Par défaut, le préfixe est Cb et Cb est lié à send-prefix
(De sorte que le frapper deux fois envoie un seul Cb à le volet actif). C'est exactement ce dont nous avons besoin pour accéder aux liaisons de l'instance interne tmux .
La première C-b est capturée par l'instance "externe" tmux comme clé de préfixe. La seconde est capturée par l'instance "externe" tmux et déclenche sa liaison Cb (send-prefix
) . Cela envoie un C-b au volet actif de l'instance externe. Le processus en cours d'exécution dans ce volet est (en fin de compte, par le biais d'une instance ssh ) "intérieur" tmux instance. Il capture le C-b comme clé de préfixe. Maintenant, votre prochaine frappe sera passée à travers l'instance tmux externe et capturée par celle interne pour déclencher une liaison.
Pour déclencher la liaison c (new-window
) Dans une instance de second niveau de tmux , vous devez taper Cb Cb c. Pour une instance de troisième niveau de tmux , vous devez taper C-b C-b C-b C-b c.
Ce doublement pour chaque niveau peut être gênant si vous avez souvent affaire à plusieurs couches de tmux . Si vous pouvez épargner une autre clé, vous pouvez créer une liaison non préfixée pour faciliter (éventuellement) la saisie:
bind-key -n C-\ send-prefix
bind-key -n C-^ send-prefix \; send-prefix
Créer une nouvelle fenêtre au deuxième niveau tmux : C-\c
Créer une nouvelle fenêtre au troisième niveau tmux : C- ^ c (ou C -\C-\c)
Si vous avez un nombre limité de commandes tmux que vous souhaitez envoyer (facilement) au niveau inférieur tmux , vous pouvez utiliser à la place send-keys
pour créer des liaisons spécifiques (éventuellement juste dans votre niveau supérieur tmux exemple):
bind-key C-c send-keys C-b c
bind-key C send-keys C-b C-b c
Créer une nouvelle fenêtre au deuxième niveau tmux : C-b C-c
Créer une nouvelle fenêtre au troisième niveau tmux : C-b C
Pour accéder à l'intérieur, maintenez le contrôle et appuyez deux fois sur B.
MODIFIER:
Je ne [~ # ~] pas [~ # ~] recommande l'utilisation C-q
comme clé de liaison, car il s'agit d'une commande de touche de contrôle par défaut pour
débloque l'écran et permet à l'écran de continuer
Une situation se produit ici , et @Paschalis fournit une solution:
s'il s'avère que c'est deux fois malchanceux (une session tmux distante avec C-q comme préfixe): Tapez
Cltr-q
, puis:
, et entrez dans tmux:send-keys C-q
Pour faire simple, ajoutez la ligne ci-dessous dans votre ~/.tmux.conf
bind-key -n C-q send-prefix
Ensuite, vous pouvez directement utiliser C-q
comme clé de liaison pour votre tmux distant.