当前位置: 首页>>技术教程>>正文


如何确定哪个窗口管理器正在运行

, ,

问题描述

有没有什么方法(如命令或环境变量)来确定当前会话中正在运行的窗口管理器是什么?

最佳解决办法

如果您安装了wmctrl,则命令的第一行输出

    wmctrl -m

会显示窗口管理器的名称。如果您没有安装wmctrl,请使用以下命令进行安装:

    sudo apt-get install wmctrl

请注意,man wmctrl(即wmctrlman页面)部分地说:

-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: CompizDESKTOP_SESSIONXDG_CURRENT_DESKTOP值分别为ubuntuUnity

次佳解决办法

在Linux系统上,我测试了环境变量XDG_CURRENT_DESKTOPGDMSESSION并获得了以下结果。

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改为另一个,如mutterkwin等。

第四种办法

我发现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”的项目应该是解决方案)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/353.html,未经允许,请勿转载。