首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

虚拟终端的不足之处虽然费尽心机添加了中文支持,那只是一个 workaround , 并不能算真正的支持。要真正的支持必须彻底重写虚拟终端和控制台。而要支持中文,就需要更进一步,全面支持 UNICODE , 包括支持从右向左的书写习惯。在内核里实现一个全面支持 UNICODE 的控制台并不是一件容易的事情,何况内核的政策也不允许将如此庞大的字库装入内核。于是乎,这里出现了死胡同。KMS 和 Wayland 的出现让这死胡同似乎有了个完美的解。
KMS:
KMS 是内核模式设置 (Kernel Mode Setting)的缩写。传统上内核使用 VGA 模式,该模式由 BIOS 或者 bootloader 设置。如果启动 Xorg, 则 Xorg 使用自己的驱动将显示模式进行切换。这导致内核并不知道显卡的当前工作状态,虚拟终端切换必须依赖 X 进行。X 锁死会导致整个终端被锁定无法进行切换。待机、休眠等功能必须依靠 X 和内核双方进行深度合作才能实现。让一个用户程序搞垮内核是不可以接受的,故有 KMS , 希望通过把模式设置代码移入内核,减少内核对 X 的依赖。

如果不使用 X , KMS 对于控制台来说就是支持了显示器的本地本分辨率。KMS 优势并不显着。但是 Wayland 的介入使事情发生了变化。有关于 Wayland 的详细文档请参考 freedesktop.org 上的 。Wayland 并不只是对桌面带来了福音,同时也为控制台带来了福音,因为 Wayland 可以代替内核自身的虚拟终端和控制台实现。而这个代替者就是 System Compositor
System Compositor? System Compositor 是一个 wayland compositor,只是运行于系统全局范围。
为了懒人我这里稍微讲解一下 wayland compositor 吧。 Wayland 不同于 X , 在 wayland 的世界里,只有 compositor 和 client。Client 利用各种 API (wayland 给出的示例使用的是 OpenGL ES, 但其实 wayland 并不限制使用的绘图 API 类型 ) 进行窗口绘图,然后将窗口的绘制结果直接提交给 compositor 合成到屏幕上。这样 wayland 本身就不包含绘图 API 而大大简化了 wayland 的设计。Wayland compositor 可以同 X 一样操作显卡向屏幕输出合成后的结果,也可以作为另一个 wayland compositor 的 client。
对于多账户同时登录的实现,固然可以让每一个本地 GUI 会话开启一个 wayland compositor,但是存在更好的办法就是固定开启一个 system compositor。而让所有用户会话的 wayland compositor 再作为 system compositor 的 client. 藉由 system compositor 的合成效果,进行快速用户切换也可以进行一些视觉效果。而且 Xorg 本身也已经支持作为 wayland client 运行,这样可以使用传统的 X 提供桌面,而让 wayland system compositor 实现终端切换。这还有一个好处,只有 wayland system compositor 是以 root 运行的,而用户会话的 compositor 或 X 就不必以 root 权限运行。因为 Wayland 非常轻量,所以 system compositor 可以作为系统级服务常驻内存运行。而因为有了 system compositor , 内核也不再需要实现虚拟终端了:只需要实现终端模拟器作为 system compositor 的 client 。由于是在用户空间实现的,所有可以加入 UNICODE,矢量字体,国际化的书写习惯等等的支持,再也不用受限于内核啦。 Wayland 还是一个非常年轻的项目,Wayland system compositor 目前还只是设想中的概念,需要更多的人关注参与。笔者相信不久的将来 wayland 一定能大有作为。
写在最后本篇简要介绍了 Linux 虚拟终端的工作原理和依赖的硬件细节实现,然后使用了不太优雅的办法让虚拟终端在帧缓存模式下实现汉字的显示。让大家对虚拟终端有了一点点更多的了解,希望本文能对想了解 Linux 的人有所帮助。也再次感谢 IBM DevelopWorks, 它让我有机会把自己的知识共享给更多的人知道。
返回列表