As cores do TMUX e do terminal não são iguais localmente e no ssh

As cores do TMUX e do terminal não são iguais localmente e no ssh

Eu tenho vários dotfiles que me permitem ter um tema bonito no meu terminal e tmux no meu host local. Eu uso gatinho, peixe e tmux. Para definir corretamente as cores e ter uma coerência global, utilizo os seguintes arquivos:

  • .Xrecursos
  • gatinho.conf
  • peixe_prompt.fish
  • .tmux.conf

No meu host local, tudo parece muito limpo: insira a descrição da imagem aqui

Eu também tenho um servidor remoto, que executa o mesmo arch + fish + tmux e usa exatamente os mesmos dotfiles. No entanto, ao fazer o SSH no servidor, tudo parece completamente diferente:

insira a descrição da imagem aqui

Eu tenho o Google por perto e há muitos tutoriais que dizem para você adicionar um monte de configurações estranhas, mas nenhuma realmente explica o que realmente está acontecendo nos bastidores (também, como você pode ver, nenhuma delas funcionou).

Aqui está o que tentei fazer para que funcionasse (sem realmente entender o porquê):

  • Adicionado ao tmux.conf:
set^[[3m -g default-terminal "xterm-kitty"
set-option^[[3m -ga terminal-overrides ",xterm-kitty*:Tc"
  • Adicionado o arquivo terminfo xterm-kitty
  • Altere a TERMvariável env para xterm-kitty no login

Eu adoraria que alguns recursos apontassem como tudo isso funciona! Obrigado!

Editar:

Para maior clareza, aqui estão os valores de TERMI have :

  • No host local:xterm-kitty
  • No host local dentro do tmux:xterm-256color
  • No host remoto diretamente após abrir o ssh:xterm-kitty
  • No host remoto no tmux:xterm-256color

Todos os arquivos são sincronizados usando um repositório git, todas as versões são idênticas. Transferi o mesmo terminfoarquivo relacionado xterm-kittyem ambos os hosts. Além disso, usandoessescript, posso ver que todas as cores são exibidas corretamente e idênticas em ambos os hosts.

Também notei que o login na máquina remota sem tmux produz ainda outra combinação de cores (o mesmo arquivo de configuração de peixe usado em todos os lugares):

insira a descrição da imagem aqui

Responder1

default-terminaldefine o padrão TERMdentro do tmux. Não defina isso como xterm-kitty- tmux não é xterm ou kitty. Defina-o tmux-256colorcomo se existir no seu computador (marque infocmp tmux-256color), caso contrário screen-256color.

Da mesma forma, não defina TERMos perfis do shell da mesma forma para todos os terminais.

A terminal-overrideslinha que você tem diz ao tmux que quando ele é TERMdefinido xterm-kittysignifica que o terminal suporta cores verdadeiras (RGB) (portanto Tc).

TERMdentro do tmux informa aos programas dentro do tmux com o que eles estão conversando (tmux). TERMfora do tmux diz ao tmux com o que ele está falando (neste caso, gatinho).

Se funcionar localmente, mas não por ssh, o mais provável é:

  • Diferente TERMfora do tmux. Tem certeza echo $TERMde que mostra o mesmo imediatamente antes de iniciar o tmux no computador local e no ssh?

  • As configurações do tmux não são realmente as mesmas, tem certeza que são? Se você precisar terminal-overridesem um lugar, precisará em outro; se não, não precisará.

  • Tem certeza de xterm-kittyque existe em ambos os computadores e é o mesmo? Verificar infocmp xterm-kitty.

  • Diferentes versões do tmux. Tem certeza que eles são iguais? Verificar tmux -V.

Responder2

Se você estiver usando o tmux na máquina local e executando o ssh na máquina remota, não há como a sessão remota saber que você pode usar cores RGB em vez de (ou além de) indexadas (256 -cores). Isso ocorre porque a substituição do tmux "Tc" não é visível para a sessão remota.

Você pode contornar isso modificando a descrição do terminal que corresponde aoterminal padrãoconfiguração do tmux, por exemplo, adicionando quaisquer configurações que você usa comsubstituições de terminalao arquivo de texto para a descrição do terminal e usandoticpara compilá-lo (em cada máquina). Por exemplo (se oterminal padrãoétmux):

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

Kitty tem umPerguntas frequentes, mas ignora "-x" parainfocmp.

Existem alguns pontos restantes a serem considerados:

  • Copiando os arquivos binários criados porticnão é confiável (por mais de um motivo).

  • Se a mesma descrição do terminal estiver disponível no lado remoto, você obterá um comportamento (mais) consistente, assumindo que o aplicativo remoto use a descrição do terminalcontenteem vez donomeda descrição do terminal.

Responder3

Consegui consertar! Foi uma combinação de todas as respostas dadas, com uma variável extra importante.

Etapas necessárias:

infocmp -x tmux-256color >foo
printf '\tTc,\n' >>foo
tic -x foo
  • Adicione set -g fish_term24bit 1ao meu config.fish para forçar os peixes a usar o modo trucolor.

informação relacionada