如何从程序中找到正在运行的 X 窗口窗口管理器的名称?
如果我在另一个窗口管理器已经运行时启动另一个窗口管理器,则会发生错误,因此必须有一种方法让另一个窗口管理器检测到第一个窗口管理器。
它是如何工作的?
如何从程序中找到正在运行的 X 窗口窗口管理器的名称?
如果我在另一个窗口管理器已经运行时启动另一个窗口管理器,则会发生错误,因此必须有一种方法让另一个窗口管理器检测到第一个窗口管理器。
它是如何工作的?
根据EWMH 规范,兼容的窗口管理器会将_NET_SUPPORTING_WM_CHECK
根窗口上的属性设置为窗口 ID。
如果该_NET_SUPPORTING_WM_CHECK
属性存在并且包含现有窗口的 ID,则符合 ICCCM2.0 的窗口管理器正在运行。如果该属性存在但不包含现有窗口的 ID,则符合 ICCCM2.0 的窗口管理器在没有适当清理的情况下退出。如果该属性不存在,则没有符合 ICCCM2.0 的窗口管理器正在运行。
该窗口(不是根窗口,而是由根窗口上的属性描述的窗口)应该有一个_NET_WM_NAME
属性,这就是您要寻找的。
wmctrl命令可以显示有关许多与 EWMH/NetWM 兼容的 X 窗口管理器的信息,包括它们的名称:
$ wmctrl -m
Name: Compiz
...
Accroding to its Wikipedia page,它目前可与以下窗口管理器一起使用(2012 年 8 月):
您可能会找到一个包含信息的“原子”,但我认为不能 100% 保证所有窗口管理器都使用相同的原子。执行“xlsatoms”以列出服务器上的原子,或执行“xprop”(并单击)以查看特定窗口的属性(包括原子及其值)。