zhw2101024 写了:各种不同的桌面环境都会有设定locale的工具,可能在.gconf或者.config之类的隐藏目录里,也可能在初始化脚本里,或者~/.xprofile之类的,文件名不一定准确,总之是.x开头。这个非要弄懂的话就复杂了。
lilydjwg 写了:GalaxyYun 写了:lilydjwg 写了:感觉这个命令的输出信息才是真实反映系统的locale设置。
对,也不对。
locale 命令输出
当前的语言和区域设置。Linux 的语言和区域设置是由一些环境变量(LANG,LC_*,LANGUAGE)确定的。那些配置文件也不过是让某些进程读取后设置这些环境变量而已。locale 程序就是读取这些环境变量的。
首先,感谢你的回答。
我知道,Linux Locale的设置是由(LANG,LC_*)这些环境变量确定的。但网上的教程都是讲到通过/etc/default/locale来设置这些环境变量。可我实践发现,根本不是这样的,因为我无论怎么修改/etc/default/locale文件都不影响locale命令的输出,甚至我将/etc/default/locale文件删除都没问题。
所以,locale命令一定是从哪个文件读取了Locale设定的信息,我不知道是不是与开机启动的一些文件有关。说来惭愧,学LINUX时日不多,我还不知道开机时需要读取哪些文件。
我不知道以前的LINUX是不是靠/etc/default/locale来设定当前Locale环境变量;我用的是13.04,感觉/etc/default/locale不再是设置Locale环境变量的工具了,当然,作为初学者我只是猜测。。。
我现在就想知道,locale变量到底是从哪得到Locale环境变量的,或者说Locale环境变量加载到内存初始化时到底是从哪个文件读取的。而且不同的用户的Locale环境变量不同,但我在自己家目录没找到与Locale环境变量相关的文件。。。
或者退一步,我如何修改Locale环境变量(LANG以及LC_*)并让它永久有效呢??
/etc/default/locale 好像是 Debian 的?
图形界面用户登录时,有些登录器是可以指定登录语言的。那个通常在 ~/.dmrc 文件中。系统级的配置依发行版不同而不同,而我离开 Ubuntu 的原因就是,我搞不懂很多这种细节。
终于被我找到了,本来准备放弃的。。。
https://help.ubuntu.com/community/Local ... ed_locales
是Ubuntu官方关于Locale的解释,基本跟我要解决的问题毫无关系。早些天已经看过了。
今天又重新打开看看,发现其中一个链接是关于environment variables的。
https://help.ubuntu.com/community/EnvironmentVariables
发现这么一段话:
代码: 全选
Environment variable settings that should affect just a particular user (rather than the system as a whole) should be set into:
~/.pam_environment - This file is specifically meant for setting a user's environment. It is not a script file, but rather consists of assignment expressions, one per line.
PATH DEFAULT=${PATH}:${HOME}/MyPrograms
Note: Using .pam_environment requires a re-login in order to initialize the variables. Restarting just the terminal is not sufficient to be able to use the variables.
果不其然,locale命令是读取这个文件并显示的;通过修改这个文件就能设置自己的Locale信息。
而/etc/default/locale是属于系统全局设置,比如新建用户的默认Locale设置。
LINUX是先读取/etc/default/locale再读取~/.pam_environment。
在Ubuntu中,/etc/default/locale
不会覆盖~/.pam_environment的设置,除非/etc/default/locale中设置了LC_ALL项,会导致LC_*变量被设置成LC_ALL。但LANG变量总是以~/.pam_environment中指定的为准,除非~/.pam_environment未指定;
每次修改/etc/default/locale需要re-login生效。
在Mint中,/etc/default/locale
会覆盖~/.pam_environment的设置,每次修改/etc/default/locale需要restart生效。
我擦,Mint是基于Ubuntu的,为毛规则全变了??难道Mint专为单用户制定的规则,不过话说回来,Mint的桌面体验确实比Ubuntu好,前者仿Windows后者仿Mac,当然,各自都仿得比较烂。。。
之前,我说感觉在Ubuntu中/etc/default/locale设置没有用,甚至删除都可以,原因就在它会被~/.pam_environment覆盖。
最后,吐槽一下:
这个问题搞了我几天了,快把我整残了!
网上有修改/etc/locales.build的、有修改/usr/lib/locale/的、有修改/var/lib/locales/supported.d/local的、有修改/etc/default/locale的、有修改/etc/fonts/conf.d的,还有其它一大堆修改方案,我记不大清了。
我真想说LINUX发行版真TM混乱!!!
好了,LINUX虐我千百遍,我待LINUX如初恋,唉。。。。