解决Linux 纯命令界面下中文是方块乱码的问题
最近在学习Linux安全并给磁盘LUKS加密时,发现在telinit 1模式下,原本正常的中文字符均变成了方块乱码(如下图),这使得我们很难晓得命令的执行结果究竟是对还是错,为后续工作增加了一定的困难,磨刀不误砍柴工,那就先解决这个小问题。
( 在纯命令界面下,中文变成方块乱码:)
( 在图像界面中却)
方法一、zhcon虚拟机终端
学习过的辩证法告诉我们,解决问题需从正反两方面去考虑,因此,我们很容易的想到两个解决问题的方向:
1. 是将 Linux 执行消息均改成英文;
2. 而另一种则是将方块改回中文。
但博主在这里仅为读者提供了后一者的解决方式。在大量的查阅资料和手操实践过后,很遗憾的发现,均没能找到解决的方法,就在一筹莫展的时刻,感谢幸运女神的光顾,无疑的发现zhcon这个软件,zhcon是工作在Linux控制台下的高效双字节中/日/韩(CJK)虚拟终端,就像DOS环境中的UCDOS一样,为控制台(console)环境提供完整的双字节语言环境。
于是乎,动手!我最开始是选择Debian系的Kali Linux测试的。
1. 先查看语言配置文件,是否将语言改为中文UTF8
# sudo vim /etc/default/locale
修改内容如下:
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"
2. 安装zhcon:
# apt install -y zhcon
重启:
# reboot
重启之后进入tty纯命令模式,然后开启zhcon:
# init 3 或者 telinit 3 或者 telinit 1 等皆可
运行zhcon:
# zhcon --utf8
恭喜,你的执行消息中,中文不在是方块乱码了。
如果,你的是红帽系列的Linux,例在Centos Linux上yum是没有zhcon的包的,我们只能手动安装了。
1. 编译安装zhcon:
下载:
[root@localhost xyl]# wget http://sourceforge.net/projects/zhcon/files/zhcon/0.2.6/zhcon-0.2.5.tar.gz
[root@localhost xyl]# wget http://sourceforge.net/projects/zhcon/files/zhcon/0.2.6/zhcon-0.2.5-to-0.2.6.diff.gz
解压:
[root@localhost xyl]# tar zxvf zhcon-0.2.5.tar.gz
打补丁:
[root@localhost xyl]# cd zhcon-0.2.5
[xyl@localhost zhcon-0.2.5]# zcat ../zhcon-0.2.5-to-0.2.6.diff.gz | patch -p1
# 因为目前权威能找到的最新编译版zhcon是0.2.5版本,而zhcon-0.2.5-to-0.2.6.diff.gz是zhcon的一个升级包,所以我需要升级打补丁。
或者这样打补丁也可:
解压gz文件得到diff补丁文件:
[root@localhost xyl]# gzip -d zhcon-0.2.5-to-0.2.6.diff.gz
将解压好后的zhcon-0.2.5-to-0.2.6.diff补丁文件,打补丁到zhcon-0.2.5的源代码中去:
[root@localhost xyl]# patch -p0 < zhcon-0.2.5-to-0.2.6.diff
开始编译安装:
[root@localhost xyl]# ./zhcon-0.2.5/configure --prefix=/usr/local/zhcon
[root@localhost xyl]# make && make install
启动zhcon:
[root@localhost xyl]# /usr/local/zhcon/bin/zhcon --utf8
# 使用Ctrl+2来打开或关闭智能拼音输入法。
2. rpm包安装zhcon:
我们可以在官网下载安装: 官网下载链接
当然,热心的博主也提供了自己的网盘:博主网盘链接
提取码:cip3
[root@localhost xyl]# rpm -ivh zhcon-0.2.6-18-omv4000.x86_64.rpm
安装好zhcon后,在纯命令界面中启动zhcon即可:
# init3 或者 telint 1
# zhcon 或 zhcon --utf8
需要特别提醒的是,如果你的Linux字符集是en_US.UTF-8编码时,是用zhcon即可;如果你的默认字符编码是zh_CN.UTF-8,则使用zhcon --utf8。
zhcon的热键:
CTRL+ALT+H 帮助;
CTRL+D 退出。
输入法热键:
CTRL+SPACE 打开/关闭输入法;
ALT+SPACE 打开/关闭CJK方式;
CTRL+2 五笔;/ 全拼;
编码切换热键:
CTRL+F1 使用GB2312编码了;
CTRL+F2 使用GBK编码;
CTRL+F3 使用BIG5编码;
CTRL+F4 使用JIS编码;
CTRL+F5 使用KSCM编码;
CTRL+F7 切换输入法状态栏风格(光标跟随或底部固定)。
CTRL+F9 设置内码的识别方式:
按一次:内码手动识别;
按二次:自动识别GB与BIG5码;
按三次:自动识别GB与BIG5码,并用简体中文来显示;
按四次:自动识别GB与BIG5码,并用繁体中文来显示;
CTRL+F10 调出输入法系统菜单;
CTRL+. 切换中英文标点;
CTRL+, 切换中文全角/半角;
SHIFT+PGUP 上卷半屏历史记录;
SHIFT+PGDN 下卷半屏历史记录;
SHIFT+上方向箭 上卷一行历史记录;br
SHIFT+下方向箭 下卷一行历史记录。
方法二、 FbTerm 终端仿真器
FbTerm是支持中文显示的控制台,提供一个快速的终端仿真器,并直接运行在系统中的帧缓冲 (framebuffer) 之上。使用帧缓冲可在终端使用UTF-8文本t提高性能。它允许同一帧缓冲创建多达10个不同的终端窗口,每个窗口都有它的回滚历史。
注意点:
1. 普通用户若运行FbTerm,则需加入video组才有运行权限
2. 用户运行FbTerm后,会在用户主目录下生成 .fbtermrc 配置文件,我们可通过修改该文件达到理想的用户体验
Debian系Linux安装FbTerm终端仿真器
sudo apt install fbterm -y
启动FbTerm终端仿真器
FbTerm不同于zhcon的是,fbterm只能在tty终端界面下使用:
init 3 或者 telinit 3
启动
# fbterm (直接启动仅限root账户下)
倘若是普通用户必须先授权:
sudo gpasswd -a <username> video
$ fbterm
若不能看到中文,请按 Ctrl+Alt+E(或Ctrl+D)退出,执行如下命令:
LANG=zh_CN.utf-8 fbterm
fbterm