Is there any way (such as a command or environmental variable) to determine what window manager is the one actively running in the current session?
15 Answers
If you have wmctrl installed, the first line of output from command
wmctrl -m
will show you the name of the window manager. If you don't have wmctrl installed, use the following command to install it:
sudo apt-get install wmctrl
Note, man wmctrl (that is, the man page for wmctrl) says in part:
-mDisplay information about the window manager ...
On my Ubuntu 11.10 / Linux 3.0.0-14-generic #23-Ubuntu x86_64 / metacity 2.34.1 system, the first line of output from wmctrl -m was: Name: Metacity
while echo $DESKTOP_SESSION showed ubuntu-2d and echo $XDG_CURRENT_DESKTOP showed Unity.
On a fresh Ubuntu 15.10 install of Ubuntu desktop software on an old laptop, the first line of output from wmctrl -m was: Name: Compiz
while the DESKTOP_SESSION and XDG_CURRENT_DESKTOP values were ubuntu and Unity
- 14,308
- 4
- 74
- 117
- 2,069
- 1
- 15
- 16
-
5Unfortunately this doesn't work over ssh even if X11 is enabled. – Sridhar Sarnobat Apr 22 '14 at 04:54
-
2@Sridhar-Sarnobat on ubuntu 15.04, running `ssh -Y {host} 'wmctrl -m'` does return some values (e.g., "Name: Compiz", and several N/A's), but it makes sense that `ssh` would have limited info about the window manager. – michael May 04 '15 at 02:52
-
on debian running cinnamon, this does not work. output of wmctrl -m is Name: Mutter(Muffin) while $XDG_CURRENT_DESKTOP=X-Cinnamon – Floyd Jan 02 '16 at 08:58
-
On Xubuntu Wily, running Window Maker 0.95.6 - wmctrl reports N/A for all entries. GDMSESSION is set to wmaker-common but XDG_CURRENT_DESKTOP isnt set at all. – Mei Jul 11 '16 at 19:13
-
@Mei, do you have Window Maker running on any other systems you can compare? Also, do either of `wmctrl -d` (List all desktops managed by the window manager) or `wmctrl -l` (List the windows being managed by the window manager) work ok on Xubuntu Wily with Window Maker? – James Waldby - jwpat7 Jul 12 '16 at 18:55
-
1Note to wanderers from outside Ubuntu. On RedHat wmctrl is available from the nux-dextop repo (see https://unix.stackexchange.com/questions/447999/identify-and-restart-gnome-classic-window-manager-on-rhel7) – Bruce Adams Jun 05 '18 at 14:33
-
@SridharSarnobat, the XServer runs on the local system so you don't need to ssh to it. If you are running Windows (no Xserver) then ssh'ing into a remote server your connection will not likely be associated with a display. – PatS Jan 30 '21 at 00:31
-
The last line says:`Window manager's "showing the desktop" mode: OFF`. What does it mean? – Timo Apr 26 '21 at 18:17
-
@Timo Per [_NET_SHOWING_DESKTOP](https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html#idm45643490151936) entry in "Extended Window Manager Hints" at freedesktop.org, if that were on, windows would be hidden, with only the desktop background displayed and focused. Maybe not an everyday need. – James Waldby - jwpat7 Jul 24 '21 at 23:08
-
How a friendly clarification: Really `$DESKTOP_SESSION` returns the **Window Manager** - that is the correct answer. - for more details see - https://askubuntu.com/a/125072/970554 - and `$XDG_CURRENT_DESKTOP` returns the **Desktop Environment** – Manuel Jordan Nov 27 '21 at 14:50
On Linux systems I tested environment variables XDG_CURRENT_DESKTOP and GDMSESSION and got the following results.
You can use this line to get the output:
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
Ubuntu 18.04 and 20.04 (Ubuntu on GNOME)
XDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntu
Ubuntu 18.04 (Ubuntu on Wayland)
XDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntu-wayland
Ubuntu 16.04
Unity (7)
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu
Ubuntu 14.04
Unity running with Mir
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu
Note MIR_SERVER_NAME is also set
MIR_SERVER_NAME=session-$NUMBER
Unity running without Mir
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu
XFCE
XDG_CURRENT_DESKTOP=XFCEGDMSESSION=xfce
Ubuntu 12.04
KDE
XDG_CURRENT_DESKTOP=GDMSESSION=kde-plasma
Unity 3D
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu
Unity 2D
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu-2d
Gnome
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-shell
Gnome Classic
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-classic
Gnome Classic (no effects)
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-fallback
Other Ubuntu based distributions
Mint 13 (Cinnamon)
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=cinnamon
Mint 16 (KDE edition)
XDG_CURRENT_DESKTOP=KDEGDMSESSION=default
Mint 17 (Cinnamon)
XDG_CURRENT_DESKTOP=X-CinnamonGDMSESSION=default
Lubuntu 12.04
XDG_CURRENT_DESKTOP=LXDEGDMSESSION=Lubuntu
Wasta 14.04 / 18.04
XDG_CURRENT_DESKTOP=X-CinnamonGDMSESSION=cinnamon
Wasta 14.04 using Gnome desktop.
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome
Ubuntu Mate 18.04
XDG_CURRENT_DESKTOP=MATEGDMSESSION=mate
Xubuntu 18.04
XDG_CURRENT_DESKTOP=XFCEGDMSESSION=xubuntu
Kali Linux kali-rolling 2020.2
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=lightdm-xsession
- 1,744
- 1
- 12
- 16
-
4
-
1
-
2
-
1
-
12
-
Really `$DESKTOP_SESSION` returns the **Window Manager** - that is the correct answer. - for more details see - https://askubuntu.com/a/125072/970554 - and `$XDG_CURRENT_DESKTOP` returns the **Desktop Environment** – Manuel Jordan Nov 27 '21 at 14:48
-
@RobertSiemer in someway the answer is correct - it seems that `GDMSESSION` returns the **Window Manager** - of course we are right about that `$XDG_CURRENT_DESKTOP` returns the **Desktop Environment** – Manuel Jordan Nov 28 '21 at 00:36
In the terminal type env to see all environment variables. Some of them are:
XDG_CURRENT_DESKTOP - Tells you what desktop environment you are using
GDMSESSION - Tells you what option you selected from the lightdm greeter to login.
To use them, go to the terminal and type:
echo $XDG_CURRENT_DESKTOP
(Will output for example 'unity' if you are using Unity)
or
echo $GDMSESSION
(Will output for example 'ubuntu' if you selected ubuntu in the login or 'ubuntu-2d' if you selected that one in the login.)
You have others if you look closer at the output of env like DESKTOP_SESSION and COMPIZ_CONFIG_PROFILE
Since what you are looking for is the name of what Window Manager is in use, the only way I see how to get this is by looking in the process list. To do this there is a command called pgrep ( Wikipedia ). I did the following to get the name since the parameter -l adds the process ID:
pgrep -l compiz |cut -d " " -f2 since the process is running by the same user there is no need to prefix the sudo part. You can then use this to create a script that does an action based on the Window Manager.
To look for other types, just change the word compiz to another like mutter, kwin, etc..
- 955
- 8
- 30
- 209,003
- 167
- 543
- 707
-
4Those just tell me the session name and desktop environment. Example it says "GNOME" which is a desktop environment that can use Metacity, Mutter, Compiz or other window managers. It says "gnome-classic" which is a session name, there is no such window manager with that name. – Anonymous Oct 26 '11 at 23:04
-
1There you go. Found a command that can help with the process list. pgrep. Got to that part, at least it shows you the name of the window manager if found. Trying to check if I can add all of them together there. Your question is very good since Ubuntu 11.10 confuses a bit by using Compiz (Or mutter if when Gnome 3.x) so would be nice to point out the actual Window Manager that is used in Unity. – Luis Alvarado Oct 27 '11 at 00:11
-
1`$XDG_CURRENT_DESKTOP` is the current desktop environment, NOT the window manager. – Ken Sharp Feb 22 '18 at 16:49
-
it seems that `GDMSESSION` returns the **Window Manager** - and of course `$XDG_CURRENT_DESKTOP` returns the **Desktop Environment** – Manuel Jordan Nov 28 '21 at 00:37
I found pstree to be a big help.
Installation
sudo apt-get install pstree
output
This is what I got.
├─lightdm─┬─Xorg───2*[{Xorg}]
│ ├─lightdm─┬─gnome-session─┬─bluetooth-apple───2*[{bluetooth-apple}]
│ │ │ ├─compiz─┬─sh───gtk-window-deco───2*[{gtk-window-deco}]
│ │ │ │ └─5*[{compiz}]
│ │ │ ├─deja-dup-monito───2*[{deja-dup-monito}]
│ │ │ ├─gnome-fallback-───2*[{gnome-fallback-}]
│ │ │ ├─gnome-screensav───2*[{gnome-screensav}]
│ │ │ ├─gnome-settings-───2*[{gnome-settings-}]
│ │ │ ├─nautilus───2*[{nautilus}]
│ │ │ ├─nm-applet───2*[{nm-applet}]
│ │ │ ├─polkit-gnome-au───2*[{polkit-gnome-au}]
│ │ │ ├─ssh-agent
│ │ │ ├─telepathy-indic───2*[{telepathy-indic}]
│ │ │ ├─update-notifier───2*[{update-notifier}]
│ │ │ ├─vino-server───2*[{vino-server}]
│ │ │ ├─zeitgeist-datah───{zeitgeist-datah}
│ │ │ └─3*[{gnome-session}]
│ │ └─{lightdm}
│ └─2*[{lightdm}]
- 1,564
- 16
- 15
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
- 219
- 2
- 2
-
3Can you explain how this works? Also, I think you' re missing a `)` at the end. – Louis Matthijssen May 15 '14 at 06:53
-
@LouisMatthijssen 1. `xprop -root -notype` displays all of the root window's properties (and omits types for easier parsing), the output is send to `awk` via pipe; 2. `awk` instruction `$1=="_NET[blah]CK:"{print $5}'` compares first column of each row of the input it got through the pipe with a given string and if it finds the match it runs the code in brackets which prints the fifth column from this row - just so happens (entirely by accident, I bet) to be the ID of the "_NET_SUPPORTING_WM_CHECK" atom; 3. this ID is then used again to get the properties of the Windows Manager with `xprop -id` – cprn May 15 '14 at 19:31
-
#! /bin/bash
windowManagerName () {
local window=$(
xprop -root -notype
)
local identifier=$(
echo "${window}" |
awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}'
)
local attributes=$(
xprop -id "${identifier}" -notype -f _NET_WM_NAME 8t
)
local name=$(
echo "${attributes}" |
grep "_NET_WM_NAME = " |
cut --delimiter=' ' --fields=3 |
cut --delimiter='"' --fields=2
)
echo "${name}"
}
windowManagerName
Or in one line:
id=$(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}'); xprop -id "${id}" -notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME = " | cut --delimiter=' ' --fields=3 | cut --delimiter='"' --fields=2
- 686
- 6
- 20
-
1this exactly answers the question! The only answer to the question I found. – opinion_no9 Jan 22 '20 at 20:53
I've been testing also with KDE and my conclusion is:
a) Graphical way, with HardInfo: the answer is normally in "Operating System" > "Desktop Environment", but if not you can look to "Environment variables". HardInfo is ready with all the tested distros, except the one with KDE, but it can be easily and quickly installed (only 2 packages in Linux Mint 13).
b) Command line, with this command: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm" -wo | sort -u. The item that appears in more lines should be the answer (if there is a draw the item with "session" should be the solution). And it works through SSH.
-
XFCE also has several `gnome-...` processes (and a kde hit with `kdevtmpfs`) – Xen2050 May 07 '16 at 04:55
-
This question is 9 years old, but still topical.
On my Ubuntu 20.04.2 LTS, I get :
wmctrl -m: GNOME Shell
inxi -Sxx: Desktop = Gnome 3.36.4; wm = gnome-shell; dm = GDM3 3.36.3
gnome-shell -- version: 3.36.4
env:GDM_SESSION : ubuntu ; DESKTOP_SESSION: ubuntu ; XDG_CURRENT_DESKTOP: ubuntu:GNOME
BUT
xprop... (from ruario): _NET_WM_NAME : GNOME Shell ; _GNOME_WM_KEYBINDINGS : Mutter, GNOME Shell ; _MUTTER_VERSION : 3.36.7
and neofetch: de = GNONE ; wm = Mutter
I deduce from this (but not very sure): GNOME is the desktop manager and GNOME Shell the window manager (Mutter must be a trace of my previous LTS versions 16.04 et 18.04).
- 51
- 6
-
That shows how confusing all the content and conclusions are in this entire thread. Your window manager _is_ Mutter, as pointed out very helpfully and accurately by neofetch. (I get Mutter as well on a _new install_ of 20.04, if that helps.) – Levente Mar 07 '21 at 17:04
None of the above actually worked for me, I just wanted to know whether I had Gnome running as my current desktop session.
This is what worked, open a terminal
lsb_release -a
(to check which flavor or version I had installed on my UBUNTU machine)
ls /usr/bin/*session
(launches which desktop session/desktop environment currently in use)
gnome-shell --version
(to find out which version of gnome is installed)
You can use tool called inxi. It can be obtained from Ubuntu Repositories by:
sudo apt install inxi
or from github : https://github.com/smxi/inxi
Just run the command as follows:
inxi -Sx
System: Host: blackhole Kernel: 5.1.15-050115-lowlatency x86_64 bits: 64 compiler: gcc v: 8.3.0
Desktop: i3 4.16.1-178-g31c0f1b8 Distro: Ubuntu 19.04 (Disco Dingo)
Note the Desktop: i3 part. In my case the window manager I use is i3.
Option -S displays system info and x adds info about window manager.
- 3,502
- 4
- 30
- 28
Desktop Environment lxqt (e.g. Lubuntu >= 18.10)
One way is open ~/.config/lxqt/session.conf and find
[General]
__userfile__=true
window_manager=openbox // <==
- 227
- 4
- 12
One solution that works through SSH :
$ cat /etc/X11/default-display-manager | xargs basename
lightdm
- 2,081
- 3
- 28
- 38
Script
The following script resulted as the best answer to a similar question I posted over at unix.se. It also works great with Unity and LXDE.
if [ "$XDG_CURRENT_DESKTOP" = '' ]
then
desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
else
desktop=$XDG_CURRENT_DESKTOP
fi
desktop=${desktop,,} # convert to lower case
echo "$desktop"
- 4,838
- 1
- 45
- 58
This is sort of possible with dbus and the Accounts Service (both by default in Ubuntu).
$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
Worth noting that I've tested this with logging in through lightdm (that is the graphical login screen) , it did detect a classic desktop like blackbox , and obviously detects Unity. I suspect this is a value of what user selects on the login screen as session, that's why it's a bit easier to use that checking for processes
- 103,293
- 19
- 273
- 492
