TMUX- und Terminalfarben sind lokal und über SSH nicht gleich

TMUX- und Terminalfarben sind lokal und über SSH nicht gleich

Ich habe eine Reihe von Dotfiles, die es mir ermöglichen, ein hübsches Design auf meinem Terminal und tmux auf meinem lokalen Host zu haben. Ich verwende Kitty, Fish und tmux. Um Farben richtig zu definieren und eine globale Kohärenz zu erreichen, verwende ich die folgenden Dateien:

  • .XRessourcen
  • kitty.conf
  • fish_prompt.fisch
  • .tmux.conf

Auf meinem lokalen Host sieht alles wirklich sauber aus: Bildbeschreibung hier eingeben

Ich habe auch einen Remote-Server, auf dem dasselbe Arch + Fish + Tmux läuft und der genau dieselben Dotfiles verwendet. Wenn ich mich jedoch per SSH mit dem Server verbinde, sieht alles völlig anders aus:

Bildbeschreibung hier eingeben

Ich habe gegoogelt und bin auf viele Tutorials gestoßen, in denen man aufgefordert wird, eine Reihe merkwürdiger Konfigurationen hinzuzufügen. In keinem wird jedoch erklärt, was im Hintergrund wirklich passiert (und wie Sie sehen, hat keines davon funktioniert).

So habe ich versucht, es zum Laufen zu bringen (ohne wirklich zu verstehen, warum):

  • Zu tmux.conf hinzugefügt:
set^[[3m -g default-terminal "xterm-kitty"
set-option^[[3m -ga terminal-overrides ",xterm-kitty*:Tc"
  • Die xterm-kitty-Terminfo-Datei wurde hinzugefügt
  • Ändern Sie die TERMUmgebungsvariable beim Anmelden in xterm-kitty

Ich würde mich über einige Ressourcen freuen, die zeigen, wie das alles funktioniert! Danke!

Bearbeiten :

Der Übersichtlichkeit halber sind hier die Werte, die TERMich habe:

  • Auf dem lokalen Host:xterm-kitty
  • Auf dem lokalen Host innerhalb von tmux:xterm-256color
  • Auf dem Remote-Host direkt nach dem Öffnen von SSH:xterm-kitty
  • Auf dem Remote-Host in tmux:xterm-256color

Alle Dateien werden über ein Git-Repo synchronisiert, alle Versionen sind identisch. Ich habe die gleiche terminfoDatei auf xterm-kittybeide Hosts übertragen. Außerdem mitDasSkript kann ich sehen, dass alle Farben richtig angezeigt werden und auf beiden Hosts identisch sind.

Mir ist auch aufgefallen, dass die Anmeldung beim Remote-Computer ohne tmux eine weitere Farbkombination ergibt (überall wird die gleiche Fish-Konfigurationsdatei verwendet):

Bildbeschreibung hier eingeben

Antwort1

default-terminallegt den Standardwert TERMinnerhalb von tmux fest. Setzen Sie dies nicht auf xterm-kitty- tmux ist nicht xterm oder kitty. Setzen Sie es auf tmux-256color, wenn es auf Ihrem Computer vorhanden ist (aktivieren Sie infocmp tmux-256color), andernfalls screen-256color.

Ebenso sollten Sie in Shell-Profilen nicht TERMfür alle Terminals das Gleiche festlegen.

Die terminal-overridesZeile, die Sie haben, teilt tmux mit, dass, wenn es TERMdie Einstellung sieht xterm-kitty, das Terminal echte (RGB-)Farben unterstützt (daher Tc).

TERMInnerhalb von tmux wird den Programmen innerhalb von tmux mitgeteilt, mit wem sie kommunizieren (tmux). TERMAußerhalb von tmux wird tmux mitgeteilt, mit wem es kommuniziert (in diesem Fall mit Kitty).

Wenn es lokal, aber nicht über SSH funktioniert, sind die wahrscheinlichsten Gründe:

  • Außerhalb von tmux anders TERM. Sind Sie sicher, dass echo $TERMunmittelbar vor dem Start von tmux auf Ihrem lokalen Computer und über SSH dasselbe angezeigt wird?

  • Die tmux-Konfigurationen sind nicht wirklich gleich. Sind Sie sicher, dass sie es sind? Wenn Sie es terminal-overridesan einer Stelle brauchen, brauchen Sie es auch an der anderen, wenn nicht, dann nicht.

  • Sind Sie sicher, xterm-kittydass es auf beiden Computern vorhanden ist und dasselbe ist? Überprüfen Sie es infocmp xterm-kitty.

  • Unterschiedliche tmux-Versionen. Sind Sie sicher, dass sie gleich sind? Überprüfen Sie tmux -V.

Antwort2

Wenn Sie tmux auf dem lokalen Computer verwenden und dann SSH zum Remotecomputer ausführen, kann die Remotesitzung auf keinen Fall erkennen, dass Sie anstelle von (oder zusätzlich zu) indizierten (256-Farben) RGB-Farben verwenden können. Das liegt daran, dass die tmux-Überschreibung „Tc“ für die Remotesitzung nicht sichtbar ist.

Sie können dies umgehen, indem Sie die Terminalbeschreibung ändern, die derStandardterminalEinstellung von tmux, z. B. indem Sie die Einstellungen hinzufügen, die Sie mitTerminal-Overrideszur Textdatei für die Terminalbeschreibung und mitticum es zu kompilieren (auf jeder Maschine). Zum Beispiel (wenn dieStandardterminalIsttmux):

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

Kitty hat eineFAQ, aber es übersieht "-x" fürinfocmp.

Es sind noch ein paar weitere Punkte zu berücksichtigen:

  • Kopieren der vonticist (aus mehr als einem Grund) unzuverlässig.

  • Wenn die gleiche Terminalbeschreibung auf der Remote-Seite verfügbar ist, erhalten Sie ein (mehr) konsistentes Verhalten, vorausgesetzt, dass die Remote-Anwendung die Terminalbeschreibung verwendetInhalteher als dasNameder Klemmenbeschreibung.

Antwort3

Habe es geschafft, es zu beheben! Es war eine Kombination aller gegebenen Antworten mit einer wichtigen zusätzlichen Variable.

Erforderliche Schritte:

  • Sicherstellen, dass die TERMverwendeten Variablen auf jedem Host und in jedem TMUX gleich sind (ich habe sie letztendlich xterm-kittydirekt auf den Hosts und tlux-256colorin den TMUX-Sitzungen verwendet).Dank an Nicholas Marriott.
  • füge Tc;dem Infocmp der von mir verwendeten Terminals hinzu, indem ichDieser Ausschnitt stammt von Thomas Dickey:
infocmp -x tmux-256color >foo
printf '\tTc,\n' >>foo
tic -x foo
  • Fügen Sie es set -g fish_term24bit 1zu meiner Datei config.fish hinzu, um Fish zur Verwendung des Trucolor-Modus zu zwingen.

verwandte Informationen