Cenário:
Eu tenho um servidor, no qual uma sessão do tmux está sendo executada. Vamos chamar essa sessão tmux_session
no restante deste post.
Anexar a essa sessão pode ser feito de duas maneiras ligeiramente diferentes:
Ao primeiro ssh-ing para o servidor:
user@host$ ssh [email protected]
e, em seguida, anexando à sessão nomeada:
user@server$ tmux a -d -t tmux_session
Fazendo ssh-ing e anexando ao mesmo tempo:
user@host$ ssh [email protected] -t tmux -a -d -t tmux_session
Sintomas:
O método №1 funciona como esperado. My LANG
está definido como C.UTF-8
, echo
-ing dentro tmux_session
funciona bem e é relatado corretamente. A entrada Unicode de caracteres como "¹²³¤", funciona perfeitamente bem.
O método №2 produz uma sessão, que é incapaz de exibir caracteres Unicode, além do simples ASCII. Todos os outros caracteres são substituídos por _
(um sublinhado). No entanto, ao inserir um caractere especial, o caractere é realmente inserido em qualquer aplicativo que esteja sendo executado dentro do tmux_session
, confirmei usando editores, um cliente de IRC, etc. .
Este problema ao usar o método №2, acontece apenas ao anexar à sessão com o comando ssh e afeta apenas a exibição dos caracteres, não os caracteres reais que estão sendo inseridos.
No entanto, parte da saída interna tmux
está meio quebrada nas duas vezes. Quando entro echo $LANG
usando qualquer um dostmux_session
métodos , vejo isso:
$ echo $LANG
cho C.UTF-8C.UTF-8
Algo está distorcido, por algum motivo a linha de entrada está (parcialmente) repetida. Eu li em outro post no superuser.com, que se deve tentar primeiro excluindo .tmux.conf
. Eu não tenho um .tmux.conf
, então não ter esse arquivo não parece aliviar o problema para mim. Em qualquer caso, $LANG
ser definido como C.UTF-8
está correto.
Essa saída distorcida não acontece, quando apenas ssh-ing para o servidor.
Você está verificando as configurações de localidade dentro das
tmux
sessões, mas não as quetmux
recebe.server.ltd
provavelmente não temAcceptEnv LANG LC_*
em seusshd_config
ou/e você não temSendEnv LANG LC_*
em seussh_config
, então o fato de seu sistema local e terminal estar usando UTF-8 como o charset não é transmitido para otmux
cliente remoto.Você poderia contornar isso fazendo:
(assumindo que o shell local e o shell de login do usuário remoto são semelhantes ao POSIX)
Ou apenas codifique a localidade UTF-8 de sua escolha se você souber que seu terminal está falando em UTF-8:
(uma sintaxe compreendida por todos os shells).