在 Ubuntu 系统里,确认当前运行的是哪个桌面环境(DE),其实没有一条“万能”命令能直接输出标准答案,因为不同发行版和配置下,环境变量和进程命名习惯差异很大。
作为在 Linux 圈子里摸爬滚打多年的老手,我给你梳理几种最靠谱、最实用的方法,按推荐程度排序:
1. 最准确的方法:检查 XDG_CURRENT_DESKTOP 环境变量
这是 XDG 标准定义的环境变量,绝大多数现代桌面环境都会设置这个值。它比看进程名更可靠,因为有些轻量级窗口管理器(如 i3, sway)可能不挂靠在传统 DE 之下,但这个变量通常能反映用户会话的类型。
echo $XDG_CURRENT_DESKTOP
常见输出解读:
ubuntu: 默认 GNOME ShellUnity: Unity 桌面(旧版 Ubuntu)GNOME: 纯 GNOME 环境KDE: KDE PlasmaXFCE: XFCE4MATE: MATE DesktopLXQt/LXDE: LXQt 或 LXDEbudgie: Budgie 桌面cinnamon: Cinnamon
如果返回空值,说明你可能处于纯 TTY 模式或者某些极简环境,需要结合下面方法判断。
2. 查看登录管理器(Display Manager)的间接推断
桌面环境通常由一个显示管理器来启动和管理会话。虽然显示管理器不等于桌面环境,但它们是强绑定的:
| 显示管理器 | 典型关联的桌面环境 |
|---|---|
gdm3 |
GNOME (Ubuntu 默认) |
sddm |
KDE Plasma, LXQt |
lightdm |
XFCE, MATE, Cinnamon, Unity (旧版) |
lxdm |
LXDE |
你可以用以下命令查看正在运行的显示管理器:
systemctl status display-manager
# 或者
ps aux | grep -E 'gdm|sddm|lightdm' | grep -v grep
注意:LightDM 是“多面手”,它可以启动 KDE、XFCE、MATE 等,所以看到 LightDM 不能直接断定是哪个 DE,必须结合其他方法。
3. 通过进程树查找核心组件
每个桌面环境都有一个标志性的主进程。你可以用 ps 或 pgrep 查找这些进程是否存在。
GNOME (Ubuntu 默认)
ps aux | grep gnome-shell | grep -v grep
如果有 gnome-shell 在运行,基本就是 GNOME。
KDE Plasma
ps aux | grep plasmashell | grep -v grep
plasmashell 是 KDE 的核心面板和桌面组件。
XFCE
ps aux | grep xfce4-session | grep -v grep
xfce4-session 是 XFCE 的会话管理器。
MATE
ps aux | grep mate-session | grep -v grep
Cinnamon
ps aux | grep cinnamon | grep -v grep
通用技巧:查看 DESKTOP_SESSION
另一个环境变量也可以参考:
echo $DESKTOP_SESSION
这个值通常对应 /usr/share/xsessions/ 或 /usr/share/wayland-sessions/ 下的 .desktop 文件名。比如:
ubuntu→ GNOMEkde-plasma→ KDExubuntu→ XFCEmate→ MATE
4. 使用 neofetch 或 screenfetch(如果已安装)
如果你装了 neofetch,它会非常直观地显示当前使用的桌面环境:
neofetch
输出中会有类似 DE: GNOME 或 DE: KDE 的行。
5. 特殊情况:Wayland vs X11
现在 Ubuntu 默认使用 Wayland,而 KDE 也支持 Wayland。有时你需要区分图形协议:
echo $XDG_SESSION_TYPE
x11: 传统 X Serverwayland: Wayland 协议
这不影响你判断桌面环境是什么,但有助于调试图形问题。
总结:一键快速判断脚本
如果你想写个脚本自动判断,可以这样组合:
#!/bin/bash
DE=$(echo $XDG_CURRENT_DESKTOP | tr '[:upper:]' '[:lower:]')
case "$DE" in
*ubuntu*|*gnome*)
echo "Current DE: GNOME (Ubuntu)"
;;
*kde*|*plasma*)
echo "Current DE: KDE Plasma"
;;
*xfce*)
echo "Current DE: XFCE"
;;
*mate*)
echo "Current DE: MATE"
;;
*cinnamon*)
echo "Current DE: Cinnamon"
;;
*lxqt*|*lxde*)
echo "Current DE: LXQt/LXDE"
;;
*)
# fallback: check running processes
if pgrep -x gnome-shell > /dev/null; then
echo "Fallback: Likely GNOME"
elif pgrep -x plasmashell > /dev/null; then
echo "Fallback: Likely KDE Plasma"
elif pgrep -x xfce4-session > /dev/null; then
echo "Fallback: Likely XFCE"
else
echo "Unknown DE. Check manually with 'ps aux | grep -E gnome|kde|xfce'"
fi
;;
esac
避坑指南
- 不要只看
whoami或hostname,这和桌面环境无关。 - 不要依赖
lsb_release,它只告诉你 Ubuntu 版本,不告诉你装了什么桌面。 - 虚拟机里可能不同:VMware/VirtualBox 默认可能安装的是
open-vm-tools-desktop提供的简易界面,不一定完整。 - 服务器版无 GUI:如果你是在 Ubuntu Server 上,上述命令大多返回空或错误,因为没有安装任何桌面环境。此时应理解为“无桌面环境”。
对于大多数 Ubuntu 用户,echo $XDG_CURRENT_DESKTOP 是最快、最准确的单一命令。
云技术博客