- 論壇徽章:
- 54
|
本帖最后由 lsstarboy 于 2015-05-20 17:55 編輯
在FreeBSD下顯示漢字一直是我們FBer的夢(mèng)想,原來(lái)要加一大堆的東西才能顯示,自從10.1以后,多了個(gè)vt驅(qū)動(dòng),終于可以在終端下玩漢字了,雖然步驟不是很簡(jiǎn)單,色彩不是很豐富,但至少多了一種可能。
先來(lái)看幾個(gè)條件:首先需要在內(nèi)核中編譯vt,順便把vt_vga也要帶上,否則顯示可能不那么順利;其次,需要一個(gè)字體,沒(méi)有字體只能顯示\0xfa\0xfa這之類的符號(hào);最后,還需要配置一下,讓vt跟字體掛上鉤。
我們一步一步來(lái)做。
1、編譯內(nèi)核:
在內(nèi)核文件中加入下面四行:- options TERMINAL_NORM_ATTR=(FG_GREEN|BG_BLACK)
- options TERMINAL_KERN_ATTR=(FG_LIGHTCYAN|BG_BLACK)
- device vt
- device vt_vga
復(fù)制代碼 同時(shí)注釋掉下面三行:- #device sc
- #options SC_PIXEL_MODE # add support for the raster text mode
- #device vga # VGA video card driver
復(fù)制代碼 解釋一下:
加上的大寫字母的那兩行,表示vt的背景色和前景色,前一行是正常的輸出,采取的顏色方案是:黑色背景,綠色前景(黑客帝國(guó)的經(jīng)典配色方案哦。,后一行是內(nèi)核的輸出,淡青色前景,黑色背景。具體的顏色取值在本文后方查找。
去掉的三行,前兩行是sc的,老式的syscons,這個(gè)和vt是互斥的,只能選一個(gè),vga和vt_vga也是互斥的,vga其實(shí)會(huì)自動(dòng)禁掉。
重新編譯內(nèi)核,重啟,你會(huì)發(fā)現(xiàn)已經(jīng)有變色的屏幕了。
但是再還有一個(gè)重要的步驟:修改源代碼,否則雖然你可以顯示彩色,但是不能顯示漢字!修改的文件是/usr/src/sys/dev/vt/vt_font.c:
左邊是源代碼,后面是修改的值:- 44 #define VTFONT_MAXMAPPINGS 8192 #define VTFONT_MAXMAPPINGS 65536
- 45 #define VTFONT_MAXGLYPHSIZE 1048576 #define VTFONT_MAXGLYPHSIZE 2097152
- 46 #define VTFONT_MAXDIMENSION 128 #define VTFONT_MAXDIMENSION 128
復(fù)制代碼 原因是默認(rèn)值太小,裝不下字體文件,要改大一些才能裝下這上萬(wàn)個(gè)字的字體。該值在新版中好像已經(jīng)糾正了。
(CU正文沒(méi)有flash不能上傳圖片,請(qǐng)見二樓)
如果沒(méi)彩色,那么請(qǐng)檢查一下/boot/loader.conf,在里面加上下面兩行試試,在大多數(shù)情況下,已經(jīng)是默認(rèn)的了:- hw.vga.textmode=0
- kern.vty=vt
復(fù)制代碼 2、轉(zhuǎn)換vt支持的字體
vt使用的字體是fnt,在/usr/share/vt/fonts目錄下,這個(gè)目錄下已經(jīng)有部分字體,但僅限英文、俄文等少數(shù)語(yǔ)言,要使用CJK,也就是中韓日文,就必須自己做字體。但是vt又不能使用windows下的ttf字體,并且目前也沒(méi)有找到轉(zhuǎn)換程序,這使得做字體非常麻煩。
好在開源界大有熱心人士:http://www.unifoundry.com/unifont.html給我們提供了一系列的中文字體,這個(gè)unifont是基本文泉驛字體做的,雖然僅支持幾千個(gè)漢字,但是可以應(yīng)付一般的應(yīng)用了,連“镕”字都有。在這個(gè)頁(yè)面上,下載hex的版本,雖然有人推薦bdf的版本,但是經(jīng)過(guò)我測(cè)試,轉(zhuǎn)換不成功,只有hex的版本才能轉(zhuǎn)換成功。
把下載下來(lái)的gz文件解壓,然后用系統(tǒng)自帶的vtfontcvt轉(zhuǎn)換:- # gunzip unifont_sample-7.0.06.hex.gz
- # vtfontcvt unifont_sample-7.0.06.hex aa.fnt
復(fù)制代碼 這樣便得到了一個(gè)aa.fnt,這個(gè)便是我們需要的字體文件了。
3、告訴系統(tǒng)使用中文字體:
要使用aa.fnt,就必須先把它復(fù)制到vt的字體目錄里:- cp aa.fnt /usr/share/vt/fonts/
復(fù)制代碼 然后還要用rc.conf,告訴系統(tǒng)在啟動(dòng)時(shí)加載中文字體,在rc.conf里加入下面一行:注意引號(hào)里面的字符對(duì)應(yīng)于字體文件的名字,如果你使用了其他文件名,請(qǐng)修改這個(gè)地方。
重新啟動(dòng),會(huì)在啟動(dòng)信息里找到下面一句:- Configuring vt: font8x16 blanktime.
復(fù)制代碼 這時(shí)系統(tǒng)已經(jīng)具備顯示漢字的能力了,但是還沒(méi)有顯示。
4、顯示漢字:
先做個(gè)提示:由于unifont只識(shí)別utf-8的編碼,所以只能顯示utf-8編碼的漢字,其他編碼不可以。
我們先做個(gè)直接顯示,先在windows上用utltredit32做一個(gè)文件,rc.local,內(nèi)容為一串漢字,保存時(shí)使用“無(wú)BOM的utf-8”,然后使用winscp傳到/etc/目錄下,再重新啟動(dòng),你就會(huì)發(fā)現(xiàn)奇跡了。
(CU正文沒(méi)有flash不能上傳圖片,請(qǐng)見三樓)
結(jié)束語(yǔ):
vt給我們一個(gè)驚喜,雖然在二十年前,DOS終端就可以顯示漢字,但這不能說(shuō)明FreeBSD落后,vt的出現(xiàn),也告訴人們,F(xiàn)reeBSD也在進(jìn)步。
附:顏色值的定義:- sys/i386/include/pc/display.h)
- /* Color attributes for foreground text */
- #define FG_BLACK 0
- #define FG_BLUE 1
- #define FG_GREEN 2
- #define FG_CYAN 3
- #define FG_RED 4
- #define FG_MAGENTA 5
- #define FG_BROWN 6
- #define FG_LIGHTGREY 7
- #define FG_DARKGREY 8
- #define FG_LIGHTBLUE 9
- #define FG_LIGHTGREEN 10
- #define FG_LIGHTCYAN 11
- #define FG_LIGHTRED 12
- #define FG_LIGHTMAGENTA 13
- #define FG_YELLOW 14
- #define FG_WHITE 15
- #define FG_BLINK 0x80
- /* Color attributes for text background */
- #define BG_BLACK 0x00
- #define BG_BLUE 0x10
- #define BG_GREEN 0x20
- #define BG_CYAN 0x30
- #define BG_RED 0x40
- #define BG_MAGENTA 0x50
- #define BG_BROWN 0x60
- #define BG_LIGHTGREY 0x70
復(fù)制代碼 另發(fā)于:http://bbs.landingbj.com/t-0-256758-1.html |
|