努力
加油

如何通过终端命令查看Ubuntu已安装的桌面环境?

在 Ubuntu 系统里,确认当前运行的是哪个桌面环境(DE),其实没有一条“万能”命令能直接输出标准答案,因为不同发行版和配置下,环境变量和进程命名习惯差异很大。

作为在 Linux 圈子里摸爬滚打多年的老手,我给你梳理几种最靠谱、最实用的方法,按推荐程度排序:

1. 最准确的方法:检查 XDG_CURRENT_DESKTOP 环境变量

这是 XDG 标准定义的环境变量,绝大多数现代桌面环境都会设置这个值。它比看进程名更可靠,因为有些轻量级窗口管理器(如 i3, sway)可能不挂靠在传统 DE 之下,但这个变量通常能反映用户会话的类型。

echo $XDG_CURRENT_DESKTOP

常见输出解读:

  • ubuntu: 默认 GNOME Shell
  • Unity: Unity 桌面(旧版 Ubuntu)
  • GNOME: 纯 GNOME 环境
  • KDE: KDE Plasma
  • XFCE: XFCE4
  • MATE: MATE Desktop
  • LXQt / LXDE: LXQt 或 LXDE
  • budgie: 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 → GNOME
  • kde-plasma → KDE
  • xubuntu → XFCE
  • mate → MATE

4. 使用 neofetch 或 screenfetch(如果已安装)

如果你装了 neofetch,它会非常直观地显示当前使用的桌面环境:

neofetch

输出中会有类似 DE: GNOME 或 DE: KDE 的行。


5. 特殊情况:Wayland vs X11

现在 Ubuntu 默认使用 Wayland,而 KDE 也支持 Wayland。有时你需要区分图形协议:

echo $XDG_SESSION_TYPE
  • x11: 传统 X Server
  • wayland: 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

避坑指南

  1. 不要只看 whoami 或 hostname,这和桌面环境无关。
  2. 不要依赖 lsb_release,它只告诉你 Ubuntu 版本,不告诉你装了什么桌面。
  3. 虚拟机里可能不同:VMware/VirtualBox 默认可能安装的是 open-vm-tools-desktop 提供的简易界面,不一定完整。
  4. 服务器版无 GUI:如果你是在 Ubuntu Server 上,上述命令大多返回空或错误,因为没有安装任何桌面环境。此时应理解为“无桌面环境”。

对于大多数 Ubuntu 用户,echo $XDG_CURRENT_DESKTOP 是最快、最准确的单一命令。