在Linux终端机上,显示中文等多种UTF-8文字

在Linux终端机上显示中文,可是个老大难问题。

最开始,比尔盖子根本就没意识到这个问题的严重性。Fedora在这个问题上可谓是相当有人性化关怀:使用同一账户登陆系统,在桌面环境中,Fedora会采用你所设置的语言显示文字;在GUI下的终端模拟器,也会采用用户自己设置的语言;而到了tty下,则会自动切换为英文显示。可见开发者在这个问题上用心良苦。后来,比尔盖子便尝试了Ubuntu。当我将终端从tty7切换到tty1并登录后,震惊我的不是Ubuntu那套“只有横没有竖”的字体,而是apt-get中的乱码。看来,Ubuntu这次深刻的告诉我了一个道理:中文是方块字。

也倒不是说看不懂英文,英文对于我们来说,毫无压力。而是你总不可能永远用Fedora。而不用Fedora,就会有问题:使用中文桌面,自然而然的,会设置LANG=zh_CN.utf8的环境变量。但是一旦到了tty下,中文立马变成方块字了。如果使用英文Locate吧,在GUI下有得不到中文显示。如果使用英文Locate,再手动将GUI的语言改成中文,可能在GUI的终端模拟器上,又得不到中文。好在现在的Gnome等环境,已经先进到足以规避此类问题的程度,可以做的和Fedora一样。但仍旧有一个问题挥之不去——就算是Fedora,在GUI崩溃之时,明明很多有用的文件就在系统中,只因是方块字从而和没有一样。

还好,如今有了Framebuffer之后,什么东西都能往终端机上放——视频,图片。当然,还有中文。fbterm就是一个相当不错的环境。然而,在fbterm没有加载之前,你还是不得不接受中文就是方块字的事实。无意中,比尔盖子发现了这个《内核补丁:字符终端下显示UTF-8字符》。然而,当我满心欢喜的点击链接时:该网站未备案已被关闭。于是便发邮件与作者沟通,结果毫无音讯。看到作者的博客已经很长时间未更新了,真不知是否被请去喝茶了?
昨天,突然看到此文下面的一条评论,大意是:

  
  
  
  
我修改了第一版文字显示补丁,现在可以用在3.3内核上。同时修改了第一版字库补丁,用了Unifont字体,该字体涵盖了Unicode标准中的所有可打印字符。在Archlinux x86_64下测试通过,测试的内核版本是linux-3.3.5-1和linux-3.3.6-1。 Archlinux PKGBUILD文件: https://bit.ly/archlinux-PKGBUILD (box.net) https://bit.ly/PKGBUILD-archlinux (Dropbox)
果然是极好的消息,现在终于有可用的补丁了。于是去Dropbox上下载到补丁。打上补丁之后,中文方块字依旧。后来去笔记本上试验,还遇到了新内核导致系统X11——Framebuffer——udev——所有模块失效的问题,最终发现只是modules.dep坏了。 废话已经说的太多了,现在终于可以进入正题了。

修改与配置内核

我假设你已经有过编译内核的经验,也知道如何根据自己的情况配置内核。 本补丁仅仅对UTF-8编码生效,不支持GBK, Big5等地方性编码。 在进行以下操作之前,请注意您终端的分辨率,至少是1024x768,即vga=791/792。如果不是,就会由于终端分辨率太低而无法加载中文字体。这意味着使用Nvidia闭源显卡驱动的人可能先要折腾一轮终端机分辨率的问题了。在您折腾完Framebuffer的分辨率后,就可以往下看了。

下载补丁

补丁的原作者是Youbest,我从呢楠私语这里获得了补丁文件,并且自己修改并编译。不过,我发现了Havanna修改好的patch,也就不用费神自己制作了。 补丁可以从这个文件夹下载到:http://biergaizi.info/pub/linux/kernel/. 使用Gentoo系统,并且使用gentoo-source-3.4.2及以上版本的的用户需要下载utf8-kernel-2.6-fonts-3.patch.tar.xz和gentoo-sources-utf8-core-1.patch;使用其它系统,或者你不知道Gentoo是什么,你需要下载utf8-kernel-2.6-fonts-3.patch.tar.xz和utf8-kernel-fonts-3.patch。

应用补丁

比尔盖子假设你,正处在有内核源代码的目录,比如/usr/src/linux。并且,适合于你的两个文件也放在这里。那么,请(以root)执行以下命令。

对于gentoo-soucres-3.4.2以上版本内核的用户

patch -p1 < gentoo-sources-utf8-core-1.patch
xzcat utf8-kernel-2.6-fonts-3.patch.tar.xz | patch -p1

对于主线内核与gentoo-soucres-3.4.2以下版本内核的用户

patch -p1 < utf8-kernel-fonts-3.patch
xzcat utf8-kernel-2.6-fonts-3.patch.tar.xz | patch -p1
为什么要把它们分开?好让两派用户看着舒服点。

配置内核

我在本章开始处已有提醒,我假设你已经有了一个能够完美工作的Framebuffer。 你需要开启以下内核选项:
Device Drivers  --->
    Graphics support  --->
         Console display driver support  --->
             [*]   Select compiled-in fonts
                 [*]   VGA 8x16 font (NEW)

编译内核

这可能对于你来说是废话。
make -j3
mount /boot 2> /dev/null
make modules_install install

# 对于 Grub Legacy,请修改您的内核配置文件,指向新内核
vim /boot/grub/menu.lst

# 对于 Grub2,请重新生成一份内核配置文件
grub-mkconfig -o /boot/grub/grub.cfg

# 对于Funtoo,事情变的简单多了,前提是你的配置允许你偷懒,比如使用通配符
boot-update

检查与使用新内核

reboot
现在开机,看看终端机的中文是否正常吧。 如果正常,你可以考虑在rc.conf设置zh_CN.uft8或zh_TW.utf8为默认编码。还可以将LANG=zh_CN.utf8作为参数传递给内核。 输入法可以使用uim-fep。

文章来源:http://biergaizi.info/archives/2012/07/1430.html

你可能感兴趣的:(在Linux终端机上,显示中文等多种UTF-8文字)