您的位置:首页 > 运维架构 > Linux

如何通过vSphere客户端打开Linux控制台显示中文

2016-07-15 13:20 627 查看
出于安全考虑,一些提供服务的虚拟机只开放服务端口,其他所有端口关闭,包括管理端口。我们遇见这样一个场景,用户搭建一个Web服务器在Linux上,除80端口外关闭一切其他端口;如果要维护该虚拟服务器,管理员只能通过vSphere Client或者Web Client打开虚拟机控制台进行操作。而该虚拟机运行了Linux操作系统,除命令行外也没有图形界面,不巧的是服务软件被封装,操作界面全部是中文的,在Linux控制台里没法正常显示,全部乱码。

我们做了以下测试能够正确显示中文:

A. 如果在Linux图形界面里运行命令行终端程序能够正确显示中文,如图显示。



B. 如果使用putty等软件通过ssh远程连接Linux,且字符编码使用UTF-8也是可以正常显示的,设置如图。



C. 但用户不允许运行sshd,不允许运行图形界面即X-Windows;需求是必须使用Linux命令行控制台,但控制台又没法直接加载显示中文字符,所以我们想到用framebuffer的机制以位图方式显示中文而不是直接显示中文字符的点阵。

Linux控制台显示中文需要使用framebuffer console。这需要内核支持framebuffer并且使用支持CJK的终端软件,比如fbterm, jfbterm, zhcon。在虚拟机环境下和在物理机条件下是一样的设置。下面以debian6为例说明步骤。

1. 安装debian6,安装中最好直接选择中文界面选择中文支持,这样可以把字库就安装进去了。 列表是我安装后的中文字库包,xfonts-*是X图形环境使用,可以不用装。

# dpkg -l | grep "font\|ttf" | grep -i chinese
ii ttf-arphic-bsmi00lp 2.10-8 "AR PL Mingti2L Big5" Chinese TrueType font by Arphic Technology
ii ttf-arphic-gbsn00lp 2.11-9 "AR PL SungtiL GB" Chinese TrueType font by Arphic Technology
ii ttf-arphic-gkai00mp 2.11-8 "AR PL KaitiM GB" Chinese TrueType font by Arphic Technology
ii ttf-arphic-ukai 0.2.20080216.1-1 "AR PL UKai" Chinese Unicode TrueType font collection Kaiti style
ii ttf-arphic-uming 0.2.20080216.1-3 "AR PL UMing" Chinese Unicode TrueType font collection Mingti style
ii xfonts-intl-chinese 1.2.1-8 International fonts for X -- Chinese
ii xfonts-intl-chinese-big 1.2.1-8 International fonts for X -- Chinese big

备注: 如果没有安装中文字库,使用下面命令安装

# apt-get install ttf-arphic-*

2. 检查环境变量locale设置成简体中文。

# env | grep "LANG\|LANGUAGE\|LC_ALL"

LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_ALL=zh_CN.UTF-8

3. 安装下面任意一款支持CJK的终端软件。CJK是中国、日本、韩国的英文首字母合成。

# apt-get install fbterm jfbterm zhcon

ii fbterm 1.6-2 A fast framebuffer based terminal emulator for Linux
ii jfbterm 0.4.7-8 multilingual terminal on Linux framebuffer
ii zhcon 1:0.2.6-6.1 A Fast Console CJK System Using FrameBuffer

4. 安装framebuffer内核模块的依赖包。下面是安装好的包列表。

# apt-get install v86d

# dpkg -l | grep v86d
ii v86d 0.1.9-1 daemon to run x86 code in an emulated environment

5. 装载framebuffer内核模块, 当然前提是发行版已经编译好了,通常以模块形式存在。否则需要自己配置重编译内核。

装载命令:
# modprobe uvesafb

检查命令1:
# lsmod | grep uvesafb
vmuser@debian:~$ lsmod | grep uvesafb
uvesafb 17548 2
cn 3667 2 uvesafb

检查命令2:
# dmesg | grep fb
[ 52.605692] uvesafb: VMware, Inc, VMware virtual machine, 2.0, OEM: V M ware, Inc. VBE support 2.0, VBE v2.0
[ 52.608410] uvesafb: no monitor limits have been set, default refresh rate will be used
[ 52.608512] uvesafb: VBE state buffer size cannot be determined (eax=0x0, err=0)
[ 52.608522] uvesafb: scrolling: redraw
[ 52.615151] uvesafb: framebuffer at 0xd8000000, mapped to 0xf8280000, using 4096k, total 4096k
[ 52.615154] fb0: VESA VGA frame buffer device

6. 运行在第二步中安装的支持CJK的终端软件

# fbterm

7. 这时就可以看简体中文了,使用命令cat/vi等文本工具确认。

# cat chinese.txt



小结:

其实在Linux控制台显示中文的问题并不是在vSphere环境中才有发生,在物理机环境的默认配置下表现是一样的,中文乱码。由于现在有的用户其虚拟化整合比例已经很高,没有物理机直接奔跑Linux,加上使用ssh远程连接又能正确显示中文,所以很自然认为是vSphere的虚拟机控制台不能根据汉字编码正确解析中文。这个案例需要同时了解Linux有关语言字符集支持等相关知识,从多个角度、层面去分析和尝试从而找到解决办法,一味相信万能的vSphere并不能解脱我们。

再次归纳关键步骤:
1. 安装中文字库
2. 设置中文环境变量
3. 安装v86d模拟服务程序
4. 装载framebuffer 内核模块
5. 安装运行中文终端程序fbterm

其他:
国内可以使用下面的软件数据源安装:
deb http://mirrors.163.com/debian squeeze main non-free contrib
deb http://mirrors.163.com/debian-security squeeze/updates main contrib non-free
deb-src http://mirrors.163.com/debian squeeze main non-free contrib
deb-src http://mirrors.163.com/debian-security squeeze/updates main contrib non-free
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 中文 控制台