Цвета TMUX и терминала не совпадают локально и по ssh

Цвета TMUX и терминала не совпадают локально и по ssh

У меня есть куча dotfiles, которые позволяют мне иметь симпатичную тему на моем терминале и tmux на моем локальном хосте. Я использую kitty, fish и tmux. Чтобы правильно определить цвета и иметь глобальную согласованность, я использую следующие файлы:

  • .Xресурсы
  • китти.conf
  • fish_prompt.рыба
  • .tmux.conf

На моем локальном хосте все выглядит действительно чисто: введите описание изображения здесь

У меня также есть удаленный сервер, который запускает тот же arch + fish + tmux и использует точно такие же dotfiles. Однако при подключении к серверу по SSH все выглядит совершенно иначе:

введите описание изображения здесь

Я поискал в Google и нашел множество руководств, в которых говорится, что нужно добавить кучу странных конфигураций, но ни одно из них на самом деле не объясняет, что на самом деле происходит под капотом (и, как вы можете видеть, ни одно из них не работает).

Вот что я попытался сделать, чтобы это заработало (не совсем понимая, зачем):

  • Добавлено в tmux.conf:
set^[[3m -g default-terminal "xterm-kitty"
set-option^[[3m -ga terminal-overrides ",xterm-kitty*:Tc"
  • Добавлен файл xterm-kitty terminfo
  • Измените TERMпеременную env на xterm-kitty при входе в систему.

Я бы хотел получить некоторые ресурсы, указывающие на то, как все это работает! Спасибо!

Редактировать :

Для ясности приведу значения, которые TERMу меня есть:

  • На локальном хосте:xterm-kitty
  • На локальном хосте внутри tmux:xterm-256color
  • На удаленном хосте сразу после открытия ssh:xterm-kitty
  • На удаленном хосте в tmux:xterm-256color

Все файлы синхронизированы с помощью git-репо, все версии идентичны. Я перенес один и тот же terminfoфайл, связанный с xterm-kittyна обоих хостах. Также, используяэтотскрипт, я вижу, что все цвета отображаются правильно и идентичны на обоих хостах.

Я также заметил, что вход на удаленную машину без tmux дает еще одну комбинацию цветов (везде используется один и тот же файл конфигурации fish):

введите описание изображения здесь

решение1

default-terminalустанавливает значение по умолчанию TERMвнутри tmux. Не устанавливайте его в xterm-kitty- tmux не является xterm или kitty. Установите его в tmux-256color, если он существует на вашем компьютере (проверьте infocmp tmux-256color), в противном случае screen-256color.

Аналогично, не устанавливайте TERMв профилях оболочки одно и то же значение для всех терминалов.

Строка terminal-overrides, которую вы видите, сообщает tmux, что когда он видит TERMзначение set, xterm-kittyэто означает, что терминал поддерживает настоящий (RGB) цвет (следовательно Tc).

TERMВнутри tmux сообщает программам внутри tmux, с чем они общаются (tmux). TERMСнаружи tmux сообщает tmux, с чем он общается (в данном случае с kitty).

Если локально работает, но по ssh не работает, то наиболее вероятные причины:

  • Различается TERMза пределами tmux. Вы уверены, echo $TERMчто показывает одно и то же непосредственно перед запуском tmux на локальном компьютере и через ssh?

  • Конфиги 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, чтобы заставить fish использовать режим trucolor.

Связанный контент