禁用圖形界面本質(zhì)就是調(diào)整 linux 的運(yùn)行級別(runlevel)。PS:這里不討論 GUI Desktop 的安裝與卸載。
一、什么是 Linux 運(yùn)行級別?
linux 操作系統(tǒng)自從開始啟動至啟動完畢需要經(jīng)歷幾個(gè)不同的階段,這幾個(gè)階段就叫做 runlevel,同樣,當(dāng) linux 操作系統(tǒng)關(guān)閉時(shí)也要經(jīng)歷這幾個(gè)不同的 runlevel,下面我們就準(zhǔn)備詳細(xì)介紹一下 runlevel。
runlevel 可以認(rèn)為是系統(tǒng)狀態(tài),形象一點(diǎn),您可以認(rèn)為 runlevel 有點(diǎn)像微軟的 windows 操作系統(tǒng)中的 Normal,safemode,和 command prompt only。進(jìn)入每個(gè) runlevel 都需要啟動或關(guān)閉相應(yīng)的一系列服務(wù) (services),這些服務(wù) (services) 以初始化腳本的方式放置于目錄 /etc/rc.d/rc?.d/或者 /etc/rc?.d下面(? 代表 runlevel 的對應(yīng)序號)。
在大多數(shù)的 linux 發(fā)行版本中,通常有 6 個(gè)runlevel:
0 停機(jī) # 是不是發(fā)現(xiàn)了一個(gè)新的關(guān)機(jī)命令 ??
1 單用戶模式
2 多用戶,沒有 NFS
3 完全多用戶模式
4 沒有用到
5 圖形界面
6 重新啟動 # 是不是發(fā)現(xiàn)了一個(gè)新的重啟命令 ??
多數(shù)的桌面發(fā)行版 linux 系統(tǒng)缺省的 runlevel 是 5,用戶登陸時(shí)是圖形界面;而多數(shù)的服務(wù)器版本的 linux 系統(tǒng)(e.g. Ubuntu Server 、CentOS 最小化安裝時(shí))缺省的 runlevel 是 3,用戶登陸時(shí)是字符界面;runlevel 1 和 2 除了調(diào)試之外很少使用;runlevel 6 則表示重新啟動。

(上圖) 圖形界面下的 runlevel 為 5

(上圖) 字符界面下的 runlevel 為 3
linux 的運(yùn)行模式比起 windows 的啟動模式的優(yōu)勢在于:你可以在系統(tǒng)空閑時(shí)使用 init 命令切換你現(xiàn)在使用的 runlevel,另外,當(dāng)你關(guān)閉或者啟動 linux 系統(tǒng)時(shí)你已經(jīng)不知不覺中切換你的 runlevel,系統(tǒng)關(guān)機(jī)進(jìn)程需要調(diào)用 runlevel(0或6) 來關(guān)閉所有正在運(yùn)行中的進(jìn)程。
二、字符界面與圖形界面的切換
2.1 臨時(shí)切換
2.1.1 使用 init 臨時(shí)切換
通常上面的介紹我們了解了原理,此外上面也提到通過可以通過 init 來動態(tài)切換運(yùn)行級別,使用起來也超級簡單。
# 切換為完全多用戶模式(字符界面)
$ sudo init 3
# 切換為圖形模式
$ sudo init 5
2.1.2 使用 systemdctl 來臨時(shí)切換
Systemd 是一個(gè)系統(tǒng)管理守護(hù)進(jìn)程、工具和庫的集合,用于取代 System V 初始進(jìn)程。Systemd 的功能是用于集中管理和配置類 UNIX 系統(tǒng)。
在 Linux 生態(tài)系統(tǒng)中,Systemd 現(xiàn)已被部署到了大多數(shù)的標(biāo)準(zhǔn) Linux 發(fā)行版中,只有為數(shù)不多的幾個(gè)發(fā)行版尚未部署。Systemd 通常是所有其它守護(hù)進(jìn)程的父進(jìn)程(即 system 的 PID 為1,如下圖),但并非總是如此。

其實(shí)在 systemd 出來之前 PID 1 其實(shí)是 init 進(jìn)程。所以現(xiàn)階段我們所使用的 init 其只是一個(gè)歷史兼容(所以今后推薦使用
systemdctl來臨時(shí)切換)。感興趣可以通過man手冊來了解詳情。
使用 systemd 的工具命令為 systemctl ,下面是使用 systemctl 來臨時(shí)切換的操作樣例
# 切換為完全多用戶模式(字符界面)
$ sudo systemctl isolate [multi-user.target | runlevel3.target]
# 切換為圖形模式
$ sudo systemctl isolate [graphical.target | runlevel5.target]
上面可以看到使用 multi-user.target、graphical.target 來代表運(yùn)行級別(3、5),其實(shí)可以通過 runlevel 的手冊看到 why。

2.2 設(shè)置默認(rèn)啟動模式
我們設(shè)置默認(rèn)啟動模式也是通過 systemdctl 來實(shí)現(xiàn)的。操作如下:
# 獲取當(dāng)前默認(rèn)運(yùn)行級別信息
$ sudo systemctl get-default
multi-user.target
# 設(shè)置系統(tǒng)默認(rèn)運(yùn)行級別信息
$ sudo systemctl set-default multi-user.target