让中文Linux系统显示和输入英文对于国外的Linux用户常常苦恼的一个问题是系统经常在须要显示英文的时侯却显示成了乱码而因为个别缘由须要中文界面的系统的时侯却苦于系统不能正常输入和显示英文另外因为大部份主要Linux发行版都是以英文为主体的中文界面的系统和应用程序不管在界面的美观程度和稳定程度上都比英文的略好一些各类奇怪的BUG也要少一些因而好多稍为有英文基础的Linux用户都宁可使用中文界面的系统并且矛盾又突现下来在中文系统下怎么能够正常显示和输入英文呢有没有两全其美的方案呢因而笔者开始探求怎样解决这个问题我的完美状态是系统和应用程序全部为中文系统菜单应用程序工具栏默认输入法等而我须要阅读和撰写英文文档的时侯能正确的显示英文并调出英文输入法经过尝试设置成功如今以FC4Linux为例讲解一些相关知识和设置过程本文主要通过更改系统配置的过程来诠释更改linux系统配置的通常思路和过程倘若你不太有耐心看完请跳过文章的14节直接看第五节快速设置部份一相关变量介绍我们晓得大部份Linux系统是无所谓英文版和日文版的以FC4Linux为例系统发行的时侯全世界都一样系统是英文的还是英语的完全取决于你选择的语言包不同国家的人在安装使用的时侯选择属于自己国家的语言包应用程序中的语言也不是写死的它按照系统的设置来调用相关的语言所以一个应用程序写下来不经过更改全世界不同国家的用户都可以以母语界面使用它这就事所谓的internationalization国际化简称i18n这也是未来软件的发展趋势这么假如我在系统中安装了不同的语言包和不同的字体系统是怎样判别我所要的语言界面并调用相关的字体的呢系统中这些文件和变量在控制那些呢在redHat和FC系列Linux系统下记录混凝土养护记录下载土石方填筑监理旁站记录免费下载集备记录下载集备记录下载集备记录下载系统默认使用语言的文件是etcsysconfigi1818n假如默认安装的是英文的系统i18n的内容如下代码LANG"zh_CNUTF-8"SYSFONT"latarcyrheb-sun16"SUPPORTED"zh_CNUTF-8zh_CNzh"其中LANG变量是language的简称稍为有英文基础的用户一看就看下来这个变量是决定系统的默认语言的即系统的菜单程序的工具栏语言输入法默认语言等SYSFONT是systemfont的简称决定系统默认用哪一种字体SUPPORTED变redhat linux 9.0
量决定系统支持的语言即系统才能显示的语言须要说明的是因为计算机起源于德语国家为此不管你把那些变量设置成哪些英文总是默认支持的并且不管用哪些字体中文字体总包含在其中这种变量中LANG变量是在字符模式和图形界面下都用到的在你登入系统后就被读取并生效相信好多人在字符界面下输入Linux命令的时侯常常会碰到显示下来的出错信息是乱码的情况必需安装zhcon或则cce等字符模式下的英文软件能够正常显示英文的出错信息假如我不要他显示英文乱码我也不要为了看个很简单的出错信息而特意起用zhcon那我该怎样办呢一个简单的零时解决的办法就是设置一下LANG变量代码[rootgucuiwen]LANG"en_USUTF-8"即把系统的语言临时设置成中文或则更简单一点可以直接这样代码[rootgucuiwen]LANG""即把LANG变量清空因为法语是无论哪些情况都支持的LANG变量被清空后系统就默认用法语这样设置后在字符模式下输出的出错信息等就是全英语的了但这些设置是临时的只是临时改变了LANG这个bash变量而已当退出重新登陆或则切换到其他字符终端后就无效了到现今读者应当想到了只要把i18n文件中的LANG变量设置成中文的en_USUTF-8就可以永久解决这个问题了更改后的文件如下代码LANG"zh_CNUTF-8"LANG"en_USUTF-8"SYSFONT"latarcyrheb-sun16"SUPPORTED"zh_CNUTF-8zh_CNzh"请不要把LANG变量简单的清空由于这个变量除了在字符模式下用到在图形界面下也用到简单清空在字符模式下确实不会有问题但在图形界面下却会导致英文未能正常显示的情况在过去Redhat系列的版本中i18n文件中还有一个叫LANGUAGE的变量专门控制图形界面下的语言设置现今的FC系列中早已把这两个变量整合成一个变量了经过更改这个变量重新起动图形界面后就可以看见界面一经完全是英语的了并且按ctrl空格却不能调出英文输入法输入法菜单中也不能添加英文输入法我们只简单的更改了LANG变量改变了系统语言设置其实这一步也可以用图形界面下的工具更改而不用亲自更改配置文件二关于运行等级这个问题其实和这篇文章的的主题无关而且介于现今越来越多的linux菜鸟遇见linux图形界面的问题并且在英文输入法设置过程中也涉入
到这种问题因而想顺便提一下现今的linux安装完成后默认就运行在第5个系统运行级别在SYSTEMV风格的UNIX系统中系统被分为不同的运行级别这和BSD分支的UNIX有所不同常用的为06七个级别0死机1单用户2不带网路的多用户3带网路的多用户4保留用户可以自给定义5图形界面的多用户6重起系统因为现今的Linux系统安装完后就运行在第5个级别即系统启动后直接步入图形界面而不用在字符模式下登陆后用startx或则xinit来起动图形界面这样看上去很便捷并且有哪些益处呢一旦你改变了个别设置显示出问题的时侯系统不断在图形和字符间派徊菜鸟又不晓得怎么应对极其麻烦并且对于学习研究Linux的人来说这样不利于了解和学习Linux底层的一些东西很早就用Linux的老用户都晓得过去的Linux如redhat60都是默认运行接别为3虽然后来的RedHat90也可以在安装时候选默认字符登陆还是图形登入但如今的FC系列和其他大多数版本都不管三七二十一直接帮用户选择了直接图形界面登陆其实对于大多数新手来说Linux确实越来越简单了并且好多乐趣这些菜鸟也体验不到了其实你不相信直接图形登入到系统确实会有好多问题因而作为一个有6年Linux使用经验的Linux和Solaris系统管理员我强烈建议在系统安装完成后把系统的默认运行等级设置在第3级在字符终端登陆后再手工输入startx命令起动图形界面可以用如下的方式更改用文本编辑器更改etcinittab文件把代码id5initdefault这一行更改成代码id3initdefault保存后就重起系统就默认起动到字符界面不同运行级别之间的差异的在于系统默认起动的服务的不同如运行级别3默认不启动X图形界面服务而运行级别5却默认起动本质上是没有区别的更无所谓不同级别间功能强弱的问题用户完全可自给定义不同级别的默认服务在任何运行级别用户都可用init命令来切换到其他运行级别三调出英文输入法我之所以要在前面费这么多笔端来讲系统运行级别是由于对系统的认识是从顶部向下开始的先把默认运行级别更改成3级别其实假如你实在不想更改就临时用init3命令切换到第3级这样你就可以用startx起动图形界面之后用ctrlaltbackspace退出图形界面请注意我说的是退出图形界面而不是按ctrlalt+F2
切到一个字符终端好了一切由startx开始当你须要在Linux系统中设置某个东西或则配置某个服务的时侯最关键的是要晓得这一切是如何开始的知其然必需知其所以然假如你有空把etcrcd目录下的系统起动时运行的脚本研读一遍就完全晓得了etc下的各类配置文件是拿来干哪些的怎么更改更改后有哪些疗效等等玩起系统来也能随心所欲想怎样改就如何改这就是我仍然指出的知其然一定要知其所以然一定要深入系统读脚本学会用命令和手工更改系统配置文件这样对系统就会有透彻的了解整天用图形界面的工具是不能帮助你对系统有教为透彻深入的了解的不同的linux系统提供的图形界面配置程序会不同但命令和配置文件都是相同的越是底层的东西越具有通用性所以应该先学会自动配置和更改系统配置文件等熟悉了之后再用图形界面的工具更改便于降低工作量前面提了一下我解决问题的思路我是沿着这个思路开始的英文输入法是在图形界面下使用的是图形界面下运行的一个程序而图形界面中的一切都是由startx程序开启运行的这就是问题的症结找出startx的位置代码[rootgucuiwen]whichstartxusrX1111RR66binstartxbinstartx看startx是一个脚本还是二补码文件代码[rootgucuiwen]fileusrX11R6binstartxusrX11R6binstartxBourneshellscripttextexecutable发觉startx是一个shell脚本于是我打开它剖析定性数据统计剖析pdf销售业绩剖析模板建筑结构震害剖析销售进度剖析表易迅商城竞争战略剖析并阅读瞧瞧能不能找到一些关于输入法起动过程和相关变量的线索代码[rootgucuiwen]viusrX1111RR66binstartxbinstartx我找到了该脚本在运行过程中调用的其他脚本和配置文件的信息代码userclientrcHOMExinitrcuserserverrcHOMExserverrcsysclientrcetcX11xinitxinitrcsysserverrcetcX11xinitxserverrc而且晓得startx的目的是找寻系统中可用的桌面系统X服务器系统以及用户自定义的参数最终调用xinit来初始化X图形界面我没有在startx脚本中找到直接和起动输入法相关的代码于是就可以肯定输入法相关的代码在startx调用的脚本中于是我来到etcX11xinit目录下阅读并剖析该目录下的脚本这种脚本有些是
redhat 7.2中文输入法redhat 7.2中文输入法
startx直接调用的有些是被startx调用的脚本再调用的存在着多级嵌套的关系没有一点耐心还真是搞不清楚最终我在etcX11xinitxinitrcd目录中的xinputsh脚本中找到了和输入法相关的代码代码lang_regionechotmplangsed-eslang_region"zh_CN"这一行是更改后加起来的forfinHOMExinputdlang_regionHOMExinputddefaultetcX11xinitxinputdlang_regionetcX11xinitxinputddefaultdo[-rf]sourcefbreakdone通过剖析脚本我晓得图形界面启动的时侯脚本是按照LANG变量来决定是否启用输入法以及启用哪种语言的输入法等问题在于我们还没有把LANG变量改成德语之前系统得到的LANG变量是英文的因而它晓得须要在图形界面启动过程中启用英文输入法但把LANG变量改成英语后系统按照LANG变量晓得系统是英语的它便不再启动英文输入法也不再设置和导入相关的变量引起英文输入法不可用因而只要在这个脚本中骗过系统让输入法脚本以为系统是英文的它不就运行英文输入法并导入相关变量了吗于是通过剖析脚本我在xinputsh中的代码lang_regionechotmplangsed-es旁边又添加了lang_region"zh_CN"直接把lang_regionechotmplangsed-es更改成lang_region"zh_CN"也可以多添加一行是为了之后改过来便捷直接删掉添加的一行就可以了其实把for循环中的etcX11xinitxinputdlang_region该成etcX11xinitxinputdzh_CN也可以其实还有其他的改法前提是你要懂得shell脚本的句型看得懂脚本的意思这样更改后虽然系统是英语的xinputsh脚本也会去读取etcX11xinitxinputdzh_CN文件并导入其中的内容设置好XMODIFERS等输入法变量并运行iiimx输入法程序这么为何不在图形界面启动后直接运行iiimx输入法程序呢实验一下就晓得这根本不行由于输入法程序是需要和被输入的应用程序配合运行的软件在运行过程中须要导入好多变量直接运行iiimx只运行了主程序而没相关变量没办法和应
linux内核
用程序配合完成输入工作完成更改工作后保存脚本文件输入startx命令启动图形界面就可以用全中文的系统界面和英文输入法了但须要注意的是因为系统是全中文的默认输入法也是英语通过GNOME或则KDE菜单起动的应用程序第一次输入英文的时侯不能按ctrl空格来切换到英文须要用键盘在任务栏上点击输入法图标切换第一次切换后之后就可以用ctrl空格快捷键来切换中英文输入法了四一些后续问题个别软件例如OpenOffice通过GNOME或则KDE菜单启动的话虽然切换到英文输入法也输不进英文这是由于整个桌面系统的环境是英语的软件承继了英语环境的相关变量这种软件就认死理就是不让输入英文这时侯可以打开一个gnome终端把LANG变量临时设置成zh_CNUTF-8[rootgucuiwen]LANG"zh_CNUTF-8"之后在这个gnome终端中用命令打开openoffice[rootgucuiwen]oowriter这样OpenOffice就承继了gnome终端的LANG变量起动后工具栏和菜单等都是英文的并且能输入英文推而广之任何软件都可以用这些方式依照须要打开英文界面的软件和英语界面的软件要以英语界面运行软件时只要从GNOME或则KDE菜单打开要用英文界面运行软件时在终端中修该LANG变量从更改过LANG变量的终端中通过命令运行即可其实假如你还安装了其他语言的字体你还可以以其他语言的界面来运行程序如英语[rootgucuiwen]LANG"ja_JPUTF-8"[rootgucuiwen]gedit我用前面的两条命令打开的gedit编辑器就是全英语界面的并且能输入英文和法文并显示英文因而达到一个系统多种语言和文字共存的目的其实前提是要安装了英语字体和英语locale否则所有有文字的地方会全部显示成一连串问号其实要先懂得原理以后想怎样玩就如何玩随心所欲完全不受限制充分享受用Linux的乐趣五快速设置步骤新产品开发流程的步骤课题研究的五个步骤成本核算步骤微型课题研究步骤数控机床操作步骤1更改etcsysconfi1818n文件把LANG"zh_CNUTF-8"更改成LANG"en_USUTF-8"2更改etcX11xinitxinitrcdxinputsh文件把其中一行lang_regionechotmplangsed-es更改成lang_regionzh_CN3重新启动图形界面就可以用英语的界面而且正确显示英文和输入英文