#1 楼
如果安装了wmctrl
,则命令wmctrl -m
的输出的第一行将显示窗口管理器的名称。如果未安装
wmctrl
,请使用以下命令进行安装:sudo apt-get install wmctrl
注意,
man wmctrl
(即man
的wmctrl
页面)部分说明:-m
在我的Ubuntu 11.10 / Linux 3.0.0-14-generic#23上显示有关窗口管理器的信息... -Ubuntu x86_64 / metacity 2.34.1系统,来自
wmctrl -m
的第一行输出是:Name: Metacity
,而
echo $DESKTOP_SESSION
显示ubuntu-2d
和echo $XDG_CURRENT_DESKTOP
显示Unity
。在全新安装的Ubuntu 15.10
Ubuntu desktop
软件上安装在旧笔记本电脑上,wmctrl -m
的第一行输出是:Name: Compiz
,而
DESKTOP_SESSION
和XDG_CURRENT_DESKTOP
的值分别是ubuntu
和Unity
#2 楼
在Linux系统上,我测试了环境变量XDG_CURRENT_DESKTOP
和GDMSESSION
,并得到以下结果。您可以使用此行来获取输出:
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
Ubuntu 18.04和20.04(GNOME上的Ubuntu)
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu
Ubuntu 18.04(Ubuntu上Wayland)
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu-wayland
Ubuntu 16.04
团结(7)
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
Ubuntu 14.04
与Mir共同运行
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
注意
MIR_SERVER_NAME
也设置MIR_SERVER_NAME=session-$NUMBER
不带Mir的统一运行
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XFCE
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xfce
Ubuntu 12.04
KDE
XDG_CURRENT_DESKTOP=
GDMSESSION=kde-plasma
Unity 3D
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
Unity 2D
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu-2d
Gnome
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-shell
侏儒经典版
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-classic
侏儒经典版(无效果)
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-fallback
其他基于Ubuntu的发行版
Mint 13(肉桂色)
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=cinnamon
薄荷16(KDE版)
XDG_CURRENT_DESKTOP=KDE
GDMSESSION=default
薄荷17(肉桂)
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=default
Lubuntu 12.04
XDG_CURRENT_DESKTOP=LXDE
GDMSESSION=Lubuntu
瓦斯塔14.04 / 18.04
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=cinnamon
Wasta 14.04使用Gnome桌面。
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome
Ubuntu Mate 18.04
XDG_CURRENT_DESKTOP=MATE
GDMSESSION=mate
Xubuntu 18.04
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xubuntu
> Kali Linux kali-rolling 2020.2
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=lightdm-xsession
评论
薄荷13(肉桂):XDG_CURRENT_DESKTOP = GNOME,GDMSESSION =肉桂
– rik-shaw
2012-12-11 18:02
Lubuntu 12.04:XDG_CURRENT_DESKTOP = LXDE,GDMSESSION = Lubuntu
– rik-shaw
2012年12月11日在18:07
$ DESKTOP_SESSION呢?作为备份解决方案:)
– Savvas Radevic
2013年1月2日,10:25
如果我不使用GDM怎么办?
– Robert Siemer
2014年3月13日在11:20
而且,它不能回答我使用什么窗口管理器!
– Robert Siemer
2015年3月9日,11:22
#3 楼
在终端中,键入env
以查看所有环境变量。其中一些是:XDG_CURRENT_DESKTOP-告诉您正在使用的桌面环境
GDMSESSION-告诉您从lightdm问候者中选择的登录选项。
要使用它们,请在终端上输入:
echo $XDG_CURRENT_DESKTOP
(如果使用Unity,则将输出例如“ unity”)
或
echo $GDMSESSION
(如果在登录名中选择了ubuntu,则将输出例如'ubuntu';如果在登录名中选择了该名称,则将输出'ubuntu-2d'。登录。)
如果您仔细查看
env
的输出(例如DESKTOP_SESSION和COMPIZ_CONFIG_PROFILE ),您还会发现其他名称,因为您要查找的是Window Manager所在的名称使用时,我看到如何获得此结果的唯一方法是查看进程列表。为此,有一个名为
pgrep
(Wikipedia)的命令。我执行以下操作来获取名称,因为参数-l添加了进程ID:pgrep -l compiz |cut -d " " -f2
由于该进程由同一用户运行,因此无需在sudo部分添加前缀。然后,您可以使用它来创建一个基于窗口管理器执行操作的脚本。要查找其他类型,只需将
compiz
改为另一个mutter
,kwin
等。 />评论
那些只是告诉我会话名称和桌面环境。例如,它说“ GNOME”,这是一个可以使用Metacity,Mutter,Compiz或其他窗口管理器的桌面环境。它说“ gnome-classic”是一个会话名称,没有使用该名称的窗口管理器。
–匿名
2011-10-26 23:04
妳去找到了可以帮助处理列表的命令。 pgrep。转到该部分,至少可以找到找到的窗口管理器名称。尝试检查是否可以将所有这些都添加到那里。您的问题非常好,因为Ubuntu 11.10通过使用Compiz引起了一些混乱(如果在Gnome 3.x时则喃喃自语),那么指出在Unity中使用的实际Window Manager会很不错。
–路易斯·阿尔瓦拉多(Luis Alvarado)
11-10-27在0:11
$ XDG_CURRENT_DESKTOP是当前的桌面环境,而不是窗口管理器。
–肯·夏普
18年2月22日在16:49
#4 楼
我发现pstree
有很大帮助。 安装
sudo apt-get install pstree
输出
这就是我得到的。
├─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}]
评论
这让我有了自定义的buildroot系统。
– jc__
19年2月5日在21:12
#5 楼
xprop -id $(xprop -root -notype | awk '=="_NET_SUPPORTING_WM_CHECK:"{print }') -notype -f _NET_WM_NAME 8t
评论
您能解释一下这是如何工作的吗?另外,我认为您最后缺少)。
–路易·马蒂斯森(Louis Matthijssen)
2014年5月15日下午6:53
@LouisMatthijssen 1. xprop -root -notype显示所有根窗口的属性(并省略类型以简化解析),输出通过管道发送到awk。 2. awk指令$ 1 ==“ _ NET [blah] CK:” {print $ 5}'将通过管道获得的输入的每一行的第一列与给定的字符串进行比较,如果找到匹配项,则将其放在方括号中它从该行打印出第五列-恰好发生(我敢打赌,完全是偶然)是“ _NET_SUPPORTING_WM_CHECK”原子的ID; 3.然后,此ID再次用于通过xprop -id获取Windows Manager的属性。
–cprn
2014年5月15日19:31
#6 楼
#! /bin/bash
# (GPL3+) Alberto Salvia Novella (es20490446e.wordpress.com)
windowManagerName () {
local window=$(
xprop -root -notype
)
local identifier=$(
echo "${window}" |
awk '=="_NET_SUPPORTING_WM_CHECK:"{print }'
)
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
或一行:
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
评论
这正好回答了这个问题!我找到的问题的唯一答案。
– opinion_no9
20年1月22日在20:53
#7 楼
我也在用KDE进行测试,得出的结论是:a)使用HardInfo的图形化方式:答案通常在“操作系统”>“桌面环境”中,但是如果没有,您可以看一下到“环境变量”。 HardInfo可以用于所有经过测试的发行版,除了带有KDE的发行版之外,它可以轻松,快速地安装(Linux Mint 13中只有2个软件包)。
b)命令行,使用以下命令:
ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"
。出现在更多行中的项目应该是答案(如果有平局,则带有“会话”的项目应该是解决方案)。评论
XFCE还具有多个gnome -...进程(以及用kdevtmpfs命中kde)
– Xen2050
16年5月7日下午4:55
#8 楼
只需两美分。$ sudo apt install neofetch
$ neofetch
#9 楼
以上都不是对我真正有用的,我只是想知道我是否在当前的桌面会话中运行了Gnome。这是可行的,打开一个终端
lsb_release -a
(检查我的UBUNTU计算机上安装了哪种风味或版本)
ls /usr/bin/*session
(启动当前的桌面会话/桌面环境正在使用)
gnome-shell --version
(找出已安装哪个版本的gnome)
评论
ls / usr / bin / * session告诉我安装了什么
– AlexOnLinux
20年6月18日在16:14
#10 楼
您可以使用名为inxi
的工具。可以通过以下方式从Ubuntu存储库中获取:sudo apt install inxi
,或者从github:https://github.com/smxi/inxi
运行以下命令:
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)
注意
Desktop: i3
部分。在我的情况下,我使用的窗口管理器是i3
。选项
-S
显示系统信息,而x
添加有关窗口管理器的信息。#11 楼
使用dbus和Accounts Service(这在Ubuntu中都是默认设置)是可行的。$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
值得一提的是,我已经通过lightdm(即图形登录屏幕)登录对它进行了测试,它确实检测到了像blackbox这样的经典桌面,并且显然检测Unity。我怀疑这是用户在登录屏幕上选择的会话的值,这就是为什么使用进程检查要容易一些的原因
#12 楼
脚本以下脚本是对我在unix.se上发布的类似问题的最佳答案。
if [ "$XDG_CURRENT_DESKTOP" = '' ]
then
desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*//')
else
desktop=$XDG_CURRENT_DESKTOP
fi
desktop=${desktop,,} # convert to lower case
echo "$desktop"
评论
不幸的是,即使启用了X11,它也不能在ssh上运行。
– Sridhar Sarnobat
2014年4月22日下午4:54
@ubridu 15.04上的@ Sridhar-Sarnobat,运行ssh -Y {host}'wmctrl -m'确实会返回一些值(例如,“ Name:Compiz”和几个N / A),但是ssh的信息有限关于窗口管理器。
–迈克尔
15年5月4日在2:52
在运行肉桂的debian上,这不起作用。 wmctrl -m的输出为Name:Mutter(Muffin),而$ XDG_CURRENT_DESKTOP = X-Cinnamon
–弗洛伊德
16年1月2日在8:58
在Xubuntu Wily上,运行Window Maker 0.95.6-wmctrl报告所有条目的N / A。 GDMSESSION设置为wmaker-common,但是根本没有设置XDG_CURRENT_DESKTOP。
–美
16年7月11日在19:13
@Mei,您是否可以在可以比较的任何其他系统上运行Window Maker?另外,在带有Window Maker的Xubuntu Wily上,wmctrl -d(列出由窗口管理器管理的所有桌面)或wmctrl -l(列出由窗口管理器管理的窗口)中的任何一个都可以正常工作吗?
–詹姆斯·沃尔德比-jwpat7
16年7月12日在18:55