忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
1234下一页
最近访问板块 发新帖
查看: 13227 | 回复: 35

[FreeBSD] 用vt让FreeBSD终端显示汉字 [复制链接]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2015-05-20 17:50 |显示全部楼层
本帖最后由 lsstarboy 于 2015-05-20 17:55 编辑

在FreeBSD下显示汉字一直是我们FBer的梦想,原来要加一大堆的东西才能显示,自从10.1以后,多了个vt驱动,终于可以在终端下玩汉字了,虽然步骤不是很简单,色彩不是很丰富,但至少多了一种可能。
先来看几个条件:首先需要在内核中编译vt,顺便把vt_vga也要带上,否则显示可能不那么顺利;其次,需要一个字体,没有字体只能显示\0xfa\0xfa这之类的符号;最后,还需要配置一下,让vt跟字体挂上钩。
我们一步一步来做。
1、编译内核:
        在内核文件中加入下面四行:
  1. options TERMINAL_NORM_ATTR=(FG_GREEN|BG_BLACK)
  2. options TERMINAL_KERN_ATTR=(FG_LIGHTCYAN|BG_BLACK)
  3. device          vt
  4. device          vt_vga
复制代码
同时注释掉下面三行:
  1. #device         sc
  2. #options        SC_PIXEL_MODE   # add support for the raster text mode
  3. #device         vga             # VGA video card driver
复制代码
解释一下:
加上的大写字母的那两行,表示vt的背景色和前景色,前一行是正常的输出,采取的颜色方案是:黑色背景,绿色前景(黑客帝国的经典配色方案哦!),后一行是内核的输出,淡青色前景,黑色背景。具体的颜色取值在本文后方查找。
去掉的三行,前两行是sc的,老式的syscons,这个和vt是互斥的,只能选一个,vga和vt_vga也是互斥的,vga其实会自动禁掉。
重新编译内核,重启,你会发现已经有变色的屏幕了。
但是再还有一个重要的步骤:修改源代码,否则虽然你可以显示彩色,但是不能显示汉字!修改的文件是/usr/src/sys/dev/vt/vt_font.c:
左边是源代码,后面是修改的值:
  1. 44    #define VTFONT_MAXMAPPINGS  8192                #define        VTFONT_MAXMAPPINGS        65536
  2. 45        #define VTFONT_MAXGLYPHSIZE 1048576                #define        VTFONT_MAXGLYPHSIZE        2097152
  3. 46        #define VTFONT_MAXDIMENSION 128                #define        VTFONT_MAXDIMENSION        128
复制代码
原因是默认值太小,装不下字体文件,要改大一些才能装下这上万个字的字体。该值在新版中好像已经纠正了。
(CU正文没有flash不能上传图片,请见二楼)


如果没彩色,那么请检查一下/boot/loader.conf,在里面加上下面两行试试,在大多数情况下,已经是默认的了:
  1. hw.vga.textmode=0
  2. kern.vty=vt
复制代码
2、转换vt支持的字体
vt使用的字体是fnt,在/usr/share/vt/fonts目录下,这个目录下已经有部分字体,但仅限英文、俄文等少数语言,要使用CJK,也就是中韩日文,就必须自己做字体。但是vt又不能使用windows下的ttf字体,并且目前也没有找到转换程序,这使得做字体非常麻烦。
好在开源界大有热心人士:http://www.unifoundry.com/unifont.html给我们提供了一系列的中文字体,这个unifont是基本文泉驿字体做的,虽然仅支持几千个汉字,但是可以应付一般的应用了,连“镕”字都有。在这个页面上,下载hex的版本,虽然有人推荐bdf的版本,但是经过我测试,转换不成功,只有hex的版本才能转换成功。
把下载下来的gz文件解压,然后用系统自带的vtfontcvt转换:
  1. # gunzip unifont_sample-7.0.06.hex.gz
  2. # vtfontcvt unifont_sample-7.0.06.hex aa.fnt
复制代码
这样便得到了一个aa.fnt,这个便是我们需要的字体文件了。

3、告诉系统使用中文字体:
要使用aa.fnt,就必须先把它复制到vt的字体目录里:
  1. cp aa.fnt /usr/share/vt/fonts/
复制代码
然后还要用rc.conf,告诉系统在启动时加载中文字体,在rc.conf里加入下面一行:
  1. font8x16="aa"
复制代码
注意引号里面的字符对应于字体文件的名字,如果你使用了其他文件名,请修改这个地方。

重新启动,会在启动信息里找到下面一句:
  1. Configuring vt: font8x16 blanktime.
复制代码
这时系统已经具备显示汉字的能力了,但是还没有显示。

4、显示汉字:
先做个提示:由于unifont只识别utf-8的编码,所以只能显示utf-8编码的汉字,其他编码不可以。
我们先做个直接显示,先在windows上用utltredit32做一个文件,rc.local,内容为一串汉字,保存时使用“无BOM的utf-8”,然后使用winscp传到/etc/目录下,再重新启动,你就会发现奇迹了。
(CU正文没有flash不能上传图片,请见三楼)


结束语:
vt给我们一个惊喜,虽然在二十年前,DOS终端就可以显示汉字,但这不能说明FreeBSD落后,vt的出现,也告诉人们,FreeBSD也在进步。


附:颜色值的定义:
  1. sys/i386/include/pc/display.h)
  2. /* Color attributes for foreground text */

  3. #define FG_BLACK                   0
  4. #define FG_BLUE                    1
  5. #define FG_GREEN                   2
  6. #define FG_CYAN                    3
  7. #define FG_RED                     4
  8. #define FG_MAGENTA                 5
  9. #define FG_BROWN                   6
  10. #define FG_LIGHTGREY               7
  11. #define FG_DARKGREY                8
  12. #define FG_LIGHTBLUE               9
  13. #define FG_LIGHTGREEN             10
  14. #define FG_LIGHTCYAN              11
  15. #define FG_LIGHTRED               12
  16. #define FG_LIGHTMAGENTA           13
  17. #define FG_YELLOW                 14
  18. #define FG_WHITE                  15
  19. #define FG_BLINK                0x80

  20. /* Color attributes for text background */

  21. #define BG_BLACK                0x00
  22. #define BG_BLUE                 0x10
  23. #define BG_GREEN                0x20
  24. #define BG_CYAN                 0x30
  25. #define BG_RED                  0x40
  26. #define BG_MAGENTA              0x50
  27. #define BG_BROWN                0x60
  28. #define BG_LIGHTGREY            0x70
复制代码
另发于:http://bbs.landingbj.com/t-0-256758-1.html

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2015-05-20 17:51 |显示全部楼层
zfs_install1.png

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2015-05-20 17:51 |显示全部楼层
zfs_install2.png

论坛徽章:
9
2015年亚洲杯之卡塔尔
日期:2015-05-07 07:05:542015亚冠之鹿岛鹿角
日期:2015-05-29 14:55:522015亚冠之鹿岛鹿角
日期:2015-06-11 09:55:192015亚冠之山东鲁能
日期:2015-06-19 23:53:042015亚冠之大阪钢巴
日期:2015-06-23 21:03:17操作系统版块每日发帖之星
日期:2015-06-23 22:20:00操作系统版块每日发帖之星
日期:2015-06-27 22:20:002015亚冠之布里斯班狮吼
日期:2015-07-04 03:40:012015亚冠之平阳省
日期:2015-07-12 09:32:55
发表于 2015-05-20 18:12 |显示全部楼层
支持楼主


论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09IT运维版块每日发帖之星
日期:2015-09-14 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-16 16:34:21
发表于 2015-05-20 20:17 |显示全部楼层
Well done!

论坛徽章:
0
发表于 2015-05-21 12:46 |显示全部楼层
有个疑惑:显示中文没问题了,vt下如何输入中文呢?

以前用过zhcon,是自带中文输入法的。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2015-05-21 14:11 |显示全部楼层
回复 6# chillyrains


没有汉字输入的需求,没研究过。
要输入汉字,或者进X,或者远程,终端本身就是一个临时性的操作台,连zhcon也已经10年没动静了。

论坛徽章:
0
发表于 2015-05-22 12:42 |显示全部楼层
回复 7# lsstarboy

感谢答复!

能显示中文也是很大的进步了。和直接使用终端相比,使用Windows或X远程登录的体验好多了。


   

论坛徽章:
0
发表于 2015-05-26 22:28 |显示全部楼层
顶一下

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-10-05 06:20:00操作系统版块每日发帖之星
日期:2015-10-05 06:20:00
发表于 2015-10-02 00:22 |显示全部楼层
呃。。。大家都在浪漫的时候LZ却在码字。。。辛苦。。辛苦。。我就想问一个问题,使用了VT之后能在 CLI 显示汉字了,那文字编辑器里呢?有没有试过?如果这个问题也解决了,那使用FB的障碍可是少了一大堆啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP