zoukankan      html  css  js  c++  java
  • Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法

    前言

    我在实验进入linux系统启动xwindow server而不启动KDE GNOME等桌面系统时遇到的问题。只启动x server而不启动桌面系统,在xserver之上运行一个全屏的图形界面程序,这样就能实现该程序对显示器的独占,对一般用户来说他就不能在这台电脑上搞别的动作了,只能用这个程序。一些工业控制、超市收银等应用场景下都会有这样的需求,目前这些程序都运行在windows xp (embeded)之下,也有运行于dos的。由于windows xp太被大众熟悉了,结果这些软件便不能稳定的运行了。windows也无法实现应用对窗口的独占,桌面系统是在windows内核实现的,不能说不启动桌面系统,只要启动了桌面系统,桌面上的窗口都可以关掉或者干到后台去。

    实现这种图形界面程序对显示器的独占,还有另外一种方式——不启动x server,而启动系统的framebuffer能力;使用一种支持在framebuffer上实现图形界面的图形库来开发这种程序。通过调研的结果来看,qt 4.6及之后就能够做到了。但是framebuffer不能够支持调用显卡的运算能力进行图形的渲染,framebuffer只是内存上划出来的一片区域,对应着显示器上的每一个逻辑像素,只能通过CPU执行指令修改framebuffer然后直接就能反应到显示器上。linux下还有另外一种技术DirectFB,其介绍说能够利用GPU进行加速主要应用于嵌入式环境,不知道能不能够编译到X86上使用?

    (PS:对于xwindow 和KDE GNOME这些桌面系统关系的理解,很多人都是错误的。可以参考一下http://www.cnblogs.com/sunsonbaby/archive/2004/08/26/36683.html)

    由于满足上述应用场景采用不启动x server的方法非常有难度,所以先试验了只启动x server不启动桌面系统的方法。结果编辑启动配置以便不进入桌面系统时失败了,卡在进入桌面系统哪里动不了,只好切入到命名模式。但是分辨率只有800*600,汉字还不能显示,实在是郁闷。勉强把进入桌面系统的配置恢复后,开始解决这个分辨率低,不支持中文的问题。

    在linux中一切都是文件,如果linux启动时支持framebuffer的,必须划出一片内存,虚拟一个文件fb0。估计是因为要降低对资源的消耗,ubuntu默认没有开启framebuffer。

    第一步,查看显卡支持的模式

    使用hwinfo,如果没有先安装。

    sudo apt-get install hwinfo
    

     安装之后就可以使用下面的命令查看显卡支持的模式了。

    sudo hwinfo --framebuffer
    

     其实你安装ubuntu时如果没有按照显卡驱动会提示安装的,一般驱动都是安装好的。其他的指导还说要安装v86d,这个得看具体请看来定,如果查看模式没得结果再安装也不迟。

    sudo apt-get install v86d
    

    第二步,选择一个模式设置启动项

    我的电脑查看模式之后会有下面这个模式,分辨率最高,色彩最高16位,就选择这个。

    Mode 0x0317: 1024x768 (+2048), 16 bits

    然后编辑文件/etc/default/grub,找到下面的项目,改成下面一样的。其实就是在后面增加了vga=0x0317。

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=0x0317"

    第三步,设置initramfs支持framebuffer

    编辑文件/etc/initramfs-tools/modules,在其后加入行

    fbcon
    vesafb
    vga16fb

    (为毛要加这三个,估计也是大家相互抄。有空可以验证一下只加vesafb是否可以。)

    编辑文件/etc/modprobe.d/blacklist-framebuffer.conf,注释掉出现上面内容的blacklist。

    #blacklist fbcon
    #blacklist vesafb
    #blacklist vga16fb

    (vga vesa con都是老显卡模式标准,现在的显卡能支持一种就不错了。)

    第四步,跟新grub和initramfs

    执行下面的指令。

    sudo update-grub
    sudo update-initramfs -u
    

    第五步,将需要在命令模式下使用的用户加入video组

    这个好多方法的,很多命令都能完成这个功能。直接去改/etc/group文件也可以,但是不推荐。

    sudo adduser your_name video
    

    有了上面四步,重启系统再进入命名模式,就会发现分辨率已经提高了。我的电脑到这一步已经可以支持中文显示了。 因为我按照ubuntu之后就按照了汉语的语言包。

    有的教程一开始就让安装fbterm。这个没必要,不用中文输入的话,就可以不用安装这个。需要中文输入的话,是否能不需要fbterm直接实现,我也没调研,暂时没这个需求。以后有需求的时候再写博客。

    剩余的话

    initramfs是个什么玩意?我也是个新手,就我的查找到资料和我的理解,它是对系统启动时预先分配出来的内存的一种管理技术。linux中一切资源都是文件,那么系统启动时预先分配的内存也是文件,当作文件管理,就要为其提供进行存储空间分配的文件系统,initramfs就是这样一种文件系统。

  • 相关阅读:
    sql server中的左连接与右连接的简便写法
    SQL中CONVERT()转化函数的用法 字符串转日期
    Asp.net MVC 中Controller返回值类型ActionResult
    一探前端开发中的JS调试技巧
    String trim 坑 对于ascii码为160的去不掉
    SQL小练习
    Java运行时异常和非运行时异常
    java 子类不能继承父类的static方法
    Java中的类加载器
    搞懂head 和 tail 命令
  • 原文地址:https://www.cnblogs.com/tgis/p/4802305.html
Copyright © 2011-2022 走看看