在 Ubuntu 这种服务器端(Server)或无头(Headless)部署的场景下,确认系统当前是否处于纯命令行模式(CLI),其实不需要什么玄学手段。核心逻辑就一条:看 systemd 的目标状态(Target) 和 检查图形服务进程是否存在。
以下是几种最靠谱、最符合 Linux 运维习惯的验证方法,按推荐程度排序:
1. 查看系统默认启动目标(最权威)
Ubuntu 基于 systemd 管理启动流程。Linux 的多用户级别通常对应 multi-user.target(相当于以前的 runlevel 3,即纯文本模式),而图形界面通常对应 graphical.target(相当于 runlevel 5)。
执行以下命令:
systemctl get-default
- 输出
multi-user.target:恭喜,你确定是纯命令行模式。这是绝大多数云服务器、后台服务的标准配置。 - 输出
graphical.target:说明系统默认会尝试加载图形界面。但这不代表你现在一定有 GUI 在跑,可能只是配置了默认值,但实际没装显卡驱动或显示器,导致 fallback 到 CLI。不过从“运行模式”的定义来说,它被标记为图形模式。
更精确一点,可以看当前正在运行的目标:
systemctl list-units --type=target --state=active | grep -E 'multi-user|graphical'
如果只看到 multi-user.target 活跃,那就是铁板钉钉的纯命令行。
2. 检查关键显示服务进程(最直观)
如果有图形界面,必然会有 X Server (Xorg/Xwayland) 或 Wayland Compositor 在运行。如果没有这些进程,哪怕你装了桌面环境包,当前也是纯命令行。
使用 ps 或 pgrep 快速排查:
# 检查是否有 Xorg 或 Xserver 进程
ps aux | grep -E '[Xx]org|[Xx]server'
# 或者更彻底地检查 display manager (如 gdm3, lightdm, sddm)
ps aux | grep -E '[gls]ightdm|[gd]m3|[s]ddm'
- 如果没有任何输出(除了 grep 自身的进程):说明没有图形显示管理器,也没有 X Server。这是纯命令行模式的强证据。
- 如果有输出:说明图形服务已启动,你可能进入了图形模式,或者至少图形栈是活的。
3. 使用 who 或 tty 辅助判断
虽然这个方法不能直接证明“有没有 GUI”,但可以帮你确认你当前登录的环境类型。
tty
- 输出
/dev/tty1,/dev/pts/0等:这是标准的虚拟终端或伪终端,是 CLI 的典型特征。 - 如果你是通过 SSH 登录:你肯定是在 CLI 里,因为 SSH 本身不传输图形协议(除非你做了复杂的 X11 Forwarding,但那只是转发一个窗口,不是整个系统运行在 GUI 模式下)。
4. 终极暴力测试:尝试启动图形界面
如果你实在拿不准,可以手动尝试启动图形会话,看看会发生什么。
sudo systemctl start graphical.target
- 如果成功且屏幕变黑/闪烁后回到登录提示符:说明系统里有图形环境,但可能因为缺少显示器检测、显卡驱动问题或无头设置(NoVNC/KVM over IP)而没有真正显示出来。此时系统处于“可图形化”状态,但物理上你可能还是在 CLI。
- 如果报错或无反应:说明系统里没有安装完整的图形栈,或者配置被禁用了。
常见误区澄清
-
“我安装了 ubuntu-desktop 包,所以一定有 GUI?”
错。很多云厂商的镜像虽然基础包里带了桌面环境的元数据包(meta-package),但在首次启动时,如果没有检测到本地显示器或特定硬件,它会静默跳过图形界面,直接进入multi-user.target。你可以用dpkg -l | grep ubuntu-desktop看看装没装,但这不代表它在运行。 -
“我用 VNC/RDP 连进去有窗口,是不是就有 GUI?”
不一定。有些远程工具(如 XRDP)可以在 CLI 环境下模拟出一个轻量级的图形会话。这种情况下,systemctl get-default依然可能是multi-user.target,但你的操作体验是图形化的。严格来说,系统内核和服务层仍是 CLI 模式,只是上层封装了图形交互。
总结建议
对于日常运维和故障排查,只看一行命令就够了:
systemctl get-default
只要返回 multi-user.target,并且 ps aux | grep [Xx]org 为空,你就可以 100% 确信当前系统是纯命令行模式。这在阿里云、腾讯云、AWS 等国内主流云平台的 Ubuntu 实例中是最常见的状态。
云技术博客