Tmux

TMUX和終端顏色在本地和ssh上不一樣

  • April 14, 2020

我有一堆點文件,可以讓我在我的終端上擁有一個漂亮的主題,在我的本地主機上擁有 tmux。我使用小貓、魚和 tmux。為了正確定義顏色並具有全域一致性,我使用以下文件:

  • .X 資源
  • 小貓.conf
  • fish_prompt.fish
  • .tmux.conf

在我的本地主機上,一切看起來都很乾淨: 在此處輸入圖像描述

我還有一個遠端伺服器,它執行相同的 arch + fish + tmux 並使用完全相同的點文件。然而,當 SSH-ing 進入伺服器時,一切看起來完全不同:

在此處輸入圖像描述

我有Google,有很多教程告訴你添加一堆奇怪的配置,但沒有一個真正解釋引擎蓋下真正發生的事情(而且,如你所見,它們都沒有工作)。

這是我試圖做的事情(沒有真正理解為什麼):

  • 添加到 tmux.conf :
set^[[3m -g default-terminal "xterm-kitty"
set-option^[[3m -ga terminal-overrides ",xterm-kitty*:Tc"
  • 添加了 xterm-kitty terminfo 文件
  • 登錄時將 env 變數更改TERM為 xterm-kitty

我很想有一些資源來指出這一切是如何運作的!謝謝!

編輯 :

為清楚起見,以下是TERMI have 的值:

  • 在本地主機上:xterm-kitty
  • 在 tmux 內的本地主機上:xterm-256color
  • 打開 ssh 後直接在遠端主機上:xterm-kitty
  • 在 tmux 的遠端主機上:xterm-256color

所有文件都使用 git repo 同步,所有版本都是相同的。我已經在兩台主機上傳輸了相同的terminfo文件。xterm-kitty此外,使用腳本,我可以看到所有顏色在兩台主機上都正確顯示並且相同。

我還注意到在沒有 tmux 的情況下登錄遠端機器會產生另一種顏色組合(到處都使用相同的魚配置文件):

在此處輸入圖像描述

default-terminal``TERM在 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) 對話。TERMtmux 外部告訴 tmux 它正在與什麼對話(在本例中為 kitty)。

如果它在本地工作但不能通過 ssh 工作,那麼最可能的情況是:

  • 不同TERM的外部 tmux。您確定echo $TERM在本地電腦和 ssh 上啟動 tmux 之前立即顯示相同的內容嗎?
  • tmux 配置實際上並不相同,您確定它們是相同的嗎?如果你需要terminal-overrides在一個地方,你會在另一個地方需要它,如果沒有,那麼你就不需要。
  • 您確定xterm-kitty在兩台電腦上都存在並且相同嗎?檢查infocmp xterm-kitty
  • 不同的 tmux 版本。你確定它們是一樣的嗎?檢查tmux -V

如果您在本地機器上使用 tmux,然後執行 ssh 到遠端機器,遠端會話無法判斷您可以使用 RGB 顏色代替(或除)索引(256 -顏色)。這是因為遠端會話看不到 tmux “Tc” 覆蓋。

您可以通過修改與tmux的預設終端設置相對應的終端描述來解決此問題,例如,通過將與**終端覆蓋一起使用的任何設置添加到終端描述的文本文件中,並使用**tic它來編譯它(在每台機器)。例如(如果預設終端tmux**):

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

Kitty 有一個FAQ,但它忽略了infocmp.

還有幾點需要考慮:

  • 複製由創建的二進製文件**tic**是不可靠的(原因不止一個)。
  • 如果在遠端端有相同的終端描述,您將獲得(更)一致的行為,假設遠端應用程序使用終端描述內容而不是終端描述的名稱

引用自:https://unix.stackexchange.com/questions/579157