全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法
引言
这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来。目前在网络上,很多关于 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 分辨率的方法的更多相关文章
- linux下的字符界面和图形界面转换
linux下的字符界面和图形界面转换 linux下有六个虚拟终端按键ctrl+alt+F1-F6可以进入相应的虚拟终端永久的话修改/etc/inittab将id:5:initdefault:中的5改成 ...
- Linux 开机启动图形界面,shell界面
查看当前启动模式 # systemctl get-default 更改模式命令: systemctl set-default graphical.target由命令行模式更改为图形界面模式 syste ...
- LINUX RHEL6.5字符界面安装图形化桌面
安装RHEL 6.5 系统,也是一波三折.好不容易把系统装上去了,发现没装图形化界面.重装倒是学会了,不过觉得太麻烦,于是有了今天. 查了很多帖子,然后自己一一尝试,发现都是说简单,只要 yum gr ...
- Linux 纯字符界面的玩法
Linux 纯字符界面的用途 装逼必备 省资源,服务器一般不安装图形界面 图形界面崩溃后紧急救援 进入字符界面的正确方式 目前新的 Linux 发行版基本上都使用 Systemd 作为 init 程序 ...
- linux复习3:linux字符界面的操作
一.前言 1.对linux服务器进行管理的时候,经常要进入字符界面进行操作,使用命令需要记住该命令的相关选项和参数.vi编辑器可以用于编辑任何ASCII文本,功能非常的强大,可以对文本进行创建.查找. ...
- Linux字符界面和图形界面
Ubuntu图形界面和字符界面的切换 Ubuntu和其他的Linux系统一样,有图形界面和字符界面,同时能够设置默认的启动界面. linux的显示界面分为命令行的字符界面和图形界面,我们可以设置lin ...
- Linux 切换字符界面和图形界面
1. 切换方式 # root 权限 systemctl get-default # 获取当前模式 systemctl set-default graphical.target # 设置开机为图形界面 ...
- yum管理——linux字符界面安装图形化及两种界面的切换(3)
1.查看yum软件包组 yum groups list 2.选择安装带 GUI 的服务器 yum groups install "带 GUI 的服务器" 3.字符界面切换为图形化界 ...
- linux开机自动连接无线网络
1.右击无线网络图标的“编辑连接”. 2.在“无线”选项卡里,选择“编辑”. 3.在“无线安全性”选项卡里,输入无线密匙,并选中左下角的“对所有用户可 用”的选项点击应用,会提 ...
随机推荐
- SQL Server 数据加密功能解析
SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...
- .NET Core RC2/RTM 明确了时间表
.NET Core 经过了将近2年的开发,去年12月份发布的RC1版本,明确来说那只是一个beta版本,自从RC1发布以来,看到github里的RC2分支,整个工具链都发生了很大的变化,大家都在焦急的 ...
- .Net中的AOP系列之构建一个汽车租赁应用
返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- MFC中如何画带实心箭头的直线
工作中遇到话流程图的项目,需要画带箭头的直线,经过摸索,解决:思路如下: (1) 两个点(p1,p2)确定一个直线,以直线的一个端点(假设p2)为原点,设定一个角度 (2)以P2为原点得到向量P2P1 ...
- 微信小程序IDE(微信web开发者工具)安装、破解手册
1.IDE下载 微信web开发者工具,本人是用的windows 10 x64系统,用到以下两个版本的IDE安装工具与一个破解工具包: wechat_web_devtools_0.7.0_x64.exe ...
- 获取打开的Word文档
using Word = Microsoft.Office.Interop.Word; int _getApplicationErrorCount=0; bool _isMsOffice = true ...
- 推荐一个ASP.NET网站内容管理系统源码
许多人都有各自的兴趣,如打球.踢毽子.看书.看电视.玩游戏等等....我近来迷上了猜灯谜,于是业余做了一个在线猜灯谜的网站:何问起谜语. 先出个谜语让你猜猜:不可缺一点(打一字).可以在线猜:http ...
- web服务器集群
概述 集群和分布式都是从集中式进化而来的.分布式和集群会相互合作的,同时的集群和分布式.在这里重点说说集群 集群是什么? 集群能提高单位时间内处理的任务数量,提升服务器性能 有多台服务器去处理任务,但 ...
- [原创]Macbook Pro Retina 15吋安装Windows 7和Windows 8.1方法
前言 本以为有Bootcamp神器在手,Macbook装Win系统应该是不在话下,没想到着实折腾了一番.期间因为误操作导致OSX也挂掉进不去只得磁盘全部抹掉网络恢复安装.为了让大家少走弯路,提供个人安 ...