最近出现的locale报错问题,附(部分)解决办法

从上个月起不知怎么回事手边好像所有的Linux都开始报locale相关的错误,不管是服务器上的Ubuntu,Debian还是自己机器上的openSUSE。后来发现其实是perl在报错,不过没有实质性出问题就没有管。前几天突然发现lualatex也开始报错,而且这个更狠,直接会"Unable to read environment locale:exit now."然后就退出了,于是就不得不开始修了。kcmshell5调用的那个GUI “Formats”设置不管用,重新登录仍然会报错。

搜了一圈找到了很多过时/不适配的方案,比如说openSUSE默认明显不会有dpkg-reconfigure,locale-gen,/etc/default/locale之类的东西。最后解决办法是编辑/etc/locale.conf和/etc/environment,都加上下列值然后重新登录:

LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8 

之后所有东西都是en_US了,再kcmshell5 formats打开那个“Formats”设置,把下面的详细设置全部覆盖掉改成公制的“C”,之后locale输出:

LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=C
LC_TIME=C
LC_COLLATE=C
LC_MONETARY=C
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=C
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

即可。即使GUI语言你选中文这应该也适用,目前据个人经验看选任何US以外的locale有点自找麻烦的感觉,所以我一切系统全部都是强制EN US。

有一点不明白就是/etc/locale.conf和/etc/environment到底哪一个是重要的,编辑两个文件感觉很奇怪,希望有明白的指教一下。

目前据个人经验看选任何US以外的locale有点自找麻烦的感觉

遇到问题就解决呗。到各个上游发 bug 报告去。

有一点不明白就是/etc/locale.conf和/etc/environment到底哪一个是重要的

/etc/locale.conf 是 systemd 读取的,见 man locale.conf 及 man localectl。/etc/environment 是 pam_env 在鉴权(比如登录)时读取的(另外还有每用户的版本 ~/.pam_environment),见 man pam_env。

1赞

了解了,看来还是要RTFM,谢谢。
/etc/environment里的应该可以去掉了。