VMWare Fusion中CentOS命令行中文显示方块

现象


在VMWare中安装完CentOS之后,再将环境都设置为中文之后,直接在VMWare中的命令行中文显示为白色的方块,如下:
file

但是使用iTerm2或其他SSH客户端远程登录服务器之后,中文显示是正常的,如下:
file

根据知乎上jiangtao9999的回答,其原因并非服务器没有设置中文环境,也不是缺少中文的显示驱动,而是Linux内核的显示渲染引擎不支持中文。SSH客户端之所以能够正常显示中文,这是因为显示渲染由SSH客户端实现的。

检查是否包含完整的中文语言包

执行下面的命令

locale -a | grep "zh_CN"

正常应该显示如下结果:

zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8

如果显示不全或者空白的话,需要安装语言包

yum groupinstall "fonts" -y

然后通过下面的命令设置当前语言为中文:

echo 'export LC_ALL="zh_CN.UTF-8"' >> /etc/profile
source /etc/profile
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
source /etc/locale.conf

最后一定要重启服务器。

检查并安装中文字体

还有一种原因,是系统中缺少中文字体的缘故。

检查中文字体

首先需要使用 yum -y install fontconfig 命令安装字体库,然后就可以使用 fc-list :lang=zh 命令检查系统中是否有中文字体,如果列表是空白的说明系统中没有安装中文字体。

安装中文字体

创建中文字体文件夹并指定权限:

mkdir -p /usr/share/fonts/chinese
chmod -R 755 /usr/share/fonts/chinese

使用scp将本地的中文字体上传到服务器的上述目录下,Mac的字体在 /System/Library/Fonts/Library/Fonts 两个目录下。
接下来安装并生成字体索引:

yum install mkfontscale -y
cd  /usr/share/fonts/chinese
mkfontscale 

最后再执行 fc-list :lang=zh 命令,会发现下面出现了中文字体,如下:

/usr/share/fonts/chinese/msyh.ttf: Microsoft YaHei:style=Regular,Normal

使用fbterm

fbterm (Frame buffer terminal)是一个非常优秀的终端模拟器,可以在CentOS中安装fbterm替换Linux内核终端以解决VMWare中文显示方块的渲染问题。

编译安装fbterm

CentOS 6可以直接使用 yum install fbterm -y 命令直接安装,但在CentOS 7中需要通过源码编译安装。

yum -y install make gcc gcc-c++ fontconfig-devel freetype-devel gpm-devel libX11-devel libXmu-devel
wget -c https://www.javatang.com/_download/fbterm-1.7.0.tar.gz
tar xzvf fbterm-1.7.0.tar.gz
cd fbterm-1.7
./configure
make && make install

安装完成之后,只要执行 fbterm命令就可以进入模拟终端了,退出可以使用 exit 命令。

普通用户执行 fbterm 命令之后会出现下面的错误:

can't open frame buffer device!

file
这是因为fbterm命令要使用/dev/fb0设备,而此设备的所属是root:video, 显然,普通用户要想使用它,必须把该普通用户加入到video组中:

sudo gpasswd -a <username> video

这样上面的普通用户注销重新登录之后,就可以使用 fbterm 命令了。

不过这个时候依然无法显示中文,需要设置fbterm的字体。

设置fbterm中文字体

上面部分已经安装了中文字体,执行 fc-list :lang=zh 命令查看已经安装的中文字体列表。打开 vim ~/.fbtermrc 文件,font-names 后面增加中文字体,如下所示:

font-names=mono,Microsoft YaHei

退出保存之后,fbterm就可以正常显示中文了。
file

参考资料:

VMware Workstation客户端 Centos系统 中文乱码 UTF-8字符无法正常显示
为什么CentOS控制台下中文会显示方块?
centos7怎么安装中文环境支持包
CentOS7安装中文字体
fbterm

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注