1..centos:
vi/etc/sysconfig/i18n
将内容改为
LANG="zh_CN.GB18030"LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"SYSFONT="lat0-sun16"
2.Ubuntu
vi/etc/profileexportLC_ALL="zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh:zh_TW:zh_CN.BIG5
3.编辑并运行.bash_profile
exportNLS_LANG=AMERICAN_AMERICA.UTF8
(假如是GBKexportNLS_LANG=american_america.ZHS16GBK)
不重启机器让更改后的/etc/profile生效
./etc/profile
注意:点与/etc/profile之间有个空格
==============
对于国外的Linux用户,常常苦恼的一个问题是:系统经常在须要显示英文的时侯却显示成了乱码,而因为个别缘由,须要英语界面的系统的时侯,却苦于系统不能正常输入和显示英文.另外,因为大部份主要Linux发行版都是以英文为主体的,英语界面的系统和应用程序不管在界面的美观程度和稳定程度上都比英文的略好一些,各类奇怪的BUG也要少一些。为此,好多稍为有英文基础的Linux用户都宁可使用中文界面的系统。并且,矛盾又突现下来:在中文系统下,怎么能够正常显示和输入英文呢?有没有两全其美的方案呢?为此,笔者开始探求怎样解决这个问题。我的完美状态是:系统和应用程序全部为英语(系统菜单、应用程序工具栏、默认输入法等),而我须要阅读和撰写英文文档的时侯,能正确的显示英文并调出英文输入法。经过尝试,设置成功,如今以FC4Linux为例,讲解一些相关知识和设置过程。
本文主要通过更改系统配置的过程来诠释更改linux系统配置的通常思路和过程,假如你不太有耐心看完,请跳过文章的1—4节,直接看第五节快速设置部份。
一,相关变量介绍
我们晓得大部份Linux系统是无所谓英文版和日文版的,以FC4Linux为例,系统发行的时侯全世界都一样,系统是英文的还是英语的完全取决于你选择的语言包。不同国家的人在安装使用的时侯选择属于自己国家的语言包,应用程序中的语言也不是写死的,它按照系统的设置来调用相关的语言,所以,一个应用程序写下来不经过更改,全世界不同国家的用户都可以以母语界面使用它,这就事所谓的internationalization(国际化),简称i18n。这也是未来软件的发展趋势。
这么,假如我在系统中安装了不同的语言包和不同的字体,系统是怎样判别我所要的语言界面并调用相关的字体的呢?系统中这些文件和变量在控制那些呢?
在redHat和FC系列Linux系统下,记录系统默认使用语言的文件是/etc/sysconfig/i18n,倘若默认安装的是英文的系统,i18n的内容如下:
代码:
LANG="zh_CN.UTF-8"SYSFONT="latarcyrheb-sun16"SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
其中LANG变量是language的简称,稍稍有英文基础的用户一看就看下来这个变量是决定系统的默认语言的,即系统的菜单、程序的工具栏语言、输入法默认语言等。SYSFONT是systemfont的简称,决定系统默认用哪一种字体。SUPPORTED变量决定系统支持的语言,即系统才能显示的语言。须要说明的是,因为计算机起源于德语国家,因而,不管你把那些变量设置成哪些,英文总是默认支持的,但是不管用哪些字体,中文字体总包含在其中。
这种变量中LANG变量是在字符模式和图形界面下都用到的,在你登入系统后就被读取并生效,相信好多人在字符界面下输入Linux命令的时侯常常会碰到显示下来的出错信息是乱码的情况,必需安装zhcon或则cce等字符模式下的英文软件能够正常显示英文的出错信息。假如我不要他显示英文乱码,我也不要为了看个很简单的出错信息而特意起用zhcon那我该怎样办呢?一个简单的零时解决的办法就是设置一下LANG变量:
代码:
[root@gucuiwen~]#LANG="en_US.UTF-8"
即把系统的语言临时设置成中文,或则更简单一点,可以直接这样:
代码:
[root@gucuiwen~]#LANG=""
即把LANG变量清空,因为日语是无论哪些情况都支持的,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变量简单的清空,由于这个变量除了在字符模式下用到,在图形界面下也用到免费linux主机,简单清空在字符模式下确实不会有问题linux定时器,但在图形界面下,却会导致英文未能正常显示的情况,在过去Redhat系列的版本中i18n文件中还有一个叫LANGUAGE的变量linux中文输入法centos,专门控制图形界面下的语言设置,现今的FC系列中早已把这两个变量整合成一个变量了。
经过更改这个变量,重新起动图形界面后,就可以看见界面一经完全是英语的了。并且按ctrl空格却不能调出英文输入法,输入法菜单中也不能添加英文输入法。我们只简单的更改了LANG变量改变了系统语言设置,其实这一步也可以用图形界面下的工具更改,而不用亲自更改配置文件。
二,关于运行等级
这个问题其实和这篇文章的的主题无关,而且介于现今越来越多的linux菜鸟遇见linux图形界面的问题,但是在英文输入法设置过程中也牵扯到这种问题,因而想顺便提一下。
现今的linux安装完成后,默认就运行在第5个系统运行级别。在SYSTEMV风格的UNIX系统中,系统被分为不同的运行级别,这和BSD分支的UNIX有所不同,常用的为0~6七个级别:
0死机
1单用户
2不带网路的多用户
3带网路的多用户
4保留,用户可以自给定义
5图形界面的多用户
6重起系统
因为现今的Linux系统安装完后就运行在第5个级别,即系统启动后直接步入图形界面,而不用在字符模式下登陆后用startx或则xinit来起动图形界面。这样看上去很便捷。并且有哪些益处呢?一旦你改变了个别设置,显示出问题的时侯,系统不断在图形和字符间派徊,菜鸟又不晓得怎么应对,非常麻烦,但是对于学习研究Linux的人来说,这样不利于了解和学习Linux底层的一些东西。很早就用Linux的老用户都晓得,过去的Linux如redhat6.0,都是默认运行接别为3linux中文输入法centos,虽然后来的RedHat9.0也可以在安装时候选默认字符登陆还是图形登入。但如今的FC系列和其他大多数版本都不管三七二十一直接帮用户选择了直接图形界面登陆。似乎对于大多数新手来说,Linux确实越来越简单了,而且好多乐趣,这些菜鸟也体验不到了。
其实你不相信,直接图形登入到系统确实会有好多问题,为此,作为一个有6年Linux使用经验的Linux和Solaris系统管理员,我强烈建议在系统安装完成后把系统的默认运行等级设置在第3级,在字符终端登陆后,再手工输入startx命令起动图形界面。可以用如下的方式更改:
用文本编辑器更改/etc/inittab文件,把
代码:
id:5:initdefault:
这一行,更改成
代码:
id:3:initdefault:
保存后就重起,系统就默认起动到字符界面。不同运行级别之间的差异的在于系统默认起动的服务的不同,如运行级别3默认不启动X图形界面服务,而运行级别5却默认起动。本质上是没有区别的,更无所谓不同级别间功能强弱的问题。用户完全可自给定义不同级别的默认服务。在任何运行级别,用户都可用init命令来切换到其他运行级别。
三,调出英文输入法:
我之所以要在前面费这么多笔端来讲系统运行级别,是由于对系统的认识是从顶部向下开始的。
先把默认运行级别更改成3级别,其实,假如你实在不想更改,就临时用init3命令切换到第3级。
这样你就可以用startx起动图形界面,之后用ctrlaltbackspace退出图形界面。请注意我说的是“退出”图形界面,而不是按ctrlalt+F2切到一个字符终端。
好了,一切由startx开始。当你须要在Linux系统中设置某个东西,或则配置某个服务的时侯,最关键的是要晓得,这一切是如何开始的。知其然必需知其所以然。假如你有空把/etc/rc.d目录下的系统起动时运行的脚本研读一遍,就完全晓得了/etc下的各类配置文件是拿来干哪些的、如何更改、修改后有哪些疗效等等。玩起系统来也能随心所欲想怎样改就如何改。这就是我仍然指出的,知其然一定要知其所以然。一定要深入系统,读脚本,学会用命令和手工更改系统配置文件。这样对系统就会有透彻的了解,整天用图形界面的工具是不能帮助你对系统有教为透彻深入的了解的,不同的linux系统提供的图形界面配置程序会不同,但命令和配置文件都是相同的,越是底层的东西越具有通用性。所以,应该先学会自动配置和更改系统配置文件,等熟悉了之后,再用图形界面的工具更改,便于降低工作量。
前面提了一下我解决问题的思路。我是沿着这个思路开始的:
英文输入法是在图形界面下使用的,是图形界面下运行的一个程序。而图形界面中的一切,都是由startx程序开启运行的。这就是问题的症结。
找出startx的位置:
代码:
[root@gucuiwen~]#whichstartx/usr/X11R6/bin/startx
看startx是一个脚本还是二补码文件:
代码:
[root@gucuiwen~]#file/usr/X11R6/bin/startx/usr/X11R6/bin/startx:Bourneshellscripttextexecutable
发觉startx是一个shell脚本,于是我打开它剖析并阅读,瞧瞧能不能找到一些关于输入法起动过程和相关变量的线索:
代码:
[root@gucuiwen~]#vi/usr/X11R6/bin/startx
我找到了该脚本在运行过程中调用的其他脚本和配置文件的信息:
代码:
userclientrc=$HOME/.xinitrcuserserverrc=$HOME/.xserverrcsysclientrc=/etc/X11/xinit/xinitrcsysserverrc=/etc/X11/xinit/xserverrc
但是晓得,startx的目的是找寻系统中可用的桌面系统X服务器系统、以及用户自定义的参数,最终调用xinit来初始化X图形界面。我没有在startx脚本中找到直接和起动输入法相关的代码,于是就可以肯定,输入法相关的代码在startx调用的脚本中。于是我来到
/etc/X11/xinit/目录下,阅读并剖析该目录下的脚本,这种脚本有些是startx直接调用的,有些是被startx调用的脚本再调用的,存在着多级嵌套的关系,没有一点耐心还真是搞不清楚。最终我在/etc/X11/xinit/xinitrc.d目录中的xinput.sh脚本中找到了和输入法相关的代码:
代码:
lang_region=$(echo$tmplang|sed-e's/"..*//')lang_region="zh_CN"#这一行是更改后加起来的forfin$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&&breakdone
通过剖析脚本,我晓得,图形界面启动的时侯脚本是按照LANG变量来决定是否启用输入法,以及启用哪种语言的输入法等。问题在于:我们还没有把LANG变量改成德语之前,系统得到的LANG变量是英文的,因而,它晓得须要在图形界面启动过程中启用英文输入法,但把LANG变量改成英语后,系统按照LANG变量晓得系统是英语的,它便不再启动英文输入法,也不再设置和导入相关的变量,致使英文输入法不可用。因而,只要在这个脚本中,“骗”过系统,让输入法脚本“以为”系统是英文的,它不就运行英文输入法,并导入相关变量了吗?于是,通过剖析脚本,我在xinput.sh中的:
代码:
lang_region=$(echo$tmplang|sed-e's/"..*//')旁边又添加了lang_region="zh_CN"
直接把lang_region=$(echo$tmplang|sed-e's/"..*//')更改成lang_region="zh_CN"也可以
多添加一行是为了之后改过来便捷,直接删掉添加的一行就可以了。
其实,把for循环中的/etc/X11/xinit/xinput.d/${lang_region}该成
/etc/X11/xinit/xinput.d/zh_CN也可以。
其实还有其他的改法,前提是你要懂得shell脚本的句型,看得懂脚本的意思。这样更改后,虽然系统是英语的,xinput.sh脚本也会去读取/etc/X11/xinit/xinput.d/zh_CN文件并导入其中的内容、设置好XMODIFERS等输入法变量,并运行iiimx输入法程序。
这么为何不在图形界面启动后直接运行iiimx输入法程序呢?实验一下就晓得,这根本不行。由于输入法程序是需要和被输入的应用程序配合运行的软件,在运行过程中须要导入好多变量。直接运行iiimx只运行了主程序,而没相关变量,没办法和应用程序配合完成输入工作。
完成更改工作后,保存脚本文件。输入startx命令启动图形界面,就可以用全英语的系统界面和英文输入法了。但须要注意的是:因为系统是全英语的,默认输入法也是英语,通过GNOME或则KDE菜单起动的应用程序第一次输入英文的时侯不能按ctrl空格来切换到英文,须要用键盘在任务栏上点击输入法图标切换,第一次切换后之后就可以用ctrl空格快捷键来切换中英文输入法了。
四,一些后续问题
个别软件,例如OpenOffice,通过GNOME或则KDE菜单启动的话,就算切换到英文输入法也输不进英文,这是由于整个桌面系统的环境是英语的,软件“继承”了英语环境的相关变量,这种软件就“认死理”,就是不让输入英文,这时侯可以打开一个gnome终端,把LANG变量临时设置成zh_CN.UTF-8:
[root@gucuiwen~]#LANG="zh_CN.UTF-8"
之后在这个gnome终端中,用命令打开openoffice:
[root@gucuiwen~]#oowriter&
这样OpenOffice就“继承”了gnome终端的LANG变量,起动后,工具栏和菜单等都是英文的,并且能输入英文。推而广之,任何软件都可以用这些方式,依据须要,打开英文界面的软件和英语界面的软件。要以英语界面运行软件时,只要从GNOME或则KDE菜单打开,要用英文界面运行软件时,在终端中修该LANG变量,从更改过LANG变量的终端中通过命令运行即可。其实,假如你还安装了其他语言的字体,你还可以以其他语言的界面来运行程序。如英语:
[root@gucuiwen~]#LANG="ja_JP.UTF-8"
[root@gucuiwen~]#gedit&
我用前面的两条命令打开的gedit编辑器就是全英语界面的,并且能输入英文和法文,并显示英文。因而达到,一个系统,多种语言和文字共存的目的。
其实,前提是要安装了英语字体和英语locale,否则所有有文字的地方会全部显示成一连串问号。其实,要先懂得原理,然后想怎样玩就如何玩,随心所欲,完全不受限制,充分享受用Linux的乐趣。
五,快速设置步骤:
1.更改/etc/sysconf/i18n文件,把
LANG="zh_CN.UTF-8"
更改成:
LANG="en_US.UTF-8"
2.更改/etc/X11/xinit/xinitrc.d/xinput.sh文件,把其中一行:
lang_region=$(echo$tmplang|sed-e's/"..*//')
更改成:
lang_region=”zh_CN”
3,重新启动图形界面,就可以用英语的界面而且正确显示英文和输入英文。