9
9
2010
21

成功实现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.ppmppm图片可以使用如下命令生成(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

Category: Linux | Tags: linux 中文支持 编译 | Read Count: 38895
Avatar_small
wbd 说:
Sep 09, 2010 07:35:23 AM

得不偿失呀!控制台下工作很少,终端就OK!

Avatar_small
依云 说:
Sep 09, 2010 07:58:18 AM

少不代表没用啊。我这么做的起因是现在经常启动的时候fsck给我来点乱码。。。另外就是图形界面的启动还是挺慢的。如果只是拷点文件查点数据什么的我想不开X。

Tenfar 说:
Sep 09, 2010 05:24:07 PM

直接用NV的二进制驱动.可以编译内核模块解决内核版本不对的问题.这个不叫hack拉.

Avatar_small
依云 说:
Sep 09, 2010 06:26:03 PM

好吧,不用新立得,我去官网上下驱动。它竟然把整个文件当纯文本发给我的浏览器了,差点弄死我的火狐。。。

Avatar_small
wbd 说:
Sep 09, 2010 09:43:35 PM

有时就会有这个问题,可以去美国网站下,我一般都是下英文的。不知道为什么?

haha 说:
Sep 24, 2010 03:29:35 AM

我也喜欢纯终端,曾经在纯终端下放歌看电影。 支持lz

Avatar_small
依云 说:
Sep 24, 2010 08:45:37 AM

呵呵,谢谢支持。我现在弄了个没X的Arch装在移动硬盘里,支持中文显示,支持网络聊天(finch),当然也支持mplayer~~

沈觅仁 说:
Sep 30, 2010 09:40:30 PM

豹哥提供的那个UTF-8中文的补丁的确很好很强大,从 2.6.2x就一直用到现在。

宽屏终端方面,我比较喜欢用开源驱动+KMS,真的很舒服……

Avatar_small
依云 说:
Sep 30, 2010 10:23:16 PM

Google了半天,似乎KMS只支持ATI的显卡?

我看到还有在grub2里用915resolution的,以后有时间再一一尝试了。

荒野无灯 说:
Oct 08, 2010 04:42:07 AM

嗯,有时候关掉gdm想在console下听歌,中文都是乱码,非常郁闷的事。又不想装zhcon....

ctos 说:
Oct 27, 2010 05:46:14 AM

终于找到个解决中文的方法了,回去试试看。
至于安装显卡驱动,uname -r看版本,应该是在/lib/modules/下面的对应kernel里面建一个build文件夹指向/usr/src/下对应版本的的kernel header就可以了吧

Avatar_small
hosanna 说:
Nov 11, 2010 07:38:21 PM

Gentoo用户,一直以来用的是framebuffer+cjk-source,中文显示无问题,可惜的是没有console下的输入法!
参考:http://www.linuxsir.org/bbs/thread356860.html

Avatar_small
依云 说:
Nov 11, 2010 08:28:59 PM

这个也是要编译内核吧。
中文输入的话,我现在是在vim里用vimim,然后通过screen或者鼠标复制,有点麻烦。
另外,我的移动版Arch在我的电脑上截出来的图都是花的。。。

E7 说:
Mar 07, 2011 04:57:53 PM

用豹哥的补丁很久啦,呵呵。。。

Sunday 说:
Nov 10, 2011 11:05:53 AM

兄台也是Arch fans ?

alan 说:
Jan 11, 2012 07:40:24 PM

Fbterm在我这里也是字体破碎,google无果;
zhcon倒是正常,不过zhcon --utf8正常显示中文但是w3m显示不正常,要光标选择过的行才会显示文字;zhcon不能显示中文w3m显示却正常了,还是zhcon凑合着用了。

比尔盖子 说:
Apr 14, 2012 05:44:34 PM

这是正常的,因为Nvidia的驱动本来就是个Shell脚本,只不过包括了二进制文件。右键,选择“储存为”就行了。另外Nvidia的私有驱动不支持framebuffer。

双核CPU要make -j3是因为I/O操作需要时间,make -j3使用三线程编译内核,让CPU始终处于超负荷状态,节省了I/O的时间。超负荷也没关系,有调度器呢。

不要遇到问题不求甚解。

Avatar_small
依云 说:
Apr 14, 2012 06:19:45 PM

那个是服务器配置问题吧。我记得那个文件是 .bin 结尾的?给它加个 MIME 类型就可以了嘛。

比尔盖子 说:
Jun 03, 2012 11:07:34 AM

不是.bin的,是.sh的,所以怎样都无法避免直接被解析出来,除非给.sh加steam的MIME,但这就不规范了。

Avatar_small
依云 说:
Jun 03, 2012 04:28:34 PM

是文本类型就一定要在浏览器中显示吗,我刚好知道了有个头叫:Content-Disposition 呢。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com