Bash에서 제목 표시줄 높이를 얻는 방법

Bash에서 제목 표시줄 높이를 얻는 방법

저는 다양한 Linux Mint PC의 제목 표시줄 높이를 이해하는 것과 관련된 애완동물 프로젝트를 진행하고 있는데, 크기가 창 제목 글꼴과 아마도 일부 CSS에 따라 달라지므로 PC마다 다를 수 있다는 것을 깨달았습니다. 나는 답을 찾고 있었지만 그것을 정확히 찾아낼 수 없는 것 같습니다. 찾기 쉬울 것이라고 확신하지만 어디입니까!

현재 Mint 21.3을 실행 중이고 xdotool이 설치되어 있습니다. 저는 Bash 스크립팅을 처음 접했고 몇 가지 문제가 있어서 나에게는 쉬운 일이 없었지만 약간의 조사와 약 8시간의 시행착오 끝에 이것을 알아냈습니다...


sleep .05
id=$(xdotool getactivewindow)
xdotool windowmove $id 0 0
sleep .05
y=$(xprop -root '_NET_WORKAREA')
y=$(($(xwininfo -id $id|grep -oP "(?<=Absolute upper-left Y:).*") - $(echo ${y#=}|cut -d, -f2)))

read -n1 -p "Title Bar = $y"

이것은 작동합니다 sleep .05. xdotool, xprop 및 wininfo가 너무 빨리 실행되어 창 이동이 실패하거나 "0"이 발생하지 않도록 하기 위해 이 두 가지도 추가해야 했습니다. 이는 추가하기 전에 가끔 발생했습니다. 그들을. 아마도 더 쉬운 방법이 있을 것입니다. 알려주세요 echo $TITLEBAR!

id=$(xdotool getactivewindow)이 시점에서 여전히 활성 창인 이전 창의 ID를 제공하기 때문에 스크립트가 시작될 때 잠을 자야 하며 내 터미널이 활성 창이 될 때까지 기다려야 하며 내 스크립트는 잠을 자지 않고 100% 실패합니다. . Bash는 나에게 매우 새로운 것이므로 어떤 팁과 요령이라도 환영합니다. 변수에 따옴표를 추가하겠습니다. ${y#=}변수 "y"에서 "=" 앞의 모든 항목을 제거 해야 합니다 . 아마도 "=" 뒤의 값을 가져오는 더 좋은 방법이 많이 있을 것입니다. 그러나 이것이 제가 아는 유일한 방법입니다. 내 스크립트의 가독성에 관해서는 모든 것을 압축하는 경향이 있습니다. (죄송합니다!) 결과를 표시하기 위해 마지막으로 읽은 것은 결과를 보기 위해 몇 주 전에 스크립트를 일시 중지한 것과 같습니다. 초보자에게 "Hello World"가 작동하도록 하세요. 작동하지만 창이 실행되고 검은색 깜박임으로 닫힙니다. 무엇이 문제인지 모르겠습니다.

제안하신 대로 변경했으며 이번이 두 번째 시도입니다.

#!/bin/bash

id=$(xdotool getactivewindow)
echo "Id = "$id" Wrong One!!"

sleep .08 # .05 was not quite enough, it occasionally failed.
id=$(xdotool getactivewindow)
echo -e "Id = "$id"\n"

xdotool windowmove $id 0 0

sleep .05 # Prevent xprop from giving pre-move results.
workarea=$(xprop -root "_NET_WORKAREA")

# Strip everything before the values.
workarea=${workarea#*=}

top_panel=$(echo "$workarea" | cut -d, -f2)
echo "Top Panel = "$top_panel

# Get height of top panel + header bar
y=$(xwininfo -id "$id" | grep -oP "(?<=Absolute upper-left Y:).*")
echo -e "Top panel + Header Bar ="$y"\n"

headerbar=$(( y - top_panel ))
echo "Title Bar = "$headerbar"px"

read -n1 -p "Any key to exit"

결과:
ID = 46137366 오류! !
Id = 83886086
상단 패널 = 32
상단 패널 + 제목 표시줄 = 82
제목 표시줄 = 50px

종료하려면 아무 키나 사용하세요

작은 숫자를 찾으려면 많은 장비가 필요한 것 같습니다! "쉬운" 방법은 무엇입니까?

이것은 내 원래 스크립트의 업데이트된 버전입니다.

#!/bin/bash

sleep .08 # Allow time for the active window to become this window.
id=$(xdotool getactivewindow)

# Move the window to the top of the screen so that xprop gives
# the exact size of the window header bar including top panel.
xdotool windowmove "$id" "0" "0"

sleep .05 # Allow time for xdotool to move this window.
xprop=$(xprop -root "_NET_WORKAREA")

# Cut out the desired value and trim the space before the value.
top_panel=$(echo "$xprop" | cut -d, -f2 | xargs)

# Get the size between the top of screen and the start of this window.
xwininfo=$(xwininfo -id "$id" | grep -oP "(?<=Absolute upper-left Y:).*")
headerbar=$(( xwininfo - top_panel ))

echo -e "Top panel  = $top_panel""px""\nHeader Bar = $headerbar""px""\n"

# Remove the variables from memory.
unset id xprop top_panel xwininfo headerbar
read -n1 -p "Any key to exit."

이제 스크립트 내용에 가까워졌을 것입니다! 그래도 나는 난독증이 있어서 줄을 읽기가 어렵기 때문에 아래와 같이 스크립트에 따옴표가 없고 공백이 없는 변수를 사용합니다 echo -e "Top panel = $top_panel""px""\nHeader Bar = $headerbar""px""\n".

bash 스크립트에서 잘못 사용되었지만 난독증이 있는 사람들에게 도움이 되는 인용문

관련 정보