发生的情况是,wmctrl返回了装饰内部窗口的几何形状(即,不包括标题栏和边框),但正在使用较大的窗口位置进行移动。
(删除了某些命令输出行:xdotool
可能未安装)
$ wmctrl -lG
0x04000040 0 702 23 900 950 KMatrix dave@KMatrix: test – Konsole
$ xdotool getwindowgeometry 0x04000040
Window 67108928
Position: 702,23 (screen: 0)
Geometry: 900x950
下一条命令提示输入感兴趣的窗口,并返回包含所有装饰的父窗口,并且该父窗口根据使用的窗口主题而有所不同。
$ xdotool selectwindow
25166060
$ xdotool getwindowgeometry 0x18000ec
Window 25166060
Position: 700,0 (screen: 0)
Geometry: 904x977
如您所见,这是一个不同的窗口。X位置从左侧开始2px(702-2),并且总宽度增加了4px(900 + 2 + 2),因为右侧边框也是2px。Y更高(在顶部边框(如果有)和标题栏的上方);由于所有这些加上底部边框,所以高度较大。
wmctrl将父窗口移动到子窗口的所需[X,Y]位置;宽度和高度正确应用于孩子,如下面的“之前和之后”所示。
$ wmctrl -lG
0x04000040 0 702 23 900 950 KMatrix dave@KMatrix: test – Konsole
$ xdotool getwindowgeometry 0x18000ec # (PARENT)
Window 25166060
Position: 700,0 (screen: 0)
Geometry: 904x977
$ xdotool getwindowgeometry 0x04000040 # (CHILD)
Window 67108928
Position: 702,23 (screen: 0)
Geometry: 900x950
$ wmctrl -ir 0x04000040 -e 0,702,23,900,950 # <----- "MOVE/RESIZE" *****
$ wmctrl -lG
0x04000040 0 704 46 900 950 KMatrix dave@KMatrix: test – Konsole
$ xdotool getwindowgeometry 0x18000ec # (PARENT)
Window 25166060
Position: 702,23 (screen: 0) <----- Desired [X,Y] applied to parent
Geometry: 904x977
$ xdotool getwindowgeometry 0x04000040 # (CHILD)
Window 67108928
Position: 704,46 (screen: 0)
Geometry: 900x950 <----- Desired [W,H] applied to child
编辑:其他信息。
桌面几何,视口和工作区
$ wmctrl -d # (KDE)
0 * DG: 1680x1050 VP: 0,0 WA: 0,0 1680x1015 Desktop 1
$ xdotool -v
xdotool version 3.20140217.1
https://github.com/jordansissel/xdotool
回复:@Sneetsher的提示技巧
$ xprop | grep FRAME
_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 2, 2, 23, 4
_NET_FRAME_EXTENTS(CARDINAL) = 2, 2, 23, 4