locale命令的输出与/etc/default/locale内容不一致

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
GalaxyYun
帖子: 94
注册时间: 2012-10-22 16:50
系统: Windows,Linux

locale命令的输出与/etc/default/locale内容不一致

#1

帖子 GalaxyYun » 2013-07-04 18:46

如下图:
locale命令输出
Locale.jpg
Locale.jpg (41.59 KiB) 查看 40109 次
/etc/default/locale文件
deflocale.jpg
两个文件不一致,感觉/etc/default/locale文件没用,怎么删怎么改都不影响系统的语言和字体显示。
locale命令默认是从哪个文件读取并输出的,感觉这个命令的输出信息才是真实反映系统的locale设置。

多谢!!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: locale命令的输出与/etc/default/locale内容不一致

#2

帖子 lilydjwg » 2013-07-05 14:52

感觉这个命令的输出信息才是真实反映系统的locale设置。
对,也不对。

locale 命令输出当前的语言和区域设置。Linux 的语言和区域设置是由一些环境变量(LANG,LC_*,LANGUAGE)确定的。那些配置文件也不过是让某些进程读取后设置这些环境变量而已。locale 程序就是读取这些环境变量的。
头像
GalaxyYun
帖子: 94
注册时间: 2012-10-22 16:50
系统: Windows,Linux

Re: locale命令的输出与/etc/default/locale内容不一致

#3

帖子 GalaxyYun » 2013-07-05 20:57

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_*)并让它永久有效呢??
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: locale命令的输出与/etc/default/locale内容不一致

#4

帖子 zhw2101024 » 2013-07-05 21:31

各种不同的桌面环境都会有设定locale的工具,可能在.gconf或者.config之类的隐藏目录里,也可能在初始化脚本里,或者~/.xprofile之类的,文件名不一定准确,总之是.x开头。这个非要弄懂的话就复杂了。
头像
GalaxyYun
帖子: 94
注册时间: 2012-10-22 16:50
系统: Windows,Linux

Re: locale命令的输出与/etc/default/locale内容不一致

#5

帖子 GalaxyYun » 2013-07-05 22:03

zhw2101024 写了:各种不同的桌面环境都会有设定locale的工具,可能在.gconf或者.config之类的隐藏目录里,也可能在初始化脚本里,或者~/.xprofile之类的,文件名不一定准确,总之是.x开头。这个非要弄懂的话就复杂了。
好吧,那请问我要如何通过终端修改Locale环境变量并使其长久有效呢???
我man locale也找不到相关信息。。。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: locale命令的输出与/etc/default/locale内容不一致

#6

帖子 lilydjwg » 2013-07-05 22:37

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 的原因就是,我搞不懂很多这种细节。
头像
GalaxyYun
帖子: 94
注册时间: 2012-10-22 16:50
系统: Windows,Linux

Re: locale命令的输出与/etc/default/locale内容不一致

#7

帖子 GalaxyYun » 2013-07-06 8:43

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 的原因就是,我搞不懂很多这种细节。
关于这个东西我查了好几天了,发现没有人知道。
我在国外论坛也发了类似的帖子,同样没人知道。
算了,我也懒得在这种细节上浪费时间了,等以后熟悉了LINUX再搞。。。
头像
leavfin
帖子: 599
注册时间: 2012-01-12 13:32

Re: locale命令的输出与/etc/default/locale内容不一致

#8

帖子 leavfin » 2013-07-06 13:43

只要是开机读取的文件 基本都可以设定一些变量
可以是profile *shrc login xinitrc xprofile 很多
只是读取的先后有别 最后读取的生效
根据个人经验 建议~/.xprofile 或者~/.xinitrc

系统级别locale改成中文的话
等到用tty的时候 就十分痛苦了
头像
GalaxyYun
帖子: 94
注册时间: 2012-10-22 16:50
系统: Windows,Linux

Re: locale命令的输出与/etc/default/locale内容不一致

#9

帖子 GalaxyYun » 2013-07-06 13:56

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如初恋,唉。。。。
kxmd
帖子: 21
注册时间: 2010-09-13 21:03

Re: locale命令的输出与/etc/default/locale内容不一致

#10

帖子 kxmd » 2013-09-04 22:49

我用的是kde,用它的systemsettings设置locale的话,改的是 .kde/env/setlocale.sh 文件,内容:
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh

这文件只影响kde环境下的locale。
头像
flwwater
帖子: 806
注册时间: 2010-10-31 9:15
系统: kubuntu 24.04

Re: locale命令的输出与/etc/default/locale内容不一致

#11

帖子 flwwater » 2013-09-05 9:19

/etc/目录下有个enviroment文件,在里面把环境变量设置好就是全局的了.
个人收藏的数百个精美动态壁纸:
https://url17.ctfile.com/d/15983117-593 ... 768?p=6220
(访问密码:6220


个人收藏的经典国语音乐和纯音乐(钢琴,笛子,二胡等):
https://url17.ctfile.com/d/15983117-446 ... 33e?p=6220
(访问密码:6220



如果访问密码不对,可试试这个密码 566816
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: locale命令的输出与/etc/default/locale内容不一致

#12

帖子 zhw2101024 » 2013-09-05 10:29

从来没看过哪个发行版像ubuntu那样把配置文件隐藏得那么彻底
SUSE没用过,不知道是什么个情况
timson
帖子: 7
注册时间: 2013-10-01 22:27
系统: Ubuntu 13.04

Re: locale命令的输出与/etc/default/locale内容不一致

#13

帖子 timson » 2013-10-05 2:57

GalaxyYun 写了:
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如初恋,唉。。。。

我也想实现不同用户不同locale,可惜不行哦。。一修改/etc/default/locale则全部用户都改了,但是~/.pam_environment修改了LANG=zh_CN.UTF-8,但是locale命令显示LANG=en_US.UTF-8

不知道为什么这种情况呢?到底是什么覆盖了locale设置呢???
我的系统也是ubuntu 13.04默认的unity桌面环境。本来想用户a用中文zn_CN.UTF-8,用户b用英文en_US.UTF-8,可惜只能全局修改/etc/default/locale。但是修改用户目录下的~/.pam_environment不起作用。
回复