TMUXと端末の色はローカルとSSHによって異なります。

TMUXと端末の色はローカルとSSHによって異なります。

私はlocalhostのtmuxを使ってターミナルで素晴らしいテーマを持つことができる多くのドットファイルを持っています。私はキティ、フィッシュ、tmuxを使用します。色を正しく定義し、全体的な一貫性を維持するために、次のファイルを使用します。

  • .X リソース
  • 子猫のプロフィール
  • fish_tip.fish
  • .tmux.conf

私のローカルホストでは、すべてがとてもきれいに見えます。 ここに画像の説明を入力してください。

また、同じArch + Fish + tmuxを実行し、まったく同じドットファイルを使用するリモートサーバーがあります。しかし、SSH経由でサーバーに接続すると、すべてがまったく異なるように見えます。

ここに画像の説明を入力してください。

Googleで検索してみると、いくつかの奇妙な設定を追加するためのチュートリアルがたくさんありますが、それらのどれも実際に何が起こっているのかを説明していません(そして見てわかるように何も機能しません)。

(実際に理由を理解していないまま)操作しようとした方法は次のとおりです。

  • 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内のlocalhostから:xterm-256color
  • SSHを開いた後、リモートホストから直接:xterm-kitty
  • tmuxのリモートホストから:xterm-256color

すべてのファイルはgitリポジトリを使用して同期され、すべてのバージョンは同じです。terminfoに関連する同じファイルを転送しました。xterm-kittyまた、これスクリプトでは、すべての色が正しく表示され、両方のホストで同じであることがわかります。

また、tmuxなしでリモートシステムにログインすると、異なる色の組み合わせが生成されることも確認しました(どこでも同じ魚プロファイルを使用)。

ここに画像の説明を入力してください。

答え1

default-terminalTERMtmux内でデフォルト値を設定します。に設定しないでくださいxterm-kitty。 tmuxはxtermやkittyではありません。tmux-256colorコンピュータに存在する場合(選択)に設定しinfocmp tmux-256color、そうでない場合に設定しますscreen-256color

TERM同様に、すべての端末のシェル構成ファイルに同じ項目を設定しないでください。

あなたが持っている行は、tmuxに設定をterminal-overrides見ると、端末がTrue(RGB)色をサポートしていることを意味します(それで)。TERMxterm-kittyTc

TERMinside tmux は tmux 内のプログラムに彼らが言う内容 (tmux) を知らせます。TERM外部tmuxは、tmuxに通信しているオブジェクト(この場合はキティ)を知らせます。

ローカルで実行されているがSSHを介して実行されない場合、最も可能性の高いシナリオは次のとおりです。

  • TERM外部tmuxとは異なります。echo $TERMSSHを介してtmuxを起動する直前に、ローカルコンピュータに同じコンテンツが表示されますか?

  • tmux設定は実際には同じではありません。確かですか?ある場所で必要な場合はterminal-overrides別の場所でも必要で、そうでなければ必要ありません。

  • xterm-kittyそれが存在し、両方のコンピュータに同じですか?確認してくださいinfocmp xterm-kitty

  • 他のtmuxバージョン。彼らは同じだと確信していますか?確認してくださいtmux -V

答え2

ローカルコンピュータでtmuxを使用してからリモートコンピュータでsshを実行すると、リモートセッションはインデックスカラー(256色)の代わりに(または追加で)RGBカラーを使用できることを知らせる方法はありません。これは、tmux "Tc"オーバーライドがリモートセッションに表示されないためです。

次の対応する端末の説明を修正することで、この問題を解決できます。基本端末たとえば、使用する設定を追加してtmuxを設定する端末の適用範囲端末と使い方を説明するテキストファイルでtic(各マシンで)コンパイルしてください。たとえば(基本端末はいtmux):

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

ケイティはよくある質問ただし、「-x」は無視されます。infocmp

考慮すべきいくつかの点があります。

  • 生成されたバイナリファイルをコピーします。tic信頼できません(さまざまな理由で)。

  • リモート側に同じ端末記述がある場合、リモートアプリケーションが端末記述を使用すると仮定すると、(より一貫した)動作が得られます。コンテンツ代わりに名前端末の説明。

答え3

問題を解決してみてください!これは、与えられたすべての答えと1つの重要な追加変数を組み合わせたものです。

必要なステップ:

infocmp -x tmux-256color >foo
printf '\tTc,\n' >>foo
tic -x foo
  • set -g fish_term24bit 1魚がTrue Colorモードを使用するように強制するために、私のconfig.fishに追加されました。

関連情報