引言

  这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来。目前在网络上,很多关于 Linux 方面的知识是过时的和错误的。我标题中指出的两个知识点就是其中的重灾区。(这两个知识点,在某宝的某几个牛人合著的《Linux就是这个范儿》这本书中讲的都是错的。)

  先来说说开机进入字符界面的问题。网络上的答案一边倒的就是修改/etc/inittab文件,须不知,Fedora 系统和 Radhat Enterprise Linux 系统早就将 init 程序从 SysVinit 更换成了 systemd,虽然/etc/inittab文件还在,但是已经只具有提示意义了。而 Ubuntu 中更是根本就不存在/etc/inittab文件,而且 Ubuntu 中的运行级别的意义也和传统的 Redhat Linux 不一样,在 Ubuntu 中,运行级别 2\3\4\5 都是进入图形界面。不要问我是怎么知道的,后面我会讲到。

  再来说说开启 FrameBuffer 以及设置 FrameBuffer 分辨率的问题,网络上的方法也是早就过时了。网络上都说要开启 FrameBuffer,需要先修改/etc/modprobe.d中的文件,以便加载 vesafb 内核模块,还要修改 Grub 给 Linux 内核传递 vga=? 的参数。可实际上,目前的 Linux 版本早就默认加载 drm 驱动,自动开启 FrameBuffer 了,根本就不存在开启 FrameBuffer 这样的说法。至于 vga=? 这样的参数, Grub2 也是不支持的。那么究竟怎样才能设置 FrameBuffer 的分辨率呢?还是请大家阅读后面的正文。

让 Linux 开机进入字符界面的方法

  先来说 Ubuntu,我用过的从 Ubuntu 12.04 到现在的 Ubuntu 14.10 都可以用我下面所说的方法,至于更早的版本我没用过我就不乱说了。Ubuntu 使用的 init 程序是属于 Upstart 软件包的,系统启动后,运行 init 程序,然后运行/etc/init目录下的脚本。系统启动时,先运行/etc/init/rc-sysinit.conf,将该文件打开看一下,如下图:

  从该文件中可以看出,如果存在/etc/inittab文件的话,它还是会解析该文件获得默认运行级别的,否则就从 Grub 传递给内核的参数解析命令行级别。问题在于,它认为运行级别 2\3\4\5 是一样的,对于想给内核传递一个 3 作为参数进入字符界面的梦想一下子就破灭了。不过没关系,我们还可以从启动 X 系统的显示管理器入手,Ubuntu 使用的显示管理器是 lightdm,正好/etc/init目录下有一个lightdm.conf文件,打开看一下,如下图:

  从该文件中很容易看出,它也解析传递给内核的参数,如果参数中有 text 的话,它就不启动。那么结论出来了,如果要让 Ubuntu 启动时自动进入字符界面,给它传递 text 参数即可。

  对于 Fedora 来说就简单了,它的/etc/inittab文件还在,看一下该文件就可以得到提示,然后按照提示运行systemctl set-default multi-user.target即可让系统开机进入字符界面,要恢复图形界面,只需要运行systemctl set-default graphical.target命令即可。该方法在我使用的 Fedora 19、Fedora 20 和 Fedora 21 中均适用,更早的版本我没用过就不知道了。如下图:

设置 FrameBuffer 的分辨率的方法

  在旧系统中,如果进入纯字符界面,界面的大小只有 80×25,当然是不够用的啦,如果要在字符界面下绘图啊、显示中文啊什么的那就更加不够用了,所以需要另外打开 FrameBuffer。在新系统中,FrameBuffer 默认就是打开的,貌似不需要另外设置。但是很不幸,目前的显示器分辨率太高了,想像一下在 1920×1080 的分辨率下使用字符界面时字体是多么的小,再想像一下 4K 分辨率的屏幕呢。所以需要重新设置 FrameBuffer 的分辨率。

  新系统(比如这里的 Fedora 19\20\21 以及 Ubuntu 12\13\14)是不能使用 vga=? 这样的参数的。其实 vga=? 从来都不是内核支持的参数,只不过 Grub 会解析这个参数,然后以特殊的协议将它传递给内核而已。可惜,在新系统中,都用的是 Grub 的第 2 版了,Grub2 不支持 vga=? 这样的参数。我是在阅读了内核源代码中的Documentation/kernel-parameters.txt后知道的。如下图:

  然后根据该文档中的说明,要设置 FrameBuffer 的分辨率,需要给内核传递 video=? 这样的参数,该参数可以取什么样的值呢?再将Documentation/fb/modedb.txt文件打开看一下,如下图:

关于FrameBuffer和内核模块

  能否成功启用 FrameBuffer 和硬件软件都有关系,首先是显卡需要支持 FrameBuffer,其次是要选择合适的 FrameBuffer 驱动。我在前面讲到现在较新的 Linux 发行版都是默认开启 FrameBuffer 的,这一点也不是完全准确,因为总有意外。在我的笔记本电脑以及使用 Intel 集显的 HP 工作站上,FrameBuffer 是默认打开的。在虚拟机中,FrameBuffer 也是开启的,不过 Fedora 和 Ubuntu 支持的分辨率不一样。但是在我自己的配备 Nvidia GTX 860 显卡的台式机上,在安装了 Nvidia 驱动的情况下,FrameBuffer 就失效了。

  后来我仔细研究 FrameBuffer 有效和失效的情况,发现还是和驱动程序有关,也就是和内核模块有关。反正网络上说的那几个内核模块 fbcon、vesafb 和 vga16fb 是指望不上的。在使用集成显卡时,或者使用虚拟机时,svgadrmfb 驱动运行得就不错,如果使用的是独立显卡,nouveau 模块中的 nouveaufb 运行得也不错。但是如果安装了 Nvidia 的显卡驱动, FrameBuffer 就失败了,因为 Nvidia 显卡驱动会在/etc/modprobe.d目录下面加上一些 blacklist 配置,使得没有合适的 FrameBuffer 驱动运行。虽然可以手动更改配置载入 nvidiafb 模块,但是经过我测试,该模块的运行是有问题的。

  怎么判断 FrameBuffer 是否开启呢?方法是查看/dev/fb0文件是否存在。怎么查看目前的 FrameBuffer 分辨率是多少,以及由哪个驱动程序提供支持呢?这需要一个小工具 fbset。该工具可以使用yum install命令或apt-get install命令安装。查看 FrameBuffer 的细节如下图:

  至于怎样去测试各个模块,那就只有去修改/etc/modprobe.d目录下的文件,然后不断地重启机器了,每次修改文件后,还要记得更新 initramfs 文件哦。

总结

  知道了要给内核传递什么参数,剩下的就是修改 Grub 的配置文件了。在 Grub2 中,推荐的方法已经不是修改/boot/grub/grub.cfg文件了,而是先修改/etc/default/grub文件,然后运行sudo update-grub命令自动生成/boot/grub/grub.cfg文件。你问我是怎么知道的呢,因为我阅读了 Grub2 的文档。阅读 Grub2 的文档用info grub命令。

  在/etc/default/grub文件中,修改GRUB_CMDLINE_LINUX_DEFAULT=...这一行,先加入video=1366x768M@60m这样的参数,如果是 Ubuntu 系统,则再加入text参数,就可以让系统启动时自动进入字符界面,而且字符界面的分辨率是 1366×768,屏幕刷新率 60Hz,带 margin。如果是 Fedora 系统,则连text参数都可以省略掉。下图是在 Ubuntu 14.10 下的截图:

  最后,sudo update-grub一下,重启机器,一切搞定。

(京山游侠于2015-03-31发布于博客园,转载请注明出处。)

最新进展

  从 Ubuntu 15.04 开始,Ubuntu 也开始采用 systemd 作为它的 init 程序,所以,让 Ubuntu 启动后进入字符界面的方法也变得和 Fedora 一样了。都是使用 sudo systemctl set-default multi-user.target 命令。进入图形模式都是使用 sudo systemctl set-default graphical.target 命令。而 Framebuffer 是自动开启的,除非使用 Nvidia 驱动,因为 Nvidia 驱动不支持 Framebuffer。要设置 Framebuffer 的分辨率,只需要向内核传递 video=... 参数就可以了。

(京山游侠于2016-08-21更新于博客园,转载请注明出处。)

全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法的更多相关文章

  1. linux下的字符界面和图形界面转换

    linux下的字符界面和图形界面转换 linux下有六个虚拟终端按键ctrl+alt+F1-F6可以进入相应的虚拟终端永久的话修改/etc/inittab将id:5:initdefault:中的5改成 ...

  2. Linux 开机启动图形界面,shell界面

    查看当前启动模式 # systemctl get-default 更改模式命令: systemctl set-default graphical.target由命令行模式更改为图形界面模式 syste ...

  3. LINUX RHEL6.5字符界面安装图形化桌面

    安装RHEL 6.5 系统,也是一波三折.好不容易把系统装上去了,发现没装图形化界面.重装倒是学会了,不过觉得太麻烦,于是有了今天. 查了很多帖子,然后自己一一尝试,发现都是说简单,只要 yum gr ...

  4. Linux 纯字符界面的玩法

    Linux 纯字符界面的用途 装逼必备 省资源,服务器一般不安装图形界面 图形界面崩溃后紧急救援 进入字符界面的正确方式 目前新的 Linux 发行版基本上都使用 Systemd 作为 init 程序 ...

  5. linux复习3:linux字符界面的操作

    一.前言 1.对linux服务器进行管理的时候,经常要进入字符界面进行操作,使用命令需要记住该命令的相关选项和参数.vi编辑器可以用于编辑任何ASCII文本,功能非常的强大,可以对文本进行创建.查找. ...

  6. Linux字符界面和图形界面

    Ubuntu图形界面和字符界面的切换 Ubuntu和其他的Linux系统一样,有图形界面和字符界面,同时能够设置默认的启动界面. linux的显示界面分为命令行的字符界面和图形界面,我们可以设置lin ...

  7. Linux 切换字符界面和图形界面

    1. 切换方式 # root 权限 systemctl get-default # 获取当前模式 systemctl set-default graphical.target # 设置开机为图形界面 ...

  8. yum管理——linux字符界面安装图形化及两种界面的切换(3)

    1.查看yum软件包组 yum groups list 2.选择安装带 GUI 的服务器 yum groups install "带 GUI 的服务器" 3.字符界面切换为图形化界 ...

  9. linux开机自动连接无线网络

           1.右击无线网络图标的“编辑连接”. 2.在“无线”选项卡里,选择“编辑”. 3.在“无线安全性”选项卡里,输入无线密匙,并选中左下角的“对所有用户可      用”的选项点击应用,会提 ...

随机推荐

  1. SQL Server 数据加密功能解析

    SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...

  2. .NET Core RC2/RTM 明确了时间表

    .NET Core 经过了将近2年的开发,去年12月份发布的RC1版本,明确来说那只是一个beta版本,自从RC1发布以来,看到github里的RC2分支,整个工具链都发生了很大的变化,大家都在焦急的 ...

  3. .Net中的AOP系列之构建一个汽车租赁应用

    返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...

  4. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  5. MFC中如何画带实心箭头的直线

    工作中遇到话流程图的项目,需要画带箭头的直线,经过摸索,解决:思路如下: (1) 两个点(p1,p2)确定一个直线,以直线的一个端点(假设p2)为原点,设定一个角度 (2)以P2为原点得到向量P2P1 ...

  6. 微信小程序IDE(微信web开发者工具)安装、破解手册

    1.IDE下载 微信web开发者工具,本人是用的windows 10 x64系统,用到以下两个版本的IDE安装工具与一个破解工具包: wechat_web_devtools_0.7.0_x64.exe ...

  7. 获取打开的Word文档

    using Word = Microsoft.Office.Interop.Word; int _getApplicationErrorCount=0; bool _isMsOffice = true ...

  8. 推荐一个ASP.NET网站内容管理系统源码

    许多人都有各自的兴趣,如打球.踢毽子.看书.看电视.玩游戏等等....我近来迷上了猜灯谜,于是业余做了一个在线猜灯谜的网站:何问起谜语. 先出个谜语让你猜猜:不可缺一点(打一字).可以在线猜:http ...

  9. web服务器集群

    概述 集群和分布式都是从集中式进化而来的.分布式和集群会相互合作的,同时的集群和分布式.在这里重点说说集群 集群是什么? 集群能提高单位时间内处理的任务数量,提升服务器性能 有多台服务器去处理任务,但 ...

  10. [原创]Macbook Pro Retina 15吋安装Windows 7和Windows 8.1方法

    前言 本以为有Bootcamp神器在手,Macbook装Win系统应该是不在话下,没想到着实折腾了一番.期间因为误操作导致OSX也挂掉进不去只得磁盘全部抹掉网络恢复安装.为了让大家少走弯路,提供个人安 ...