【问题标题】:Nested tmux sessions on local and remote servers本地和远程服务器上的嵌套 tmux 会话
【发布时间】:2017-07-05 12:54:24
【问题描述】:

我正在尝试将 tmux 设置为像这样工作:

  • 本地主机上的外部会话(级别 0),前缀为 C-a
  • 本地主机上的内部会话(级别 1),前缀为 C-b
  • 远程主机上的内部会话(级别 1),前缀为 C-b

所以每个内部会话都直接嵌套在外部会话中。

如果我像这样设置我的.tmux.conf

unbind C-b
set -g prefix C-a
bind-key -n C-b send-prefix

本地内部会话正确接收 C-b 前缀,但远程内部会话没有。

如果我将tmux.conf 更改为:

unbind C-b
set -g prefix C-a

然后远程内部会话收到C-b,但本地会话没有。

有没有办法可以配置 tmux,以便本地和远程嵌套会话都接收 C-b 前缀?

【问题讨论】:

    标签: nested tmux


    【解决方案1】:

    this blog post Tmux 脚本的启发,我找到了解决方案。我把它放在我的本地主机上的 shell 启动脚本(例如 .bashrc)中:

    tmux_outer() {
      SESSION=$1
      tmux -2 new-session -d -s $SESSION
      tmux set prefix C-a
      tmux -2 attach-session -t $SESSION
    }
    
    tmux_inner() {
      SESSION=$1
      env TMUX='' tmux -2 new-session -s $SESSION
    }
    

    并删除了我的 .tmux.conf

    我原来的 .tmux.conf 中的问题:

    unbind C-b
    set -g prefix C-a
    bind-key -n C-b send-prefix
    

    似乎是set -g prefix C-a,它将前缀全局设置为C-a。在我的 shell 函数中,我创建处于分离状态的外部会话,仅为该会话设置前缀为 C-a,然后附加到该会话。

    当我在本地主机或远程主机上启动内部会话时,它具有默认的 tmux 前缀 C-b。由于外部会话没有尝试捕获和发送C-b,因此两个内部会话都可以毫无问题地接收C-b

    【讨论】:

      【解决方案2】:

      tmux 手册说,如果我没看错的话,1)前缀是服务器级别的设置,2)所有会话都由单个服务器管理。这意味着您无法在具有不同前缀的同一主机上获得外部会话和内部会话,除非您使用相应选项作为非默认套接字启动多个服务器,并为第二个服务器使用另一个配置。

      另外,使用 GNU screen 代替 tmux 更容易。它允许以更简单的方式在命令行中指定前缀和无限的服务器数量。

      更新[2017-07-05]:现代 tmux 有足够的每个会话配置,包括开关前缀,尽管有点麻烦。

      【讨论】:

        猜你喜欢
        • 2020-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-26
        • 1970-01-01
        • 2023-04-10
        • 2019-09-03
        相关资源
        最近更新 更多