Jac*_*ijm 14 command-line window-manager unity wmctrl
使用wmctrl(默认情况下未安装),我们可以获取有关窗口的信息、它们的 id、它们的几何形状、它们所属的 pid 等。我们还可以使用几个命令移动或调整窗口大小。然而,在某些方面,它的行为似乎不合逻辑。我的问题是关于移动窗口wmctrl以下方式:
获取资讯
当我运行命令时:
wmctrl -lG
Run Code Online (Sandbox Code Playgroud)
我得到(ao)关于下图中窗口的以下信息:
0x04200085 0 746 443 468 205 jacob-System-Product-Name Niet-opgeslagen document 1 - gedit
Run Code Online (Sandbox Code Playgroud)
在第 3-5 列中,几何信息告诉我们 x/y 坐标和宽度/高度。
移动/调整窗口大小
当我将这些坐标放在wmctrl命令中以移动/调整窗口大小时,它应该什么都不做,因为坐标没有改变:
wmctrl -ir 0x04200085 -e 0,746,443,468,205
Run Code Online (Sandbox Code Playgroud)
但是,下面的图片显示窗口向下移动(准确地说是 28px)。我假设原因是wmctrl 窗口移动命令是用工作区域(屏幕减去面板高度)wmctrl -lG计算的,而命令是用总屏幕大小计算的。然后仍然无法解释 4px(面板高 24px)。
虽然偏差可以在脚本中很好地得到补偿,但我不明白原因的事实并不令人满意,所以问题是:
这种偏差的确切原因是什么?
在输出中移动具有精确坐标wmctrl -lG的窗口不应移动窗口,但它会


小智 20
发生的事情是 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
Run Code Online (Sandbox Code Playgroud)
下一个命令提示输入感兴趣的窗口并返回包含所有装饰的父窗口,并根据使用的窗口主题而有所不同。
$ xdotool selectwindow
25166060
$ xdotool getwindowgeometry 0x18000ec
Window 25166060
Position: 700,0 (screen: 0)
Geometry: 904x977
Run Code Online (Sandbox Code Playgroud)
如您所见,这是一个不同的窗口;X 位置开始向左 (702-2) 2px,总宽度大 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
Run Code Online (Sandbox Code Playgroud)
编辑:附加信息。
桌面几何、视口和工作区
$ wmctrl -d # (KDE)
0 * DG: 1680x1050 VP: 0,0 WA: 0,0 1680x1015 Desktop 1
Run Code Online (Sandbox Code Playgroud)
$ xdotool -v
xdotool version 3.20140217.1
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |