有没有办法(比如命令或环境变量)可以确定当前会话中正在运行的窗口管理器是哪一个?
wmctrl
,则可以通过命令的第一行输出来判断。wmctrl -m
wmctrl
,请使用以下命令进行安装:sudo apt-get install wmctrl
man wmctrl
(即wmctrl
的man
页)部分内容如下:
在我的Ubuntu 11.10 / Linux 3.0.0-14-generic #23-Ubuntu x86_64 / metacity 2.34.1系统上,
-m
显示有关窗口管理器的信息...
wmctrl -m
的输出的第一行是:Name: Metacity
echo $DESKTOP_SESSION
显示ubuntu-2d
,echo $XDG_CURRENT_DESKTOP
显示Unity
。Ubuntu桌面
软件后,wmctrl -m
的输出的第一行为:Name: Compiz
DESKTOP_SESSION
和XDG_CURRENT_DESKTOP
的值分别为ubuntu
和Unity
。XDG_CURRENT_DESKTOP
和 GDMSESSION
并得到了以下结果。
You can use this line to get the output:
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu-wayland
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
注意 MIR_SERVER_NAME
也被设置了
MIR_SERVER_NAME=session-$NUMBER
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xfce
XDG_CURRENT_DESKTOP=
GDMSESSION=kde-plasma
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu-2d
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-shell
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-classic
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-fallback
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=KDE
GDMSESSION=default
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=default
XDG_CURRENT_DESKTOP=LXDE
GDMSESSION=Lubuntu
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome
XDG_CURRENT_DESKTOP=MATE
GDMSESSION=mate
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xubuntu
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=lightdm-xsession
$DESKTOP_SESSION
返回的是窗口管理器 - 这是正确的答案。- 更多细节请参见 - https://askubuntu.com/a/125072/970554 - 而$XDG_CURRENT_DESKTOP
返回的是桌面环境。 - Manuel JordanGDMSESSION
返回的是窗口管理器 - 当然我们对 $XDG_CURRENT_DESKTOP
返回的是桌面环境也是正确的。 - Manuel Jordanenv
以查看所有环境变量。其中一些是:
XDG_CURRENT_DESKTOP - 告诉你正在使用的桌面环境
GDMSESSION - 告诉你从lightdm greeter选择的登录选项。echo $XDG_CURRENT_DESKTOP
echo $GDMSESSION
pgrep -l compiz |cut -d " " -f2
,由于该进程是以相同的用户身份运行的,所以不需要加上sudo前缀。然后,您可以使用这个命令创建一个脚本,根据窗口管理器执行相应的操作。$XDG_CURRENT_DESKTOP
是当前的桌面环境,而不是窗口管理器。 - Ken SharpGDMSESSION
返回的是窗口管理器,而且当然$XDG_CURRENT_DESKTOP
返回的是桌面环境。 - Manuel Jordanpstree
非常有帮助。
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}]
pstree
是预装的。 - Chris Hayesxprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
)
在结尾处。 - Louis Matthijssenxprop -root -notype
显示了根窗口的所有属性(并省略了类型以便于解析),输出通过管道发送到 awk
;2. awk
命令 $1=="_NET[blah]CK:"{print $5}'
将输入管道中每行的第一列与给定字符串进行比较,如果找到匹配项,则运行括号中的代码,该代码打印此行的第五列 - 恰好是 "_NET_SUPPORTING_WM_CHECK" 原子的 ID(我敢打赌这完全是偶然);3. 然后再次使用此 ID 通过 xprop -id
获取窗口管理器的属性。 - cprn#! /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
我还使用KDE进行了测试,我的结论是:
a)图形方式,使用HardInfo:通常答案在“操作系统”>“桌面环境”,如果没有的话可以查看“环境变量”。HardInfo已准备好所有经过测试的发行版,除了带有KDE的那个,但它可以轻松快速地安装(在Linux Mint 13中只需2个软件包)。
b)命令行方式,使用以下命令:ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm" -wo | sort -u
。出现次数最多的项目应该是答案(如果存在平局,则以带有“session”的项目为解决方案)。而且它可以通过SSH工作。
gnome-...
进程(以及一个带有kdevtmpfs
的kde命中)。 - Xen2050lsb_release -a
ls /usr/bin/*session
gnome-shell --version
ls /usr/bin/*session
显示了已安装的内容。 - AlexOnLinux
ssh -Y {host} 'wmctrl -m'
命令会返回一些值(例如,“Name: Compiz”和几个N/A),但是ssh
对于窗口管理器的信息有限是可以理解的。 - michaelwmctrl -d
(列出由窗口管理器管理的所有桌面)和wmctrl -l
(列出由窗口管理器管理的窗口)是否正常工作? - James Waldby - jwpat7$DESKTOP_SESSION
实际上是返回窗口管理器,这才是正确的答案。- 更多细节请参见 - https://askubuntu.com/a/125072/970554 - 而$XDG_CURRENT_DESKTOP
则是返回桌面环境。 - Manuel Jordan