从上个月起不知怎么回事手边好像所有的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到底哪一个是重要的,编辑两个文件感觉很奇怪,希望有明白的指教一下。