1. 程式人生 > >讓英文Linux系統顯示和輸入中文

讓英文Linux系統顯示和輸入中文

http://www.pogolinux.com.cn/forum/showthread.php?t=195

作者:顧翠文 (GuCuiwen)   Email :[email protected]

對於國內的Linux使用者,經常煩惱的一個問題是:系統常常在需要顯示中文的時候卻顯示成了亂碼,而由於某些原因,需要英文介面的系統的時候,卻苦於系統 不能正常輸入和顯示中文.另外,由於大部分主要Linux發行版都是以英語為主體的,英文介面的系統和應用程式不管在介面的美觀程度和穩定程度上都比中文 的略好一些,各種奇怪的BUG也要少一些。因此,很多稍微有英語基礎的Linux使用者都寧願使用英文介面的系統。但是,矛盾又突現出來:在英文系統下,如 何才能正常顯示和輸入中文呢?有沒有兩全其美的方案呢?因此,筆者開始探索如何解決這個問題。我的完美狀態是:系統和應用程式全部為英文(系統選單、應用 程式工具欄、預設輸入法等),而我需要閱讀和撰寫中文文件的時候,能正確的顯示中文並調出中文輸入法。經過嘗試,設定成功,現在以FC4 Linux為 例,講解一些相關知識和設定過程。

本文主要通過修改系統配置的過程來展現修改linux系統配置的一般思路和過程,如果你不太有耐心看完,請跳過文章的1—4節,直接看第五節快速設定部分。

一,相關變數介紹

我們知道大部分Linux系統是無所謂中文版和英文版的,以FC4 Linux為例,系統發行的時候全世界都一樣,系統是中文的還是英文的完全取決於你選 擇的語言包。不同國家的人在安裝使用的時候選擇屬於自己國家的語言包,應用程式中的語言也不是寫死的,它根據系統的設定來呼叫相關的語言,所以,一個應用 程式寫出來不經過修改,全世界不同國家的使用者都可以以母語介面使用它,這就事所謂的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是system font的簡稱,決定系統預設用哪一種字型。SUPPORTED變數決定系統支援的語言,即系統能夠顯示的語言。需要說明的是,由於計算機起源於英語國 家,因此,不管你把這些變數設定成什麼,英語總是預設支援的,而且不管用什麼字型,英文字型總包含在其中。

這些變數中LANG變數是在字元模式和圖形介面下都用到的,在你登入系統後就被讀取並生效,相信很多人在字元介面下輸入Linux命令的時候經常會遇到顯 示出來的出錯資訊是亂碼的情況,必需安裝zhcon或者cce等字元模式下的中文軟體才能正常顯示中文的出錯資訊。如果我不要他顯示中文亂碼,我也不要為 了看個很簡單的出錯資訊而特意起用zhcon那我該怎麼辦呢?一個簡單的零時解決的辦法就是設定一下LANG變數:
程式碼: [
[email protected]
~]# LANG="en_US.UTF-8"
即把系統的語言臨時設定成英文,或者更簡單一點,可以直接這樣:
程式碼: [[email protected] ~]# 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變數簡單的清空,因為這個變數不僅在字元模式下用到,在圖形介面下也用到,簡單清空在字元模式下確實不會有問題,但在圖形介面下,卻會造 成中文無法正常顯示的情況,在過去Re d ha t 系列的版本中i18n檔案中還有一個叫LANGUAGE的變數,專門控制圖形介面下的語言設定,現在的FC系列中已經把這兩個變數整合成一個變量了。

經過修改這個變數,重新起動圖形介面後,就可以看到介面一經完全是英文的了。但是按ctrl+空格卻不能調出中文輸入法,輸入法選單中也不能新增中文輸入 法。我們只簡單的修改了LANG變數改變了系統語言設定,當然這一步也可以用圖形介面下的工具修改,而不用親自修改配置檔案。

二,關於執行等級

這個問題似乎和這篇文章的的主題無關,但是介於現在越來越多的linux新手遇到linux圖形介面的問題,而且在中文輸入法設定過程中也牽涉到這些問題,因此想順便提一下。

現在的linux安裝完成後,預設就執行在第5個系統執行級別。在SYSTEM V 風格的UNIX系統中,系統被分為不同的執行級別,這和BSD分支的UNIX有所不同,常用的為0~6七個級別:

0 關機
1 單使用者
2 不帶網路的多使用者
3 帶網路的多使用者
4 保留,使用者可以自給定義
5 圖形介面的多使用者
6 重起系統

由於現在的Linux系統安裝完後就執行在第5個級別,即系統啟動後直接進入圖形介面,而不用在字元模式下登入後用startx或者xinit 來起動圖形介面。這樣看起來很方便。但是有什麼壞處呢? 一旦你改變了某些設定,顯示出問題的時候,系統不斷在圖形和字元間派徊,新手又不知道如何應對, 十分麻煩,而且對於學習研究Linux的人來說,這樣不利於瞭解和學習Linux底層的一些東西。很早就用Linux的老使用者都知道,過去的Linux如 redhat6.0,都是預設執行接別為3,即使後來的RedHat9.0也可以在安裝時候選預設字元登入還是圖形登入。但現在的FC系列和其他大多數版 本都不管三七二十一直接幫使用者選擇了直接圖形介面登入。雖然對於大多數菜鳥來說,Linux確實越來越簡單了,但是很多樂趣,那些新手也體驗不到了。

也許你不相信,直接圖形登入到系統確實會有很多問題,因此,作為一個有6年Linux使用經驗的Linux和Solaris 系統管理員,我強烈建議在系統安裝完成後把系統的預設執行等級設定在第3級,在字元終端登入後,再手工輸入startx 命令起動圖形介面。可以用如下的方法修改:
用文字編輯器修改 /etc/inittab檔案,把
程式碼: id:5:initdefault:
這一行,修改成
程式碼: id:3:initdefault:
儲存後就重起,系統就預設起動到字元介面。不同執行級別之間的差別的在於系統預設起動的服務的不同,如執行級別3預設不啟動X圖形介面服務,而執行級別5 卻預設起動。本質上是沒有區別的,更無所謂不同級別間功能強弱的問題。使用者完全可自給定義不同級別的預設服務。在任何執行級別,使用者都可用init 命令來切換到其他執行級別。

三,調出中文輸入法:

我之所以要在上面費那麼多筆墨來講系統執行級別,是因為對系統的認識是從底部向上開始的。
先把預設執行級別修改成3級別,當然,如果你實在不想修改,就臨時用init 3命令切換到第3級。

這樣你就可以用startx起動圖形介面,然後用ctrl+alt+backspace退出圖形介面。請注意我說的是“退出”圖形介面,而不是按ctrl+alt+F2切到一個字元終端。

好了,一切由startx開始。當你需要在Linux系統中設定某個東西,或者配置某個服務的時候,最關鍵的是要知道,這一切是怎麼開始的。知其然必需知 其所以然。如果你有空把/etc/rc.d目錄下的系統起動時執行的指令碼通讀一遍,就完全知道了/etc下的各種配置檔案是用來幹什麼的、如何修改、修改 後有什麼效果等等。玩起系統來也能隨心所欲想怎麼改就怎麼改。這就是我一直強調的,知其然一定要知其所以然。一定要深入系統,讀指令碼,學會用命令和手工修 改系統配置檔案。這樣對系統才會有透徹的瞭解,整天用圖形介面的工具是不能幫助你對系統有教為透徹深入的瞭解的,不同的linux系統提供的圖形介面配置 程式會不同,但命令和配置檔案都是相同的,越是底層的東西越具有通用性。所以,應當先學會手動配置和修改系統配置檔案,等熟悉了以後,再用圖形介面的工具 修改,以便減少工作量。

上面提了一下我解決問題的思路。我是順著這個思路開始的:

中文輸入法是在圖形介面下使用的,是圖形介面下執行的一個程式。而圖形介面中的一切,都是由startx程式開啟執行的。這就是問題的根源。

找出startx的位置:
程式碼: [
[email protected]
~]# which startx
/usr/X11R6/bin/startx
看startx是一個指令碼還是二進位制檔案:
程式碼: [[email protected] ~]# file /usr/X11R6/bin/startx
/usr/X11R6/bin/startx: Bourne shell script text executable
發現startx是一個shell 指令碼,於是我開啟它分析並閱讀,看看能不能找到一些關於輸入法起動過程和相關變數的線索:
程式碼: [[email protected] ~]# vi /usr/X11R6/bin/startx
我找到了該指令碼在執行過程中呼叫的其他指令碼和配置檔案的資訊:
程式碼: userclientrc=$HOME/.xinitrc
userserverrc=$HOME/.xserverrc
sysclientrc=/etc/X11/xinit/xinitrc
sysserverrc=/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"  #這一行是修改後加上去的
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 變數知道系統是英文的,它便不再啟動中文輸入法,也不再設定和匯出相關的變數,導致中文輸入法不可用。因此,只要在這個指令碼中,“騙”過系統,讓輸入法腳 本“以為”系統是中文的,它不就執行中文輸入法,並匯出相關變量了嗎? 於是,通過分析指令碼,我在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+空格快捷鍵來切換中英文輸入法了。

四,一些後續問題

某些軟體,比如Open Office,通過GNOME或者KDE選單啟動的話,即使切換到中文輸入法也輸不進中文,這是因為整個桌面系統的環境是英文的,軟體“繼承”了英文環境 的相關變數,這些軟體就“認死理”,就是不讓輸入中文,這時候可以開啟一個gnome終端,把LANG變數臨時設定成zh_CN.UTF-8 :

[
[email protected]
~]# LANG="zh_CN.UTF-8"

然後在這個gnome終端中,用命令開啟open office:

[[email protected] ~]# oowriter &

這樣Open Office就“繼承”了gnome終端的LANG變數,起動後,工具欄和選單等都是中文的,而且能輸入中文。推而廣之,任何軟體都可以用這種方法,根據 需要,開啟中文介面的軟體和英文介面的軟體。要以英文介面執行軟體時,只要從GNOME或者KDE選單開啟,要用中文介面執行軟體時,在終端中修該 LANG變數,從修改過LANG變數的終端中通過命令執行即可。當然,如果你還安裝了其他語言的字型,你還可以以其他語言的介面來執行程式。如日語:

[[email protected] ~]# LANG="ja_JP.UTF-8"
[[email protected] ~]# 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,重新啟動圖形介面,就可以用英文的介面並且正確顯示中文和輸入中文。

相關推薦

英文Linux系統顯示輸入中文

http://www.pogolinux.com.cn/forum/showthread.php?t=195 作者:顧翠文 (GuCuiwen)   Email :[email protected] 對於國內的Linux使用者,經常煩惱的一個問題是:系統常常在需要顯

ubuntu 11.10 下XTerm的配置(可顯示輸入中文

開啟/etc/X11/app-defaults/XTerm,在後面新增以下程式碼 Xft.dpi:96    xpdf.title: PDF    XTerm*faceSize: 10    XTerm*faceSize1: 10    XTerm*faceSize2:

解決openSUSE中Sublime Text 3的中文顯示輸入問題

ase continue opensuse back .so文件 text 裏的 測試 mes Sublime Text 2是免安裝的,下載完解壓就可以了。我這邊解壓路徑是/home/fhp/App/SublimeText2 為了能在終端直接使用sublime

解決Linux系統下Mysql資料庫中文顯示成問號的問題

當我們將開發好的javaWEB專案部署到linux系統上,操作資料庫的時候,會出現中文亂碼問題,比如做插入操作,發現新增到資料庫的資料中文出現論碼,下面就將解決linux下mysql中文亂碼問題! 開啟Linux視窗,啟動mysql。 連線mysql輸入show variables li

linux系統時間時區與internet時間同步

linux 時間 時區 同步問題如此圖紅色區域# /usr/sbin/ntpdate time.nist.gov //手動同步時間後,發現與網絡時間還是不不對# vi /etc/sysconfig/clock //發現是new_york,ZONE="America/New_Yo

linux 系統備份恢復

系統 版本 備份命令 是你 nor 例子 dir del log 轉自:http://blog.csdn.net/sunnylgz/article/details/8055315 在 使用Ubuntu之前,相信很多人都有過使用Windows系統的經歷。如果你備份過Wind

Linux 系統lsblkblkid命令

所有 mapper dev name xfs 塊設備 swa 3-9 per lsblk命令用於以樹狀的格式顯示所有可用的塊設備信息: [[email protected]/* */ ~]# lsblk NAME MAJ:MIN RM S

Linux系統管理維護常用命令

linuxLinux系統管理和維護常用命令Linux系統管理和維護常用命令ls 命令功能說明ls 命令顯示指定工作目錄下的內容,列出工作目錄所包含的文件及子目錄。語法結構:ls [選項] [路徑或文件]ls 選項及說明-a 顯示指定目錄下的所有文件以及子目錄,包含隱藏文件-d 只顯示目錄列表,不顯示文件-

Linux系統發展運行原理

檢查 服務器 記載 設備管理 經歷 當代中國 圖片 進程控制 發展史 本文屬作者本人觀點,若理解錯誤,歡迎指正。 操作系統簡介 計算機的出現是因為戰爭的需要,隨著計算機的誕生,操作系統也就應運而生。可以說計算機的發展史,相對來說是比較快速的發展。尤其是在當代中國,計算機更是

Linux系統啟動內核管理

lose ios 安裝操作系統 clas 內容 分區 inf initramfs 參數傳遞 Linux組成 由 kernel 和 rootfs 組成 單內核:(進程管理,內存管理,網絡管理, 驅動程序,文件系統, 安全功能) /boot/vmlinu

Linux系統開機啟動過程

linu 系統初始化 mark src 初始化 text 令行 圖形界面 圖形 提起操作系統這個詞,想必大家並不陌生,有電腦端操作系統和手機端操作系統。電腦端操作系統較為熟悉的就是微軟開發的windows操作系統,還有一種就是大家稍微陌生的linux操作系統,而手機端的操作

Linux 筆記 - 第十三章 Linux 系統日常管理之(三)Linux 系統日誌服務

pac ica link tor 包含 3.1 request closed comm 博客地址:http://www.moonxy.com 一、前言 日誌文件記錄了系統每天發生的各種各樣的事情,比如監測系統狀況、排查問題等。作為系統運維人員可以通過日誌來檢查錯誤發生的原因

linux系統賬號操作

登錄名 有用 clas 管理 add 時有 註釋 swd 多個 1,基本操作要求 實現用戶賬號的管理,要完成的工作主要有如下幾個方面: · 用戶賬號的添加、刪除與修改。· 用戶口令的管理。· 用戶組的管理。 2,用戶賬戶添加刪除和修改

linux 系統監控進程管理

inux 管理 殺死 資源 linux 系統 bubuko ps aux aux pgrep 1、命令top,查看cpu和內存使用,主要進程列表和占用資源。 2、內存使用命令foree -g 3、查詢所有java進程:pgrep -l java ------

linux 下pycharm 無法輸入中文

在linux下pycharm無法輸入中文 我的系統是linux16,安裝的ibus(pinyin),在瀏覽器及其它地方都可以正常輸入中文,在pycharm中可以正常顯示中文,但是就是不能自己從鍵盤輸入中文(從別的地方copy過來是可以的)。上網試樂多種方法,最終發現以下方法有效: 1)找到在

EC2-linux系統安裝配置jdk1.8詳細步驟

最近一直在找伺服器...經過同學推薦,我註冊了亞馬遜...免費使用一年...具體的大家百度就好..接下來正文了.... 伺服器我建立好了以後,首先下載linux版本的jdk1.8  我這裡的版本是1.8.0_171的... 第一步:附上下載地址  點我下載jdk

LINUX系統結構檔案管理

linux系統結構 1.linux系統是一個倒樹狀結構 2.linux中最大的目錄為“/”,根目錄(絕對路徑總是從根目錄開始) 3.“/”根目錄中的二級目錄是系統裝機時自動建立的 4.linux系統中,我們把“資料夾”稱為“目錄” 二級目錄資訊(需特別注意的目錄

03 Linux系統組成獲取命令幫助

遠端連線:   ssh協議:(簡稱:secure shell)      ~]# ss -tnl       檢視系統監聽於rcp協議的22號埠      ~]# ifconfig 或 ip addr list        檢視本機 ip 地址     在CentO

Part1 Linux系統賬號許可權管理

useradd /etc/passwd 使用者名稱:密碼佔位符:UID:GID:註釋資訊:家目錄:預設shell 定製使用者屬性 /etc/group 使用者名稱:x:GID:以此組為額外組的使用者列表: /etc/shadow登入名:加密密碼:最近以此密碼修改的時間:密碼最短使用期限:密碼最

Part1 Linux系統賬號權限管理

用戶名 uid 安全策略 standard 效應 upn use 時間 gpasswd useradd /etc/passwd 用戶名:密碼占位符:UID:GID:註釋信息:家目錄:默認shell 定制用戶屬性 /etc/group 用戶名:x:GID:以此組為額外