xdotool
, xwininfo
및 을 시도했지만 xprop
모두 테두리 너비를 포함하지 않는 창의 콘텐츠 크기를 반환하는 것 같습니다. 이 테두리 너비를 찾을 수 있는 명령줄 도구가 있습니까? 이 도구가 다양한 EWMH 호환 창 관리자에서 작동할 수 있기를 바랍니다.
답변1
xwininfo -tree -root
창 관리자에 따라 모든 창 계층을 나열한 다음 대상 창에서 창 관리자가 대상 주위에 배치하는 창 프레임까지 트리를 작업하는 데 사용할 수 있습니다 .
다음 스크립트는 이 작업을 반복적으로 수행합니다. xwininfo -tree
대상 창에서만 실행하여 부모 창을 찾은 다음 부모 창이 루트 창( )이 될 때까지 트리를 단계별로 위로 이동하는 과정을 반복합니다 Parent window id: ...(the root window)
. 루트의 부모 창이 원하는 프레임이라고 가정합니다.
추가하면 -stats
창의 너비와 높이에 쉽게 접근할 수 있습니다. 예를 들어 xterm
724 x 1069 픽셀에서는 742 x 1087 픽셀의 프레임을 얻습니다.
$ xwininfo -tree -stats -id $WINDOWID
Parent window id: 0x8002ff (has no name)
...
Width: 724
Height: 1069
$ xwininfo -tree -stats -id 0x8002ff
Parent window id: 0x8002fe (has no name)
...
Width: 724
Height: 1069
$ xwininfo -tree -stats -id 0x8002fe
Parent window id: 0xc1 (the root window) (has no name)
...
Width: 742
Height: 1087
다음은 창 ID 번호를 매개변수로 사용하는 스크립트입니다.
#!/bin/bash
# http://unix.stackexchange.com/a/331516/119298
getwh(){
xwininfo -tree -stats -id "$id" |
awk '/Parent window id:/{ parent = ($0~/the root window/)?0:$4; }
/ Width:/ { w = $2 }
/ Height:/ { h = $2 }
END { printf "%s %d %d\n",parent,w,h }'
}
id=${1:-${WINDOWID?}}
set -- $(getwh "$id")
w=$2 h=$3
while id=$1
[ "$id" != 0 ]
do set -- $(getwh "$id")
done
let bw=$2-w bh=$3-h
echo "total border w and h $bw $bh"
인쇄되며 total border w and h 18 18
테두리 너비가 대칭이 되도록 하려면 이를 2로 나누어야 합니다. 그렇지 않은 경우, 예를 들어 제목 표시줄이 큰 경우 x 및 y 오프셋의 차이를 사용하여 위쪽, 아래쪽, 왼쪽 및 오른쪽 테두리를 계산해야 합니다.
답변2
해결 방법은 xwd를 사용하여 내용을 덤프한 다음 결과 이미지를 측정하는 것입니다.
xwd -frame | xwdtopnm | head -2
xwdtppnm
netpbm 패키지에서