mosh
usa o ambiente de localidade suportado por ssh
. Embora mosh
aparentemente não tenha opções verbose ou debug, você pode dizer qual comandossh
usar ao conectar e adicionando uma opção -vvv
pode ter ssh
mostrar quais variáveis de locale envia .
Por exemplo, começando com
mosh -ssh='ssh -vvv' root@server
você pode ver
debug1: Sending env LC_ALL = C
debug2: channel 0: request env confirm 0
para POSIX e
debug1: Sending env LC_CTYPE = en_US.UTF-8
debug2: channel 0: request env confirm 0
que mostram que o servidor confirma as variáveis usadas. O sshd
remoto pode ignorar alguns de seus ambientes, dependendo da configuração de AcceptEnv
na configuração de sshd
- ou das configurações de SendEnv
do usuário (na configuração ssh
).
Nem todos os servidores aceitam suas variáveis de localidade via ssh.
Mesmo com a configuração configurada permissivamente, ainda é possível (particularmente desde que você está se conectando ao usuário root ) que alguém decidiu que a localidade para esse usuário deveria ser POSIX. Para o root , isso faz algum sentido porque você teria menos problemas selecionando / colando a cópia.
Por exemplo, alguns sistemas usam /etc/profile.d/lang.sh
para definir a localidade para uso interativo. Esse script difere de um sistema para outro e é o segundo lugar (após as configurações de ssh / sshd) a ser considerado ao procurar uma explicação sobre por que as informações de localidade não são passadas para um sistema remoto. Com o Red Hat (CentOS), o script tenta obter informações da configuração do sistema e da home, por exemplo,
if [ -n "$LANG" ]; then
saved_lang="$LANG"
[ -f "$HOME/.i18n" ] && . "$HOME/.i18n" && sourced=1
LANG="$saved_lang"
unset saved_lang
else
for langfile in /etc/locale.conf "$HOME/.i18n" ; do
[ -f $langfile ] && . $langfile && sourced=1
done
fi
O SuSE é diferente, fazendo suposições sobre o ssh e o gdm antes lendo essencialmente os mesmos arquivos:
#
# lang.sh: Set interactive language environment
#
# Used configuration files:
#
# /etc/sysconfig/language
# $HOME/.i18n
#
#
# Already done by the remote SSH side
#
test -z "$SSH_SENDS_LOCALE" || return
#
# Already done by the GDM
#
test -z "$GDM_LANG" || return
Para seus servidores específicos (versão não especificada), o script pode diferir de um release para outro. Meus servidores Debian não possuem esse arquivo - e dependem da localidade do sistema padrão e do gdm (que podem ser diferentes) para definir a localidade interativa. Sua conexão ssh poderia usar um valor diferente com a localidade do sistema do que uma sessão interativa usando X (via gdm). Nesse caso, a localidade do sistema é o lugar para corrigir (veja Local no wiki do Debian).