设置linux系统的LANG变量

上传人:宝路 文档编号:5903269 上传时间:2017-09-08 格式:DOCX 页数:10 大小:22.48KB
返回 下载 相关 举报
设置linux系统的LANG变量_第1页
第1页 / 共10页
设置linux系统的LANG变量_第2页
第2页 / 共10页
设置linux系统的LANG变量_第3页
第3页 / 共10页
设置linux系统的LANG变量_第4页
第4页 / 共10页
设置linux系统的LANG变量_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《设置linux系统的LANG变量》由会员分享,可在线阅读,更多相关《设置linux系统的LANG变量(10页珍藏版)》请在金锄头文库上搜索。

1、文档属于转载,不设财富值,看的上的拿走顺便给个好评,看不上的绕路,谢谢!设置 linux系统的 LANG变量 对于国内的 Linux用户,经常烦恼的一个问题是:系统常常在需要显示中文的时候却显示成了乱码,而由于某些原因,需要英文界面的系统的时候,却苦于系统不能正常输入和显示中文.另外,由于大部分主要 Linux发行版都是以英语为主体的,英文界面的系统和应用程序不管在界面的美观程度和稳定程度上都比中文的略好一些,各种奇怪的 BUG也要少一些。因此,很多稍微有英语基础的 Linux用户都宁愿使用英文界面的系统。但是,矛盾又突现出来:在英文系统下,如何才能正常显示和输入中文呢?有没有两全其美的方案呢

2、?因此,笔者开始探索如何解决这个问题。我的完美状态是:系统和应用程序全部为英文(系统菜单、应用程序工具栏、默认输入法等),而我需要阅读和撰写中文文档的时候,能正确的显示中文并调出中文输入法。经过尝试,设置成功,现在以 FC4Linux为例,讲解一些相关知识和设置过程。本文主要通过修改系统配置的过程来展现修改 linux系统配置的一般思路和过程,如果你不太有耐心看完,请跳过文章的 14节,直接看第五节快速设置部分。一,相关变量介绍我们知道大部分 Linux系统是无所谓中文版和英文版的,以 FC4Linux 为例,系统发行的时候全世界都一样,系统是中文的还是英文的完全取决于你选择的语言包。不同国家

3、的人在安装使用的时候选择属于自己国家的语言包,应用程序中的语言也不是写死的,它根据系统的设置来调用相关的语言,所以,一个应用程序写出来不经过修改,全世界不同国家的用户都可以以母语界面使用它,这就事所谓的 internationalization(国际化),简称 i18n。这也是未来软件的发展趋势。那么,如果我在系统中安装了不同的语言包和不同的字体,系统是如何判断我所要的语言界面并调用相关的字体的呢?系统中那些文件和变量在控制这些呢?在 redHat和 FC系列 Linux系统下,记录系统默认使用语言的文件是/etc/sysconfig/i18n,如果默认安装的是中文的系统,i18n 的内容如下

4、:代码:LANG=zh_CN.UTF-8 SYSFONT=latarcyrheb-sun16 SUPPORTED=zh_CN.UTF-8:zh_CN:zh其中 LANG变量是 language的简称,稍微有英语基础的用户一看就看出来这个变量是决定系统的默认语言的,即系统的菜单、程序的工具栏语言、输入法默认语言等。SYSFONT 是 system font的简称,决定系统默认用哪一种字体。SUPPORTED变量决定系统支持的语言,即系统能够显示的语言。需要说明的是,由于计算机起源于英语国家,因此,不管你把这些变量设置成什么,英语总是默认支持的,而且不管用什么字体,英文字体总包含在其中。这些变量中

5、 LANG变量是在字符模式和图形界面下都用到的,在你登录系统后就被读取并生效,相信很多人在字符界面下输入 Linux命令的时候经常会遇到显示出来的出错信息是乱码的情况,必需安装 zhcon或者 cce等字符模式下的中文软件才能正常显示中文的出错信息。如果我不要他显示中文乱码,我也不要为了看个很简单的出错信息而特意起用 zhcon那我该怎么办呢?一个简单的零时解决的办法就是设置一下 LANG变量:代码:rootgucuiwen # LANG=en_US.UTF-8即把系统的语言临时设置成英文,或者更简单一点,可以直接这样:代码:rootgucuiwen # LANG=即把 LANG变量清空,由于

6、英语是无论什么情况都支持的,LANG 变量被清空后,系统就默认用英语。这样设置后,在字符模式下输出的出错信息等就是全英文的了。但这种设置是临时的,只是临时改变了 LANG这个 bash变量而已。当退出重新登录或者切换到其他字符终端后就无效了。到现在,读者应该想到了,只要把 i18n文件中的 LANG变量设置成英文的”en_US.UTF-8”,就可以永久解决这个问题了。修改后的文件如下:代码:#LANG=zh_CN.UTF-8 LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 SUPPORTED=zh_CN.UTF-8:zh_CN:zh请不要把 LANG变量简

7、单的清空,因为这个变量不仅在字符模式下用到,在图形界面下也用到,简单清空在字符模式下确实不会有问题,但在图形界面下,却会造成中文无法正常显示的情况,在过去 Re d ha t 系列的版本中 i18n文件中还有一个叫 LANGUAGE的变量,专门控制图形界面下的语言设置,现在的 FC系列中已经把这两个变量整合成一个变量了。经过修改这个变量,重新起动图形界面后,就可以看到界面一经完全是英文的了。但是按 ctrl+空格却不能调出中文输入法,输入法菜单中也不能添加中文输入法。我们只简单的修改了 LANG变量改变了系统语言设置,当然这一步也可以用图形界面下的工具修改,而不用亲自修改配置文件。二,关于运行

8、等级这个问题似乎和这篇文章的的主题无关,但是介于现在越来越多的 linux新手遇到 linux图形界面的问题,而且在中文输入法设置过程中也牵涉到这些问题,因此想顺便提一下。现在的 linux安装完成后,默认就运行在第 5个系统运行级别。在 SYSTEM V 风格的 UNIX系统中,系统被分为不同的运行级别,这和 BSD分支的 UNIX有所不同,常用的为 06七个级别:0关机1单用户2不带网络的多用户3带网络的多用户4保留,用户可以自给定义5图形界面的多用户6重起系统由于现在的 Linux系统安装完后就运行在第 5个级别,即系统启动后直接进入图形界面,而不用在字符模式下登录后用 startx或者

9、 xinit 来起动图形界面。这样看起来很方便。但是有什么坏处呢?一旦你改变了某些设置,显示出问题的时候,系统不断在图形和字符间派徊,新手又不知道如何应对,十分麻烦,而且对于学习研究 Linux的人来说,这样不利于了解和学习 Linux底层的一些东西。很早就用 Linux的老用户都知道,过去的 Linux如 redhat6.0,都是默认运行接别为 3,即使后来的 RedHat9.0也可以在安装时候选默认字符登录还是图形登录。但现在的 FC系列和其他大多数版本都不管三七二十一直接帮用户选择了直接图形界面登录。虽然对于大多数菜鸟来说,Linux 确实越来越简单了,但是很多乐趣,那些新手也体验不到了

10、。也许你不相信,直接图形登录到系统确实会有很多问题,因此,作为一个有 6年 Linux使用经验的 Linux和 Solaris 系统管理员,我强烈建议在系统安装完成后把系统的默认运行等级设置在第 3级,在字符终端登录后,再手工输入startx 命令起动图形界面。可以用如下的方法修改:用文本编辑器修改/etc/inittab 文件,把代码:id:5:initdefault:这一行,修改成代码:id:3:initdefault:保存后就重起,系统就默认起动到字符界面。不同运行级别之间的差别的在于系统默认起动的服务的不同,如运行级别 3默认不启动 X图形界面服务,而运行级别 5 却默认起动。本质上是

11、没有区别的,更无所谓不同级别间功能强弱的问题。用户完全可自给定义不同级别的默认服务。在任何运行级别,用户都可用 init 命令来切换到其他运行级别。三,调出中文输入法:我之所以要在上面费那么多笔墨来讲系统运行级别,是因为对系统的认识是从底部向上开始的。先把默认运行级别修改成 3级别,当然,如果你实在不想修改,就临时用 init 3命令切换到第 3级。这样你就可以用 startx起动图形界面,然后用 ctrl+alt+backspace退出图形界面。请注意我说的是“退出”图形界面,而不是按 ctrl+altF2 切到一个字符终端。好了,一切由 startx开始。当你需要在 Linux系统中设置某

12、个东西,或者配置某个服务的时候,最关键的是要知道,这一切是怎么开始的。知其然必需知其所以然。如果你有空把/etc/rc.d 目录下的系统起动时运行的脚本通读一遍,就完全知道了/etc 下的各种配置文件是用来干什么的、如何修改、修改后有什么效果等等。玩起系统来也能随心所欲想怎么改就怎么改。这就是我一直强调的,知其然一定要知其所以然。一定要深入系统,读脚本,学会用命令和手工修改系统配置文件。这样对系统才会有透彻的了解,整天用图形界面的工具是不能帮助你对系统有教为透彻深入的了解的,不同的 linux系统提供的图形界面配置程序会不同,但命令和配置文件都是相同的,越是底层的东西越具有通用性。所以,应当先

13、学会手动配置和修改系统配置文件,等熟悉了以后,再用图形界面的工具修改,以便减少工作量。上面提了一下我解决问题的思路。我是顺着这个思路开始的:中文输入法是在图形界面下使用的,是图形界面下运行的一个程序。而图形界面中的一切,都是由 startx程序开启运行的。这就是问题的根源。找出 startx的位置:代码:rootgucuiwen # which startx /usr/X11R6/bin/startx看 startx是一个脚本还是二进制文件:代码:rootgucuiwen # file /usr/X11R6/bin/startx /usr/X11R6/bin/startx: Bourne sh

14、ell script text executable发现 startx是一个 shell 脚本,于是我打开它分析并阅读,看看能不能找到一些关于输入法起动过程和相关变量的线索:代码:rootgucuiwen # vi /usr/X11R6/bin/startx我找到了该脚本在运行过程中调用的其他脚本和配置文件的信息:代码:userclientrc=$HOME/.xinitrc userserverrc=$HOME/.xserverrc sysclientrc=/etc/X11/xinit/xinitrc sysserverrc=/etc/X11/xinit/xserverrc并且知道,start

15、x 的目的是寻找系统中可用的桌面系统 X服务器系统、以及用户自定义的参数,最终调用 xinit来初始化 X图形界面。我没有在 startx脚本中找到直接和起动输入法相关的代码,于是就可以肯定,输入法相关的代码在startx调用的脚本中。于是我来到/etc/X11/xinit/目录下,阅读并分析该目录下的脚本,这些脚本有些是startx直接调用的,有些是被 startx调用的脚本再调用的,存在着多级嵌套的关系,没有一点耐心还真是搞不清楚。最终我在/etc/X11/xinit/xinitrc.d目录中的 xinput.sh脚本中找到了和输入法相关的代码:代码:lang_region=$(echo

16、$tmplang | sed -e s/.*/) lang_region=zh_CN #这一行是修改后加上去的 for f in $HOME/.xinput.d/$lang_region $HOME/.xinput.d/default /etc/X11/xinit/xinput.d/$lang_region /etc/X11/xinit/xinput.d/default ; do -r $f & source $f & break done通过分析脚本,我知道,图形界面启动的时候脚本是根据 LANG变量来决定是否启用输入法,以及启用哪种语言的输入法等。问题在于:我们还没有把 LANG变量改成英语之前,系统得到的 LANG变量是中文的,因此,它知道需要在图形界面启动过程中启用中文输入法,但把 LANG变量改成英文后,系统根据 LANG 变量知道系统是英文的,它便不再启

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号