何が起こっているのかというと、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)で始まり、右の境界も2pxであるため、合計幅は4px(900 + 2 + 2)大きくなります。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
Re:コメントの@Sneetsherヒント
$ xprop | grep FRAME
_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 2, 2, 23, 4
_NET_FRAME_EXTENTS(CARDINAL) = 2, 2, 23, 4