TMUX 和终端颜色在本地和通过 ssh 不同

TMUX 和终端颜色在本地和通过 ssh 不同

我有一堆点文件,可以让我在终端上有一个漂亮的主题,在本地主机上有 tmux。我使用 kitty、fish 和 tmux。为了正确定义颜色并具有全局一致性,我使用以下文件:

  • .X资源
  • 小猫配置文件
  • 鱼_提示.fish
  • .tmux.conf

在我的本地主机上,一切看起来都非常干净: 在此输入图像描述

我还有一个远程服务器,它运行相同的 arch + Fish + tmux 并使用完全相同的点文件。然而,当通过 SSH 连接到服务器时,一切看起来完全不同:

在此输入图像描述

我在谷歌上搜索了一下,有很多教程告诉你添加一堆奇怪的配置,但没有一个真正解释幕后到底发生了什么(而且,正如你所看到的,它们都不起作用)。

这是我试图让它发挥作用的方法(没有真正理解为什么):

  • 添加到 tmux.conf :
set^[[3m -g default-terminal "xterm-kitty"
set-option^[[3m -ga terminal-overrides ",xterm-kitty*:Tc"
  • 添加了 xterm-kitty terminfo 文件
  • TERM登录时将环境变量更改为 xterm-kitty

我希望有一些资源来指出这一切是如何运作的!谢谢!

编辑 :

TERM为了清楚起见,以下是我拥有的值:

  • 在本地主机上:xterm-kitty
  • 在 tmux 内的本地主机上:xterm-256color
  • 打开 ssh 后直接在远程主机上:xterm-kitty
  • 在 tmux 中的远程主机上:xterm-256color

所有文件均使用 git 存储库同步,所有版本均相同。我已在两台主机上传输了terminfo与相关的相同文件。xterm-kitty另外,使用脚本中,我可以看到所有颜色都正确显示并且在两台主机上都相同。

我还注意到,在没有 tmux 的情况下登录远程计算机会产生另一种颜色组合(到处使用相同的鱼配置文件):

在此输入图像描述

答案1

default-terminalTERM设置tmux 内的默认值。不要将其设置为xterm-kitty- tmux 不是 xterm 或 kitty。tmux-256color如果您的计算机上存在,则将其设置为(选中infocmp tmux-256color),否则screen-256color

同样,不要TERM在 shell 配置文件中为所有终端设置相同的内容。

您所拥有的行terminal-overrides告诉 tmux,当它看到TERM设置时xterm-kitty,意味着终端支持真(RGB)颜色(因此Tc)。

TERMinside tmux 告诉 tmux 内部的程序它们正在与什么(tmux)交谈。TERM外部 tmux 告诉 tmux 它正在与什么对象通信(在本例中为 kitty)。

如果它在本地运行但不能通过 ssh 运行,那么最可能的情况是:

  • TERM与外部 tmux不同。您确定echo $TERM在本地计算机上和通过 ssh 启动 tmux 之前立即显示相同的内容吗?

  • tmux 配置实际上并不相同,您确定它们是相同的吗?如果你terminal-overrides在一个地方需要,那么在另一个地方也需要它,如果不需要,那么你就不需要。

  • 您确定xterm-kitty两台计算机上都存在并且相同吗?查看infocmp xterm-kitty

  • 不同的 tmux 版本。你确定它们是一样的吗?查看tmux -V

答案2

如果您在本地计算机上使用 tmux,然后运行 ​​ssh 到远程计算机,则远程会话无法告诉您可以使用 RGB 颜色来代替(或补充)索引颜色 (256 -颜色)。这是因为 tmux“Tc”覆盖对远程会话不可见。

您可以通过修改对应于的终端描述来解决此问题默认终端tmux 的设置,例如,通过添加您使用的任何设置终端覆盖到终端描述的文本文件,并使用tic编译它(在每台机器上)。例如(如果默认终端tmux):

infocmp -x tmux >foo
printf '\tTc,\n' >>foo
tic -x foo

凯蒂有一个常问问题,但它忽略了“-x”infocmp

还有几点需要考虑:

  • 复制创建的二进制文件tic不可靠(出于不止一个原因)。

  • 如果远程端有相同的终端描述,假设远程应用程序使用终端描述,您将获得(更)一致的行为内容而不是姓名终端描述。

答案3

设法修复它!这是给出的所有答案的组合,还有一个重要的额外变量。

所需步骤:

infocmp -x tmux-256color >foo
printf '\tTc,\n' >>foo
tic -x foo
  • 添加set -g fish_term24bit 1到我的 config.fish 以强制鱼使用真彩色模式。

相关内容