3

我需要找到一种方法来获取适合传递给某些 X 窗口命令-geometry选项的几何图形,以便保证覆盖所有不与 GNOME 本身管理的任何东西重叠的 X 根窗口(例如,GNOME 面板窗口)。这与xwininfo -root将返回整个 X 根窗口的几何图形的输出不同,并且必然包括 GNOME 面板消耗的不动产。因为我不再使用 KDE,所以我不需要对 KDE 也一样。

我希望能够使用 X windows 命令行实用程序获得该几何图形,而不必求助于 Xlib 编程(即,我想从脚本中这样做)。这些脚本可以依赖于 GNOME 命令行实用程序。

使用基本数学“减去” GNOME 面板是一种选择,但前提是我可以保证我只需要考虑唯一的 GNOME 面板 X 窗口。但我怀疑 GNOME 面板窗口并不是唯一需要考虑的窗口。我这么说是因为底部有一个窗口xwininfo显示为“底部扩展边缘面板”,它可能会或可能不会在房地产方面发生冲突,因为仅当鼠标移动到 X 根的最底部时才会显示窗户。但如果 GNOME 面板真的是唯一需要考虑的面板,那么这种“减法”方法可能就足够了。

我的用例是这样的:我正在使用rdesktop将 RDP 导入各种 Microsoft Windows 桌面。用户需要在执行之前决定 rdesktopX 窗口的尺寸,因为它在显示后无法调整大小。我需要该窗口来消耗最大数量的根窗口不动产,只要它不与 GNOME 管理的窗口(如 GNOME 面板)冲突。我现在正在做的是在调用 的包装器脚本中硬编码特定桌面的几何图形rdesktop,但这无法达到我想要的效果,因为我在各种桌面上工作,这些桌面必然会在显示硬件上有所不同,从而导致 X 根窗口中的变化几何学。将 X 根窗口的几何图形馈送到rdesktop命令导致 RDP 窗口超出 GNOME 桌面上的可见区域,因为 GNOME 的窗口管理器将实际的左上角向下推以避免与 GNOME 面板重叠,结果是 RDP 窗口的一部分被鼠标操作隐藏.

我尝试使用xwininfo -root -children来查看是否可以在 X 根的直接后代中找到一些 X 窗口,该窗口始终是我可以用来提取这些维度的窗口,但名称看​​起来像是 GNOME 桌面软件的实现细节(或 metacity WM),或两者兼而有之,可能不是我想要依赖的东西。

4

1 回答 1

3

窗口管理器在根窗口上放置了几个属性。其中一个属性是针对每个工作区的“工作区”,即未被面板和事物遮挡的区域。

我机器上“xprop -root”的部分输出包含以下内容:

_NET_CURRENT_DESKTOP(红衣主教) = 0

_NET_WORKAREA(基数) = 0, 32, 1440, 838, 0, 32, 1440, 838, 0, 32, 1440, 838, 0, 32, 1440, 838

_NET_CURRENT_DESKTOP 属性为您提供当前工作区的编号。

_NET_WORKAREA 以四个一组的形式为您提供每个工作区的工作区(x、y、宽度、高度)。

这记录在扩展窗口管理器提示规范中 - http://standards.freedesktop.org/wm-spec/latest/ar01s03.html#id2568237

您可能需要减去窗口框架和标题栏的区域,但这应该可以让您关闭。如果您想通过一些额外的编码使其准确无误,请阅读 _NET_WM_REQUEST_FRAME_EXTENTS: http ://standards.freedesktop.org/wm-spec/latest/ar01s04.html#id2568770

于 2011-11-16T20:16:59.363 回答