Arch Linux:无法设置区域设置。修复你的系统

Arch Linux:无法设置区域设置。修复你的系统

昨天更新我的 Arch Linux 系统后,我开始收到类似以下的错误:

Failed to set locale. Fix your system.

此特定错误来自尝试运行 snapper。但是,这是另一个相关错误:

bsdcpio: Failed to set default locale

perl 给出了类似的警告,我将粘贴在下面。

不限于任何特定应用;这似乎是一个系统范围的问题。

在昨天的更新之前我没有收到这些错误。此外,我在虚拟控制台中没有收到错误。我只有在 X (KDE) 中才能得到它们。例如,如果我在 konsole 中运行 snapper ls 命令,则会收到上述错误,但如果在虚拟控制台中运行相同的 snapper ls 命令,则不会收到任何错误。

我的其他 Arch 系统几乎相同,没有这个问题。

我的第一次故障排除尝试如下。

  1. 检查/etc/locale.conf
  2. 跑步locale-gen
  3. 检查输出locale
  4. 查看 snapper 运行是否没有错误

我在 locale.conf 中没有看到任何错误,但运行local-gen并不能解决问题。

这是相关的输出:

# 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

这是 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").

locale当我在 Konsole 中(在 X 中)运行时,会出现以下行,但是不是当我locale在虚拟控制台中运行时:

locale: Cannot set LC_ALL to default locale: No such file or directory

我可以在虚拟控制台中运行 snapper ls 命令,不会出现错误。

据我所知,Arch 没有/etc/default/locale.我的任何 Arch 机器上都不存在该文件。

重新启动系统没有帮助。

答案1

您的区域设置之一(即LC_TIME)被设置为您尚未生成的区域设置(即en_GB.UTF-8)。如果您启用该区域设置/etc/locale.gen并重新生成区域设置,该错误将会消失。

由于该设置与 中的设置不同/etc/locale.conf,您可能已在启动脚本之一中放置了覆盖。由于该错误不会发生在虚拟控制台中,因此我怀疑.xinitrc.xprofile。但是,如果您使用完整的桌面环境,它们通常有自己的设置,包括区域设置。

答案2

如果使用 KDE (KDE5),可能会出现覆盖的另一个地方:

./.config/plasma-locale-settings.sh
./.config/plasma-localerc

这可以在 KDE 系统设置中进行配置。

基本上,如果locale输出与 中配置的不同/etc/locale.conf,则意味着存在某些覆盖。正如 Fox 之前回答的那样,应该在 中启用/etc/locale.gen并重新生成缺少的语言环境,或者/etc/locale.conf任何其他语言环境配置应该使用/etc/locale.gen.

这也修复了 bsdtar 等问题: bsdtar: Failed to set default locale

相关内容