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

Ano*_*ous 226 xorg window-manager

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

Jam*_*at7 169

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

wmctrl -m
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get install wmctrl
Run Code Online (Sandbox Code Playgroud)

请注意,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
whileecho $DESKTOP_SESSION显示ubuntu-2decho $XDG_CURRENT_DESKTOP显示Unity

Ubuntu desktop旧笔记本电脑上新安装的 Ubuntu 15.10软件上,输出的第一行wmctrl -m是:Name: Compiz
DESKTOP_SESSIONXDG_CURRENT_DESKTOP值是ubuntuUnity

  • 不幸的是,即使启用了 X11,这也无法通过 ssh 工作。 (4认同)
  • @Sridhar-Sarnobat 在 ubuntu 15.04 上,运行 `ssh -Y {host} 'wmctrl -m'` 确实返回一些值(例如,“Name:Compiz”和几个 N/A),但 `ssh` 是有意义的有关窗口管理器的信息有限。 (2认同)

Tom*_*Tom 128

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

您可以使用此行获取输出:

printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
Run Code Online (Sandbox Code Playgroud)

Ubuntu 18.04 和 20.04(GNOME 上的 Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04(Wayland 上的 Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu-wayland

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 在没有 Mir 的情况下运行

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04

凯德

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

统一 3D

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

统一 2D

  • 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

其他基于 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

卢本图 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 伴侣 18.04

  • XDG_CURRENT_DESKTOP=MATE
  • GDMSESSION=mate

徐本图 18.04

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xubuntu

Kali Linux kali-rolling 2020.2

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=lightdm-xsession

  • 而且它不回答我使用的 _window manager_ ! (6认同)
  • 薄荷 13(肉桂色):XDG_CURRENT_DESKTOP=GNOME,GDMSESSION=肉桂色 (4认同)
  • $DESKTOP_SESSION 怎么样?作为备份解决方案:) (2认同)

Lui*_*ado 42

在终端类型env中查看所有环境变量。他们之中有一些是:

XDG_CURRENT_DESKTOP - 告诉您正在使用的桌面环境

GDMSESSION - 告诉您从 lightdm 迎宾器中选择的登录选项。

要使用它们,请转到终端并键入:

echo $XDG_CURRENT_DESKTOP
Run Code Online (Sandbox Code Playgroud)

(如果您使用 Unity,将输出例如“unity”)

或者

echo $GDMSESSION  
Run Code Online (Sandbox Code Playgroud)

(例如,如果您在登录中选择了 ubuntu,则会输出“ubuntu”,如果您在登录中选择了“ubuntu-2d”,则会输出。)

如果您仔细查看envDESKTOP_SESSIONCOMPIZ_CONFIG_PROFILE的输出,您还有其他人

由于您要查找的是正在使用的窗口管理器的名称,因此我了解如何获得它的唯一方法是查看进程列表。为此,有一个名为pgrep( Wikipedia )的命令。由于参数 -l 添加了进程 ID,因此我执行了以下操作来获取名称:

pgrep -l compiz |cut -d " " -f2由于该进程由同一用户运行,因此无需为 sudo 部分添加前缀。然后,您可以使用它来创建一个基于窗口管理器执行操作的脚本。

为了寻找其他类型的,只是换个词compiz到另一个像mutterkwin等等。

  • 那些只是告诉我会话名称和桌面环境。例如它说“GNOME”,这是一个可以使用 Metacity、Mutter、Compiz 或其他窗口管理器的桌面环境。它说“gnome-classic”是一个会话名称,没有具有该名称的窗口管理器。 (3认同)

Sri*_*bat 28

我发现pstree这是一个很大的帮助。

安装

sudo apt-get install pstree
Run Code Online (Sandbox Code Playgroud)

输出

这就是我得到的。

 ??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}]
Run Code Online (Sandbox Code Playgroud)

  • 这让我有了我的自定义 buildroot 系统。 (2认同)
  • 对于我使用的 Ubuntu 22.04,“pstree”是预安装的。 (2认同)

小智 15

xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下这是如何工作的吗?另外,我认为你最后漏掉了一个`)`。 (3认同)

小智 7

我也用 KDE 进行了测试,我的结论是:

a) 图形方式,使用 HardInfo:答案通常在“操作系统”>“桌面环境”中,但如果没有,您可以查看“环境变量”。HardInfo 已准备好与所有经过测试的发行版(除了带有 KDE 的发行版)一起使用,但它可以轻松快速地安装(Linux Mint 13 中只有 2 个软件包)。

b) 命令行,使用以下命令:ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm" -wo | sort -u。出现在更多行中的项目应该是答案(如果有平局,则带有“会话”的项目应该是解决方案)。它通过 SSH 工作。


4xy*_*4xy 6

只要两分钱。

$ sudo apt install neofetch
$ neofetch
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Alb*_*lla 5

#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e.wordpress.com)


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
Run Code Online (Sandbox Code Playgroud)

或者在一行中:

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