Ubuntu启动模式切换全解析:从运行级别到systemd目标的实战指南
1. 项目概述:为什么需要切换Ubuntu的启动模式?
在嵌入式开发、服务器运维,甚至是日常的Linux系统调优中,我们经常会遇到一个场景:一台运行Ubuntu的设备,我们并不总是需要它启动后直接进入华丽的图形桌面。对于一台作为后台服务的服务器,图形界面(GUI)会白白消耗宝贵的内存和CPU资源;对于一个嵌入式系统开发者,在调试内核驱动或排查启动故障时,直接进入纯净的字符界面(CLI)能让我们更清晰地看到内核信息、服务启动日志,避免图形界面可能带来的干扰。我自己在部署树莓派集群、调试工控机或者搭建家庭NAS时,就无数次地需要将Ubuntu默认的图形启动改为文本模式,反之亦然。
这个操作看似简单,只是改个配置,但背后涉及Linux的初始化系统(如Upstart、systemd)、运行级别(Runlevel)或目标(Target)的概念,以及引导程序GRUB的配置。更重要的是,Ubuntu的版本迭代非常快,不同版本采用的初始化系统和配置方法截然不同。如果你在网上搜索“Ubuntu 开机进入命令行”,可能会找到一堆相互矛盾甚至已经过时的方法,照着做很可能无效,甚至导致系统无法正常启动。今天,我就结合自己十多年的踩坑经验,为你系统性地梳理从古早版本到最新版Ubuntu切换默认启动模式的正确方法,并解释清楚每一步背后的原理,让你不仅会操作,更能理解为什么这么做。
2. 核心概念解析:运行级别、目标与显示管理器
在动手修改之前,我们必须先理解几个核心概念,否则所有的操作命令都只是死记硬背,一旦环境变化就会束手无策。
2.1 运行级别(Runlevel)的演进与现状
运行级别是SysV init系统(Linux传统的初始化系统)用来定义系统不同运行状态的概念。它用数字0-6表示:
- 0: 停机。
- 1: 单用户模式(救援模式,仅root,用于系统修复)。
- 2-5: 多用户模式。在传统的Debian/Ubuntu定义中, 级别3是纯文本多用户模式 , 级别5是图形界面多用户模式 。但请注意,Ubuntu对2-5级的定义比较灵活。
- 6: 重启。
在Ubuntu 6.10到14.10这段时间,它使用了一套名为 Upstart 的初始化系统。Upstart兼容SysV init的脚本,因此“运行级别”的概念依然存在,但配置方式发生了变化。你提供的原始资料中,修改 /etc/init/rc-sysinit.conf 和 /etc/init/gdm.conf 就是Upstart时代的典型操作。其核心逻辑是:系统默认运行级别由 DEFAULT_RUNLEVEL 环境变量定义(通常放在上述文件中),而图形显示管理器(如gdm)的启动条件被设定为“在运行级别2、4、5时启动”。所以,把默认级别改成3,并让gdm在3级别停止,系统就会进入文本模式。
然而,从Ubuntu 15.04开始, systemd 成为了默认的初始化系统。systemd用“目标(target)”取代了“运行级别”。虽然为了兼容,它依然提供了类似运行级别的target(例如 multi-user.target 对应级别3, graphical.target 对应级别5),但配置哲学和方式已经完全改变。现在网上很多教程失效,就是因为还在用Upstart甚至SysV init的方法去配置systemd系统。
2.2 显示管理器(Display Manager)的角色
图形界面并非凭空出现,它需要一个“守门人”程序来管理图形登录。这个程序就是显示管理器,常见的有GDM(GNOME)、LightDM(轻量级,Ubuntu默认多年)、SDDM(KDE Plasma)。 系统启动时,是先完成核心服务和网络加载,到达某个运行级别或目标后,再由显示管理器启动X Server或Wayland,并呈现登录界面。 因此,切换启动模式的核心,其实就是控制显示管理器是否随系统一起启动。
注意: 直接粗暴地删除显示管理器(如旧资料中提到的删除
/etc/init.d/gdm)是非常危险的操作,这可能导致你既无法进入图形界面,在需要时又难以恢复。正确的方法应该是“禁用”它的自动启动,而非“删除”它。
2.3 GRUB引导参数的作用
无论是旧版还是新版,我们都可以通过修改GRUB引导加载器的内核启动参数,来临时或永久地改变单次启动的行为。添加 text 参数或移除 quiet splash 参数,就是告诉内核:“这次启动不要尝试启动图形系统,并且把启动过程的信息都打印出来”。这对于调试启动故障极其有用。原始资料中“一次性进入文本模式”的方法,就是修改GRUB启动项,这是一种非常安全且有效的临时调试手段。
3. 分版本实操指南:从古早到现代的正确方法
理解了原理,我们来看具体操作。请首先使用 lsb_release -a 或 cat /etc/os-release 命令确认你的Ubuntu版本,然后对号入座。
3.1 适用于 Ubuntu 14.10 及更早版本(Upstart 时代)
对于这些版本(如你资料中提到的9.10、11.04),方法相对统一,主要修改两个Upstart job配置文件。
第一步:修改默认运行级别 打开 /etc/init/rc-sysinit.conf 文件,找到定义 DEFAULT_RUNLEVEL 的行。通常它默认是2。
sudo vi /etc/init/rc-sysinit.conf
# 或者使用你熟悉的编辑器,如 nano
找到类似 env DEFAULT_RUNLEVEL=2 的行,将其修改为:
env DEFAULT_RUNLEVEL=3
这里将默认运行级别从2改为了3(多用户文本模式)。
第二步:控制图形显示管理器(以GDM为例) 接着,修改GDM的Upstart配置文件,让它不要在运行级别3启动。
sudo vi /etc/init/gdm.conf
在这个文件里,你需要找到控制其启动和停止的 start on 和 stop on 条件。
- 确保
start on条件包含运行级别 2, 4, 5 。通常它已经是这样写的:start on runlevel [245]。 - 修改
stop on条件,确保包含运行级别 3 。将类似stop on runlevel [016]的行修改为stop on runlevel [0136]。
这样配置后,系统在运行级别3时,GDM服务会被停止,从而无法启动图形界面。
第三步:重启生效 执行 sudo reboot 重启系统。启动后你将直接进入黑色的文本登录界面。如果想临时切换到图形界面,登录后输入 startx 命令即可。
实操心得: 在Upstart系统上,除了修改配置文件,还可以使用
sudo telinit 3或sudo init 3命令在不重启的情况下,立即从图形界面切换到运行级别3(文本模式)。同理,sudo telinit 5可以切回图形界面。这是一个非常方便的实时切换技巧。
3.2 适用于 Ubuntu 15.04 及之后版本(systemd 时代)
对于现代Ubuntu版本,我们操作的核心是systemd的“目标”和“服务”。
方法一:使用 systemctl 设置默认目标(推荐) 这是最标准、最安全的方法。systemd有一个“默认目标”的概念,类似于默认运行级别。
- 查看当前默认目标:
通常,安装桌面环境后,输出会是systemctl get-defaultgraphical.target。 - 设置默认进入文本模式: 我们希望系统默认启动到多用户文本模式,对应的目标是
multi-user.target。
这条命令实际上是在sudo systemctl set-default multi-user.target/etc/systemd/system/下创建了一个指向/lib/systemd/system/multi-user.target的符号链接default.target。 - 重启生效:
sudo reboot - 恢复图形界面为默认: 如果需要改回来,只需执行:
sudo systemctl set-default graphical.target
方法二:禁用图形显示管理器服务 如果你不想改变默认目标,而是想保留 graphical.target ,但阻止其核心组件——显示管理器自动启动,也可以。
- 确定你的显示管理器:
常见输出可能是cat /etc/X11/default-display-manager/usr/sbin/lightdm或/usr/sbin/gdm3。 - 禁用该服务: 假设显示管理器是lightdm:
这个命令会移除该服务在对应目标下的启动链接,使其下次启动时不会自动运行。sudo systemctl disable lightdm.service - 重启生效。
- 恢复: 需要时使用
sudo systemctl enable lightdm.service重新启用。
注意事项: 在systemd系统上, 绝对不要 再使用
sysv-rc-conf或直接修改/etc/rc*.d/目录下的链接来管理系统服务,这些方法对systemd管理的服务无效或可能造成混乱。始终使用systemctl命令。
3.3 临时/一次性进入文本模式(GRUB参数法,全版本通用)
这个方法在你需要调试、或者只是单次进入文本模式时非常有用,无需永久修改任何配置。
- 开机时,在GRUB菜单界面(通常需要快速按下
Shift或Esc键呼出),选择你要启动的内核项,按e键进入编辑模式。 - 在编辑界面中,找到以
linux或linuxefi开头的那一行。这行定义了内核启动参数。 - 在这行参数中,找到
quiet splash这两个参数。- 删除
quiet splash: 这会关闭安静模式和启动动画,让你看到详细的启动日志,对于排查问题至关重要。 - 添加
text参数: 或者,在行末(ro之后)添加text参数,直接告诉内核启动到文本模式。 例如,将:
修改为:linux /boot/vmlinuz-... root=UUID=... ro quiet splash
或(仅看日志,仍尝试启动图形):linux /boot/vmlinuz-... root=UUID=... ro textlinux /boot/vmlinuz-... root=UUID=... ro - 删除
- 修改完成后,按
Ctrl+X或F10使用修改后的参数启动。 这次修改仅对本次启动生效。
4. 深度配置与高级技巧
除了基本的模式切换,还有一些相关的配置可以优化你的命令行或启动体验。
4.1 配置GRUB以永久更改内核参数
如果你希望每次启动都默认看到详细日志(去掉quiet splash),或者永久添加其他内核参数,需要修改GRUB的配置文件。
- 编辑GRUB主配置文件:
sudo nano /etc/default/grub - 找到
GRUB_CMDLINE_LINUX_DEFAULT这一行。这个变量里的参数就是默认追加到内核启动行的参数。- 若要永久移除开机动画和安静模式,将其修改为:
GRUB_CMDLINE_LINUX_DEFAULT="" - 若要永久默认启动到文本模式,可以添加
text参数(但更推荐用systemctl set-default方法):GRUB_CMDLINE_LINUX_DEFAULT="text"
- 若要永久移除开机动画和安静模式,将其修改为:
- 保存文件后, 必须 运行以下命令来更新GRUB的引导配置:
这个命令会根据sudo update-grub/etc/default/grub的配置重新生成/boot/grub/grub.cfg文件。 忘记执行此步骤是导致修改无效的最常见原因!
4.2 在文本控制台下使用中文与Framebuffer
对于中文用户,在纯文本界面下可能需要查看中文文件名或日志。原始的 zhcon 方案已经比较老旧,在现代系统上可能工作不佳。更推荐使用 fbterm 。
- 安装fbterm:
sudo apt install fbterm - 授予当前用户使用framebuffer的权限:
注销并重新登录(或重启)使组权限生效。sudo gpasswd -a $USER video - 运行fbterm: 登录文本控制台后,直接输入
fbterm即可进入一个支持中文显示和输入(需额外配置输入法)的终端。 - 启用Framebuffer(可选,用于更好的显示效果): 如原始资料所述,可以编辑
/etc/default/grub,取消注释并设置GRUB_GFXMODE,例如:
然后运行GRUB_GFXMODE=1024x768x32sudo update-grub。这可以让GRUB和后续的Linux控制台使用指定的图形分辨率,提升fbterm的显示体验。你可以通过sudo vbeinfo命令(在GRUB命令行中)查看你的固件支持的显示模式。
4.3 处理安装桌面环境后的自动切换
有时,你在一台服务器(文本模式)上安装了桌面环境包(如 ubuntu-desktop ),安装程序可能会自动将默认目标设置为 graphical.target 。如果你不希望如此,安装完成后记得立即检查并改回 multi-user.target :
sudo systemctl set-default multi-user.target
这样,即使桌面环境组件已安装,系统启动时也不会加载图形界面,节省资源。
5. 常见问题与故障排查实录
在实际操作中,你可能会遇到以下问题。这里记录了我遇到过的典型情况及其解决方法。
5.1 修改后重启,系统黑屏或卡住
这是最令人紧张的情况。可能的原因和解决步骤:
-
显示管理器配置冲突: 尤其是在混合使用新旧方法时(比如在systemd系统上错误修改了runlevel)。 解决方案: 尝试在GRUB启动时按
e编辑参数,在linux行末尾添加systemd.unit=multi-user.target(对于systemd系统)或single(进入单用户救援模式)。启动后,检查并撤销错误的配置。- 对于systemd系统:
sudo systemctl set-default multi-user.target(如果之前设错了)。 - 检查是否有残留的Upstart或SysV配置在干扰。
- 对于systemd系统:
-
显卡驱动问题: 有时,强制文本模式可能会触发某些专有显卡驱动的兼容性问题。 解决方案: 同样通过GRUB编辑启动参数,添加
nomodeset参数,这会禁用内核模式设置,使用最基本的显示驱动,通常能让你进入系统。进入系统后,再排查显卡驱动问题。
5.2 忘记了密码,无法登录文本控制台
如果你设置了自动登录图形界面,但忘记了密码,切换到文本模式是重置密码的途径。但如果你在文本控制台也登录不了:
- 重启电脑,在GRUB菜单选择“Advanced options for Ubuntu”。
- 选择一个带
(recovery mode)的内核版本启动。 - 在恢复模式菜单中,选择
root(进入root shell)。 - 此时文件系统通常是以只读方式挂载的,需要重新挂载为可写:
mount -o remount,rw / - 使用
passwd <用户名>命令修改指定用户的密码。 - 执行
sync和reboot重启。
5.3 如何判断当前系统使用的是Upstart还是systemd?
这是一个基础但关键的问题,用一条命令就能判断:
ps -p 1 -o comm=
或者
stat /proc/1/exe
如果输出是 systemd ,那么你的系统就是systemd初始化系统。如果输出是 init (并且可能是Upstart的符号链接),那么就是Upstart或更早的SysV init。在Ubuntu 14.10及之前,通常是Upstart;15.04及之后,一定是systemd。
5.4 切换模式后,网络管理器(NetworkManager)不工作了?
在纯文本模式下,图形化的NetworkManager小程序(nm-applet)当然不会运行,但这不代表网络没起来。NetworkManager服务本身可能仍在运行。
- 使用
systemctl status NetworkManager检查服务状态。 - 在文本模式下,你可以使用
nmtui命令启动一个基于文本用户界面(TUI)的NetworkManager工具来管理连接,非常方便。 - 如果你使用更简单的
systemd-networkd,则使用networkctl命令来查看和管理。
5.5 从文本模式,如何快速启动一个图形界面程序?
有时在服务器上,我们可能需要临时运行一个带图形界面的配置工具(如 raspi-config 或某些设备的烧录工具)。这需要X Server。
- 首先,确保你已通过
ssh -X或ssh -Y从一台有图形环境的电脑连接到了这台服务器。-X或-Y参数启用了X11转发。 - 在服务器的ssh会话中,直接运行图形程序命令即可。例如
firefox。图形界面会显示在你本地电脑上。 - 如果程序抱怨
DISPLAY变量未设置,通常SSH连接会自动设置好。你也可以手动导出:export DISPLAY=localhost:10.0(具体值请查看echo $DISPLAY的输出)。
这个操作的核心在于理解不同Ubuntu版本底层初始化系统的根本性差异。对于Upstart,我们操作的是运行级别和job配置文件;对于systemd,我们操作的是目标和服务单元。永远优先使用当前系统原生初始化系统提供的管理工具(如 systemctl ),避免使用过时或跨体系的方法。GRUB参数修改是进行一次性调试的利器。最后,在文本模式下, fbterm 、 nmtui 、 ssh -X 这些工具能极大提升你的工作效率。掌握这些,你就能游刃有余地掌控Ubuntu的启动面貌,让它更好地为你的开发、运维或学习服务。
更多推荐

所有评论(0)