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 以強制魚使用真彩色模式。

相關內容