root - 如何找到排除任何 GNOME 面板或其他 GNOME "things"的根窗口的 X 几何图形?

标签 root gnome x11 metacity

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

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

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

我的用例是这样的:我正在使用 rdesktop将 RDP 转化为各种 Microsoft Windows 桌面。用户需要决定,然后再执行 rdesktop,X 窗口的尺寸,因为它不可调整大小 显示后。我需要那个窗口消耗最大 根窗口房地产的数量,前提是它不与 GNOME 管理的窗口,例如 GNOME 面板。我现在在做什么 在我的包装器中对特定桌面的几何图形进行硬编码 调用 rdesktop 的脚本,但无法执行我想要的操作,因为 我在不同的桌面上工作,这些桌面的显示效果必然不同 硬件,导致 X 根窗口几何形状发生变化。 将 X 根窗口的几何形状提供给 rdesktop 命令结果 在超出 GNOME 可见区域的 RDP 窗口中 桌面,因为 GNOME 的窗口管理器插入了实际的左上角 角向下以避免与 GNOME 面板重叠,结果 RDP 窗口的一部分对鼠标操作是隐藏的。

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

最佳答案

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

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

_NET_CURRENT_DESKTOP(CARDINAL) = 0

_NET_WORKAREA(CARDINAL) = 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

关于root - 如何找到排除任何 GNOME 面板或其他 GNOME "things"的根窗口的 X 几何图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113764/

相关文章:

android - 从 Android 应用程序中的 native 库访问根文件(/system、/dev)

linux - 在linux下写一个简单的小程序

linux - Debian wheezy - 安装过程中丢失了 gnome

python - PyGObject - 状态图标上的左键单击菜单

header-files - xCode 没有看到 X11 头文件

c++ - 当对象在屏幕空间中较小时,OpenGL 更新缓慢

linux - 除非在 debian 中以 root 身份运行,否则无法运行 vnstat

Android 在 Java 中设置(获取)环境变量

java - Android 打开 Activity 并关闭上一个 Activity

c++ - 多屏系统C中的鼠标光标位置