技术员联盟提供win764位系统下载,win10,win7,xp,装机纯净版,64位旗舰版,绿色软件,免费软件下载基地!

当前位置:主页 > 教程 > 服务器类 >

如何改造 Linux 虚拟终端显示文字

来源:技术员联盟┆发布时间:2019-05-07 12:08┆点击:

  简介: 本文就 CJKTTY 补丁如何让 linux 虚拟终端显示汉字的原理进行了讨论,为此介绍了 Linux 虚拟终端和其依赖的硬件的工作原理。过程中我们分析了 Linux 字符终端的不足之处,并向读者介绍前沿的 Wayland system compositor 是什么以及为什么 需要它。

  CJKTTY 补丁是什么,为什么我写了它

  当你不使用 X 的时候,打开电脑,你就在使用虚拟终端。这么多年来它工作的很好,直到它来到了中国。包含中文字符的文件名无法正确显示,中文文档无法阅读。当然可以使用 X , 但是我为什么不能让终端也能显示汉字呢?如果在 X 下我能让屏幕显示汉字,终端下一定也能。为此我开始了 internet 上的搜寻。 我找到了 fbterm,这是个可以利用 /dev/fb0 实现的终端模拟器,和 XTERM 一样,只不过 XTERM 利用的 X 绘制文字,而 fbterm 直接写入 /dev/fb0。

  /dev/fb0 是什么?

  帧缓冲区设备。帧缓冲区是一块存储区域(内存或者显存或者其他的输出设备的存储空间),内核将其抽象为一个设备。通过访问该设备就能访问帧缓冲区。帧缓冲区的内容既是屏幕映像。由输出设备不停的扫描帧缓冲区生成显示设备的控制信号。

  然而我似乎总是忘记登录后开启 fbterm,对我来说,等看到乱码的时候突然想起没有开启 fbterm 并不是那么愉快的经历。这只是其中一个缺点。fbterm 占用了帧缓冲区设备,导致 w3m 这类使用帧缓存绘制图像的终端 www 浏览器不能正常工作。许多依赖帧缓冲区设备的终端程序都不能被 fbterm 良好的兼容。 于是我继续寻找,找到了 youbest 写的中文补丁。 我有个喜欢使用最新内核的习惯,当内核升级导致 youbest 的补丁再也不能使用的时候,我开始到 youbest 发布补丁的页面留言,希望 youbest 百忙中能修改一下他的补丁。

  Youbest 似乎很忙,在新内核的诱惑下,我决定自己在修改。那个时候我才真正的开始看内核的代码。终于了解了虚拟终端的工作原理后,我开始修改内核。由于内核内部结 构变动导致 youbest 的补丁无法应用,我几乎是从头开始了开发而不是简单的将无法应用的部分进行修整。唯一得到保留的就是 youbest 补丁中的点阵字库。我将其命名为 CJKTTY , 取能显示 CJK 的 TTY 之意。

  从那里获得中文显示补丁呢?

  我将补丁托管在了 ,依据你使用的内核版本,签出内核版本 -utf8 分支就可以。

  控制台是如何显示文字呢?

  那么,为了能在控制台下显示出汉字到底需要做什么样的修改么?在开始前,我想先介绍一些名字,并介绍一些控制台在硬件上是如何进行文字显示的。 首先我解释一下几个名词,知道的人可以到这里开始阅读。

  UNICODE

  为每一个字符分配全球唯一的一个数字,但是并没有规定这个数字的表示方法。数字的表示方法由 UTF 规范规定。UTF-16 使用 2 个字节表示一个 UNICODE 数字,但是对于 >=216的数字使用 4 字节来表达。UTF-8 则对于 <127 的数字采取单字节表示,大于 127 的数字要根据其大小选择 2~6 个字节进行表示。UNICODE 在程序内部则简单的使用 unsigned long 即可表示一个字符。

  GLYPH

  GLYPH 指的是字体里的字形。字符总是要在特定的字体下表示的,该表示就是字形。比如一个只包含 26 个大小写字母的字体,只包含了 52 个字形,如果该字体是先大写后小写排列的,那么数字 0 就表示字形 'A' , 数字 1 就表示字形 'B'。UNICODE 或者 ASCII 到 GLYPH 的映射是由一个称作 CMAP 的映射表做的。如果字体里字符就是按照 UNICODE 排列的,则其 CMAP 就是 UNICODE CMAP。同理也有 ASCII CMAP。 VGA 自带字体没有提供 CMAP,操作系统假定它的 CMAP 是 ASCII CMAP。事实上也是如此。

  TTY

  内核为终端提供的接口,对应用程序而言就是 TTY 设备。通常是使用 stdin stdout 来访问。TTY 提供各种 IOCTL 用来设置终端的模式。TTY 也提供了用户控制程序的方法,比如 Ctrl-C 终止当前程序。 TTY 可以是显示器 + 键盘构成的控制台,也可以是串口(可以通过猫链接到电话线上),可以通过 pts 模拟。XTERM 即利用 pts 为里面运行的程序提供的模拟的终端 , 对应的设备文件 /dev/pts/* 由模拟终端程序动态创建。

  控制台 (CONSOLE)

  控制台特指由显示器 + 键盘构成的终端。其中显示器由显卡控制,而且当前 VGA 兼容显卡有两种模式,文字模式和图形模式。Linux 即可以使用文字模式也可以使用图形模式。

  控制台对于程序是无法访问的,程序只能通过虚拟终端使用控制台

  虚拟终端 (VT)