受け入れられた答えを拡張して、ウィンドウ全体を取得できます。
entire=false
x=0
y=0
w=0
h=0
b=0 # b for border
t=0 # t for title (or top)
# ... find out what user wants then
eval $(xwininfo -id $(xdotool getactivewindow) |
sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
-e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \
-e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
-e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" \
-e "s/^ \+Relative upper-left X: \+\([0-9]\+\).*/b=\1/p" \
-e "s/^ \+Relative upper-left Y: \+\([0-9]\+\).*/t=\1/p" )
if [ "$entire" = true ]
then # if user wanted entire window, adjust x,y,w and h
let x=$x-$b
let y=$y-$t
let w=$w+2*$b
let h=$h+$t+$b
fi
echo "$w"x"$h" $x,$y
簡単ですが、相対情報がすべて0であるため、Ubuntu 14.04のUnityで動作しないことが判明しました。Unityでウィンドウの全サイズ(装飾を含む)を取得するように依頼し、良い答えを得ました。私はその答えをどのように使用したのですか?
aw=$(xdotool getactivewindow)
eval $(xwininfo -id "$aw" |
sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
-e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \
-e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
-e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" )
if [ "$entire" = true ]
then
extents=$(xprop _NET_FRAME_EXTENTS -id "$aw" | grep "NET_FRAME_EXTENTS" | cut -d '=' -f 2 | tr -d ' ')
bl=$(echo $extents | cut -d ',' -f 1) # width of left border
br=$(echo $extents | cut -d ',' -f 2) # width of right border
t=$(echo $extents | cut -d ',' -f 3) # height of title bar
bb=$(echo $extents | cut -d ',' -f 4) # height of bottom border
let x=$x-$bl
let y=$y-$t
let w=$w+$bl+$br
let h=$h+$t+$bb
fi
この2番目の方法はUnityとXfceの両方で機能し、Gnomeでも機能するはずです。