4

如何从程序中找到正在运行的 X 窗口窗口管理器的名称?

如果我在另一个窗口管理器已经运行时启动另一个窗口管理器,则会发生错误,因此必须有一种方法让另一个窗口管理器检测到第一个窗口管理器。

它是如何工作的?

4

3 回答 3

9

根据EWMH 规范,兼容的窗口管理器会将_NET_SUPPORTING_WM_CHECK根窗口上的属性设置为窗口 ID。

如果该_NET_SUPPORTING_WM_CHECK属性存在并且包含现有窗口的 ID,则符合 ICCCM2.0 的窗口管理器正在运行。如果该属性存在但不包含现有窗口的 ID,则符合 ICCCM2.0 的窗口管理器在没有适当清理的情况下退出。如果该属性不存在,则没有符合 ICCCM2.0 的窗口管理器正在运行。

窗口(不是根窗口,而是由根窗口上的属性描述的窗口)应该有一个_NET_WM_NAME属性,这就是您要寻找的。

于 2009-07-12T04:10:18.993 回答
3

wmctrl命令可以显示有关许多与 EWMH/NetWM 兼容的 X 窗口管理器的信息,包括它们的名称

$ wmctrl -m
Name: Compiz
...

Accroding to its Wikipedia page,它目前可与以下窗口管理器一起使用(2012 年 8 月):

  • 黑盒 >= 0.70
  • 冰雪
  • kwin(KDE 的默认 WM)
  • metacity(GNOME 的默认 WM)
  • openbox >= 3(Lubuntu 的默认 WM)
  • 锯鱼
  • fvwm >= 2.5
  • 威美亚
  • pekwm
  • 启蒙 >= 0.16.6
  • xfce >= 4
  • 通量盒 >= 0.9.6
  • 火柴盒
  • 窗户制造商 >= 0.91
  • 编译
  • 惊人的
  • wmfs
于 2012-08-03T05:41:55.027 回答
1

您可能会找到一个包含信息的“原子”,但我认为不能 100% 保证所有窗口管理器都使用相同的原子。执行“xlsatoms”以列出服务器上的原子,或执行“xprop”(并单击)以查看特定窗口的属性(包括原子及其值)。

于 2009-04-17T01:38:21.083 回答