What is the difference between DESKTOP_SESSION, XDG_SESSION_DESKTOP, and XDG_CURRENT_DESKTOP?
I want to detect which desktop manager I am running, and I found out that there are three environment variables, DESKTOP_SESSION
, XDG_SESSION_DESKTOP
, and XDG_CURRENT_DESKTOP
which could help me do so. But what exactly is the difference between these three variables? Thanks in advance.
I'm not sure what the official reasons are for having many different variables, most likely different window & display managers all do their own particular configurations.
But all of them look the same, so using any one should work...
Here's what Mint's XFCE has:
$ echo $DESKTOP_SESSION
xfce
$ echo $XDG_SESSION_DESKTOP
xfce
$ echo $XDG_CURRENT_DESKTOP
XFCE
and also
$ echo $SESSION
xfce
$ echo $MDMSESSION
xfce
$ echo $GDMSESSION
xfce
Or (from env
):
XDG_MENU_PREFIX=xfce-
UPSTART_JOB=startxfce4
Your best bet (if you've got wmctrl
) may be this combined with grep/cut:
$ wmctrl -m
Name: Xfwm4
Class: xfwm4
PID: 5449
Window manager's "showing the desktop" mode: N/A
You can also be using a different Window Manager and Display Manager, and some different distributions store data in different places, so confusion reigns supreme. See these very related Q's:
- How to determine which window manager is running
- How can I find which desktop enviroment I am using? [duplicate of above]
- Is there a simple linux command that will tell me what my display manager is?
- How to detect the desktop environment in a bash script?
Old question, but still highly ranked on Google, so worth answering in 2021.
You want to use only the official $XDG_CURRENT_DESKTOP
. Be careful that it is a colon-separated list (like $PATH
), so don't assume it only contains a single value (even if it is in most DEs). If you prefer to handle a single value, use $XDG_SESSION_DESKTOP
.
Official standards:
-
XDG_CURRENT_DESKTOP, defined in the Desktop Entry Specification since its version 1.2
-
XDG_SESSION_DESKTOP, best described in
systemd
's PAM -
DESKTOP_SESSION
is deprecated. Some DEs/WMs still set it for the sake of backward-compatibility, for new software it is not needed. It's 2021 after all.
For more details, including a bash function to parse and test a desktop environment, see https://unix.stackexchange.com/a/645761/4919