Depois de atualizar meu sistema Arch Linux ontem, comecei a receber um erro semelhante a este:
Failed to set locale. Fix your system.
Esse erro específico vem da tentativa de executar o snapper. No entanto, aqui está outro erro relacionado:
bsdcpio: Failed to set default locale
perl dá um aviso semelhante que vou colar abaixo.
Não se limita a nenhuma aplicação específica; parece ser um problema de todo o sistema.
Eu não recebi esses erros antes da atualização de ontem. Além disso, não recebo os erros em um console virtual. Eu só os recebo quando dentro do X (KDE). Por exemplo, recebo o erro acima se executar um comando snapper ls no konsole, mas não recebo nenhum erro se executar o mesmo comando snapper ls em um console virtual.
Meus outros sistemas Arch, que são quase idênticos, não apresentam esse problema.
Minhas primeiras tentativas de solução de problemas foram as seguintes.
- verifique /etc/locale.conf
- corre
locale-gen
- verifique a saída de
locale
- veja se o snapper roda sem erro
Não vejo erros no locale.conf, mas a execução local-gen
não resolve o problema.
Aqui está a saída relevante:
# localectl list-locales
en_US.utf8
# grep -v "^#" /etc/locale.conf
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
# locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_GB.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
# locale-gen
Generating locales...
en_US.UTF-8... done
Generation complete.
# locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_GB.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
# locale -a
C
en_US.utf8
POSIX
Aqui está o aviso do perl:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "",
LC_ALL = (unset),
LC_MEASUREMENT = "en_US.UTF-8",
LC_PAPER = "en_US.UTF-8",
LC_MONETARY = "en_US.UTF-8",
LC_NAME = "en_US.UTF-8",
LC_COLLATE = "en_US.UTF-8",
LC_CTYPE = "en_US.UTF-8",
LC_ADDRESS = "en_US.UTF-8",
LC_NUMERIC = "en_US.UTF-8",
LC_MESSAGES = "en_US.UTF-8",
LC_TELEPHONE = "en_US.UTF-8",
LC_IDENTIFICATION = "en_US.UTF-8",
LC_TIME = "en_GB.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
A seguinte linha aparece quando executo locale
dentro do Konsole (no X), mas não quando executo locale
em um console virtual:
locale: Cannot set LC_ALL to default locale: No such file or directory
Posso executar o comando snapper ls em um console virtual sem erros.
Tanto quanto eu sei, o Arch não tem um arquivo /etc/default/locale
. Esse arquivo não está presente em nenhuma das minhas máquinas Arch.
A reinicialização do sistema não ajudou.
Uma de suas configurações de localidade (ou seja,
LC_TIME
) está definida para uma localidade que você não gerou (ou seja,en_GB.UTF-8
). O erro desaparecerá se você habilitar essa localidade/etc/locale.gen
e gerar novamente as localidades.Como a configuração é diferente daquela definida em
/etc/locale.conf
, você pode ter colocado uma substituição em um de seus scripts de inicialização. Como o erro não ocorre em um console virtual, suspeito.xinitrc
ou.xprofile
. No entanto, se você estiver usando um ambiente de área de trabalho completo, eles geralmente terão suas próprias configurações, incluindo configurações de localidade.Outro local onde a substituição pode estar presente se estiver usando o KDE (KDE5):
Isso pode ser configurado nas configurações do sistema KDE.
Basicamente, se a
locale
saída for diferente do que está configurado em/etc/locale.conf
, significa que existe algum override. Como a Fox respondeu anteriormente, as localidades ausentes devem ser habilitadas/etc/locale.gen
e regeneradas ou/etc/locale.conf
qualquer outra configuração de localidade deve usar quaisquer localidades disponíveis no/etc/locale.gen
.Isso também corrige, por exemplo, o problema com o bsdtar:
bsdtar: Failed to set default locale