禁用图形界面本质就是调整 linux 的运行级别(runlevel)。PS:这里不讨论 GUI Desktop 的安装与卸载。
一、什么是 Linux 运行级别?
linux 操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做 runlevel,同样,当 linux 操作系统关闭时也要经历这几个不同的 runlevel,下面我们就准备详细介绍一下 runlevel。
runlevel 可以认为是系统状态,形象一点,您可以认为 runlevel 有点像微软的 windows 操作系统中的 Normal,safemode,和 command prompt only。进入每个 runlevel 都需要启动或关闭相应的一系列服务 (services),这些服务 (services) 以初始化脚本的方式放置于目录 /etc/rc.d/rc?.d/
或者 /etc/rc?.d
下面(? 代表 runlevel 的对应序号)。
在大多数的 linux 发行版本中,通常有 6 个runlevel:
0 停机 # 是不是发现了一个新的关机命令
1 单用户模式
2 多用户,没有 NFS
3 完全多用户模式
4 没有用到
5 图形界面
6 重新启动 # 是不是发现了一个新的重启命令
多数的桌面发行版 linux 系统缺省的 runlevel 是 5,用户登陆时是图形界面;而多数的服务器版本的 linux 系统(e.g. Ubuntu Server 、CentOS 最小化安装时)缺省的 runlevel 是 3,用户登陆时是字符界面;runlevel 1 和 2 除了调试之外很少使用;runlevel 6 则表示重新启动。
(上图) 图形界面下的 runlevel
为 5
(上图) 字符界面下的 runlevel
为 3
linux 的运行模式比起 windows 的启动模式的优势在于:你可以在系统空闲时使用 init
命令切换你现在使用的 runlevel
,另外,当你关闭或者启动 linux 系统时你已经不知不觉中切换你的 runlevel,系统关机进程需要调用 runlevel(0或6) 来关闭所有正在运行中的进程。
二、字符界面与图形界面的切换
2.1 临时切换
2.1.1 使用 init 临时切换
通常上面的介绍我们了解了原理,此外上面也提到通过可以通过 init
来动态切换运行级别,使用起来也超级简单。
# 切换为完全多用户模式(字符界面)
$ sudo init 3
# 切换为图形模式
$ sudo init 5
2.1.2 使用 systemdctl 来临时切换
Systemd 是一个系统管理守护进程、工具和库的集合,用于取代 System V 初始进程。Systemd 的功能是用于集中管理和配置类 UNIX 系统。
在 Linux 生态系统中,Systemd 现已被部署到了大多数的标准 Linux 发行版中,只有为数不多的几个发行版尚未部署。Systemd 通常是所有其它守护进程的父进程(即 system 的 PID 为1,如下图),但并非总是如此。
其实在 systemd 出来之前 PID 1 其实是 init 进程。所以现阶段我们所使用的 init 其只是一个历史兼容(所以今后推荐使用
systemdctl
来临时切换)。感兴趣可以通过man
手册来了解详情。
使用 systemd 的工具命令为 systemctl
,下面是使用 systemctl
来临时切换的操作样例
# 切换为完全多用户模式(字符界面)
$ sudo systemctl isolate [multi-user.target | runlevel3.target]
# 切换为图形模式
$ sudo systemctl isolate [graphical.target | runlevel5.target]
上面可以看到使用 multi-user.target、graphical.target 来代表运行级别(3、5),其实可以通过 runlevel 的手册看到 why。
2.2 设置默认启动模式
我们设置默认启动模式也是通过 systemdctl
来实现的。操作如下:
# 获取当前默认运行级别信息
$ sudo systemctl get-default
multi-user.target
# 设置系统默认运行级别信息
$ sudo systemctl set-default multi-user.target
参考资料:
- systemctl 命令完全指南