问题描述
有没有什么方法(如命令或环境变量)来确定当前会话中正在运行的窗口管理器是什么?
最佳解决办法
如果您安装了wmctrl
,则命令的第一行输出
wmctrl -m
会显示窗口管理器的名称。如果您没有安装wmctrl
,请使用以下命令进行安装:
sudo apt-get install wmctrl
请注意,man wmctrl
(即wmctrl
的man
页面)部分地说:
-m Display information about the window manager …
在我的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
次佳解决办法
在Linux系统上,我测试了环境变量XDG_CURRENT_DESKTOP
和GDMSESSION
并获得了以下结果。
You can use this line to get the output:
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
Ubuntu 16.04
团结(7)
-
XDG_CURRENT_DESKTOP=Unity
-
GDMSESSION=ubuntu
Ubuntu 14.04
与Mir运行的Unity
-
XDG_CURRENT_DESKTOP=Unity
-
GDMSESSION=ubuntu
注意MIR_SERVER_NAME也被设置
-
MIR_SERVER_NAME=session-$NUMBER
Unity没有和平运行
-
XDG_CURRENT_DESKTOP=Unity
-
GDMSESSION=ubuntu
XFCE
-
XDG_CURRENT_DESKTOP=XFCE
-
GDMSESSION=xfce
Ubuntu 12.04
KDE
-
XDG_CURRENT_DESKTOP=
-
GDMSESSION=kde-plasma
团结3d
-
XDG_CURRENT_DESKTOP=Unity
-
GDMSESSION=ubuntu
统一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的发行版
薄荷13(肉桂)
-
XDG_CURRENT_DESKTOP=GNOME
-
GDMSESSION=cinnamon
Mint 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
Wasta 14.04
-
XDG_CURRENT_DESKTOP=X-Cinnamon
-
GDMSESSION=cinnamon
Wasta 14.04使用Gnome桌面。
-
XDG_CURRENT_DESKTOP=GNOME
-
GDMSESSION=gnome
第三种解决办法
在终端类型env
中查看所有环境变量。他们之中有一些是:
XDG_CURRENT_DESKTOP – 告诉你你正在使用的桌面环境
GDMSESSION – 告诉你从lightdm迎接者中选择登录的选项。
要使用它们,请转到终端并输入:
echo $XDG_CURRENT_DESKTOP
(如果您使用的是Unity,请输出’unity’)
要么
echo $GDMSESSION
(如果您在登录中选择了ubuntu,或者如果您在登录中选择了那个,则将输出’ubuntu’,例如’ubuntu-2d’。)
如果您仔细观察env
的输出,如DESKTOP_SESSION和COMPIZ_CONFIG_PROFILE
由于您要查找的是窗口管理器正在使用的名称,因此查看如何获取该窗口的唯一方法是查看流程列表。为此,有一个名为pgrep
(Wikipedia)的命令。我做了以下来获取名称,因为参数-l添加了进程ID:
pgrep -l compiz |cut -d " " -f2
由于该进程由同一用户运行,所以不需要在sudo部分前缀。然后,您可以使用它创建一个基于Window Manager执行操作的脚本。
要查找其他类型,只需将compiz
改为另一个,如mutter
,kwin
等。
第四种办法
我发现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}]
第五种办法
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
第六种办法
我一直在用KDE进行测试,我的结论是:
a)使用HardInfo的图形方式:答案通常在”Operating System”> “Desktop Environment”,但如果不是,您可以查看”Environment variables”。 HardInfo已准备好所有经过测试的发行版,但使用KDE的发行版除外,但它可以轻松快速地安装(Linux Mint 13中只有2个软件包)。
b)命令行,使用以下命令:ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"
。以更多行显示的项目应该是答案(如果有抽奖,”session”的项目应该是解决方案)。