TMUX とターミナルの色はローカルと SSH で同じではありません

TMUX とターミナルの色はローカルと SSH で同じではありません

ローカル ホストのターミナルと tmux に美しいテーマを適用できるドットファイルがたくさんあります。私は kitty、fish、tmux を使用しています。色を適切に定義し、全体的な一貫性を保つために、次のファイルを使用しています。

  • .Xresoures
  • キティ.conf
  • 魚プロンプト.魚
  • .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内のローカルホスト上:xterm-256color
  • ssh を開いた直後のリモート ホストで:xterm-kitty
  • tmux のリモートホスト上:xterm-256color

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

また、tmux を使用せずにリモート マシンにログインすると、さらに別の色の組み合わせが生成されることにも気付きました (どこでも同じ fish 構成ファイルが使用されています)。

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

答え1

default-terminaltmux 内のデフォルトを設定しますTERM。これを - に設定しないでください。tmuxは xterm や kitty ではありません。コンピュータ上に存在する場合は に設定し ( をチェック)、存在しない場合は にxterm-kitty設定します。tmux-256colorinfocmp tmux-256colorscreen-256color

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

この行は、に設定されている場合はターミナルが真の (RGB) カラーをサポートしていることを意味するterminal-overridesことを tmux に伝えます(したがって)。TERMxterm-kittyTc

TERMtmux の内部では、tmux 内のプログラムに、何と通信しているか (tmux) を伝えます。tmuxTERMの外部では、tmux に何と通信しているか (この場合は kitty) を伝えます。

ローカルでは動作するが、ssh 経由では動作しない場合は、次のようなことが考えられます。

  • tmux の外部では異なります。ローカル コンピューターと SSH 経由の両方で tmux を起動する直前に同じ内容が表示されることをTERM確認しましたか?echo $TERM

  • 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 1fish に trucolor モードを強制的に使用させるために、config.fish に追加します。

関連情報