现象
在VMWare中安装完CentOS之后,再将环境都设置为中文之后,直接在VMWare中的命令行中文显示为白色的方块,如下:
但是使用iTerm2或其他SSH客户端远程登录服务器之后,中文显示是正常的,如下:
根据知乎上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!
这是因为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就可以正常显示中文了。
参考资料:
VMware Workstation客户端 Centos系统 中文乱码 UTF-8字符无法正常显示
为什么CentOS控制台下中文会显示方块?
centos7怎么安装中文环境支持包
CentOS7安装中文字体
fbterm