5

成功实现Linux控制台(纯终端)中文显示与宽屏支持

 2 years ago
source link: https://blog.lilydjwg.me/2010/9/9/chinese-support-for-linux-tty.21162.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

成功实现Linux控制台(纯终端)中文显示与宽屏支持

本文来自依云's Blog,转载请注明。

这里的Linux控制台中文显示,当然不是指安装个zhcon/fbterm/fbiterm之类的东东啦。这些东西在我这里都有些bug。zhcon显示效果不错,还支持输入法,但是滚屏的时候文本几乎不动,根本无法正常使用w3m。fbterm显示的字体很丑,特别是在宽屏下。这个可以调,但我没能调出自己觉得满意的。fbiterm显示要好看点。记得都是有些显示上的问题的。在Ubuntu软件源里还有一个日本人做的jfbterm,在我这里有严重bug——启动Vim后无响应,退出出现段错误,然后无论怎么折腾键盘,就是没任何响应了……

我多想控制台能直接支持中文显示啊!

所以,经过长时间的磨砺后,我终于决定自动给内核打上中文显示的补丁。内核源码在http://www.kernel.org/下载,补丁在这里,我只下了前两个补丁。

这里说一下,打补丁的时候可以直接bzcat xxx|patch -p1,不需要先解压(我终于知道bzcat/zcat这种东西有什么用了 =_=!)。另外,记得参数加-p1哦。我不小心用-p0了,结果N多failed,吓到我了呢。

补丁打好后看看README文件就知道怎么编译了,在Arch的Wiki上有更详细的编译和安装说明。下面是我用过的命令——

mkdir ../build
make O=../build menuconfig
# 注意备份 ../build/.config 文件
make O=../build
sudo make O=../build modules_install
cd ../build
sudo cp -v arch/x86/boot/bzImage /boot/vmlinuz-2.6.35.3-lily
sudo cp -v System.map /boot/System.map-2.6.35.3-lily
#Ubuntu 用,注意有个 - 没了。。。
sudo mkinitramfs -k 2.6.35.3lily -o /boot/kernel26-lily
#Arch 用
#sudo mkinitcpio -k 2.6.35.3-lily -g /boot/kernel26-lily

首先是建立了个输出目录。以后几乎所有的make都要加上O=这个目录。第一个make是配置内核,N多选项,一项项看很费时的,而且似乎是根据系统情况生成的。这里和本文主题息息相关的是要记得选上framebuffer支持,然后选个字体编译进去。我还设置了分辨率的,不知道和后来支持宽屏有没有关系。另外,在这里可以启用启动时的图片。不知道是什么的请移步这里。默认的图片是Tux,当然是可以改的,直接替换drivers/video/logo下相应的图片就可以了,比如我替换的是logo_linux_clut224.ppm。ppm图片可以使用如下命令生成(via):

pngtopnm linuxlogo.png > linuxlogo.pnm
pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm
pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm

这些弄好后就开始make了,很耗时的,我这里大约用了一个多小时。

这些弄完后就可以重启了(要祈祷的哦 :-))。记得给内核传个vga=791之类的参数,虽然说不传这个也是可以显示汉字的。

幸运的话就这么就OK了,不过还不是宽屏的。我这里进X时会出现“工作在低画质模式”的提示,重启X后正常了,再回到控制台下,发现分辨率莫名地变成宽屏的了~~

后来lsmod看到加载了以前安装了但没有用的nouveau驱动,于是把/etc/X11/xorg.conf也给改了:

Section "Device"
Identifier      "Configured Video Device"
Driver  "nouveau"
# Driver        "nvidia"
Option  "NoLogo"        "True"
EndSection
Section "Module"
Load    "drm" # 这个是后来加的
Load    "glx"
EndSection

这样启用nouveau驱动,不用每次进图形界面时重启X了。控制台表现相当完美,除了不知道为什么登录前的那些文字变成了黄色的。。。而且,在图形界面与控制台界面切换相当迅速,不会先黑一下了。

但是,不能启动compiz了。compiz的有些窗口管理功能还是相当不错的。我尝试重装安装nvidia的官方驱动,新立得告诉我子进程返回了错误号10。去看了下日志:

*** Unable to determine the target kernel version. ***

也就是说,相应的内核模块无法编译了,不知道应该怎么hack,只好暂时放弃了。555...


2012年10月8日更新:在 ChinaUnix 上的补丁已经失效了。这里有另外的人维护的 cjktty 分支可直接使用。说明

2013年10月25日更新:repo.or.cz 上的 cjktty 不再更新了。新的仓库在 GitHub 上

2021年02月28日更新:Gentoo-zh 上的 cjktty 不再更新了。新的仓库在 zhmars/cjktty-patches


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK