You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

X11下XGetWindowAttributes获取窗口位置偏移问题求解

问题描述

我在Ubuntu 20.04系统搭配Gnome桌面环境下,调用XGetWindowAttributes()接口获取窗口位置时,返回结果存在偏移,仿佛窗口外层带有较厚的不可见边距,且不同窗口的偏移量并不统一。

我已经检查过窗口属性的border_width字段,其值始终为0;也尝试调用XTranslateWindowCoordinates()接口做坐标转换修正,但返回的位置结果没有任何改善。

补充相关前提:我通过XGetInputFocus()获取目标窗口,参考公开实现逻辑获取焦点窗口的父窗口。已知Gnome会为窗口绘制投影效果,但该效果对所有窗口的边距影响应当是一致的,无法解释不同窗口偏移量不同的现象。我需要找到获取这类不可见边距尺寸、或是窗口真实屏幕位置的可行方案。


补充调试信息

针对datenwolf的评论建议,我补充窗口树遍历的调试输出:通过XGetInputFocus拿到焦点窗口后,使用XQueryTree遍历窗口树,直到找到父窗口为根窗口的顶层窗口(即下方各列表的最后一项),遍历过程中逐层打印各窗口的坐标、尺寸及窗口名称(若存在),n为窗口树向下遍历的循环索引。

emacs窗口(视觉边框窄,位置偏移量小)

遍历输出如下:

n=1 x=-1 y=-1 w=1 h=1
n=2 x=10 y=45 w=752 h=714 name = emacs@laptopC3
n=3 x=3064 y=104 w=772 h=769

其中n=3对应的窗口位置符合我的双显示器布局坐标,但n=2对应的窗口尺寸更小、坐标完全错误,我无法确认n=1对应的1x1尺寸窗口是什么。

系统终端窗口(视觉边框宽,位置偏移量大)

遍历输出如下:

n=1 x=-1 y=-1 w=1 h=1
n=2 x=2889 y=390 w=786 h=533 name = Terminal

除了n=1对应的异常1x1窗口外,没有其他特殊表现。

Tcl/Tk编写的应用窗口(视觉边框极窄,偏移量极小)

遍历输出如下:

n=1 x=1 y=38 w=1026 h=770 name = PNGShow-6-6
n=2 x=3192 y=234 w=1028 h=809

该场景下不存在前两个案例里n=1对应的1x1异常窗口,目前我没有总结出一致的偏移规律,求可行的排查解决思路。


内容的提问来源于stack exchange,提问作者Ralf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:48:53