Linux: Получить высоту границы окна

Я пытаюсь получить в скрипте bash максимальный размер окна (то есть размер экрана минус панели по краям экрана). Я использую Kubuntu, но если бы он мог работать для любой системы Linux, это было бы здорово.

В настоящее время мое решение состоит в том, чтобы максимизировать активное окно с помощью wmctrl:

wmctrl -r :ACTIVE: -b add,maximized_horz,maximized_vert

а затем получить размер окна благодаря xwininfo:

xwininfo -id $(xdotool getactivewindow)

К сожалению, я не получаю размер окна, но размер окна и его границы (если я удаляю границу, я получаю ожидаемое значение).

Итак, мои вопросы:

1 - Есть ли команда для удаления границы окна? (Я знаю только как это сделать вручную)

2 - Есть ли лучший способ сделать это? (если это можно сделать без увеличения окна, это может быть здорово)

Заранее спасибо за помощь

2 ответа

Решение

Я понял, что то, что я назвал границей, на самом деле было строкой заголовка... Если я использую xwininfo -stats Я действительно получаю ширину границы (0 в моем случае). Высота строки заголовка (после максимизации окна) получается в поле Абсолютный верхний левый. Следующее дает мне ожидаемую высоту:

eval $(xwininfo -id $(xdotool getactivewindow) | sed -n -e "s/^  Height: \+\([0-9]\+\).*/Height=\1/p" -e "s/^  Absolute upper-left Y:  \+\([0-9]\+\).*/HeightTitleBar=\1/p")
Height=$(($Height+$HeightTitleBar))

Спасибо за вашу помощь!

Это получит ваш рост, ширину и ширину границы:

{ read __ WIDTH; read __ HEIGHT; read __ __ BORDER_WIDTH; } < <(xwininfo -id "$(xdotool getactivewindow)" | grep -o -e 'Height:.*' -e 'Width:.*' -e 'Border width:.*')
echo "Height: $HEIGHT, Width: $WIDTH, Border width: $BORDER_WIDTH"

Теперь у вас есть $HEIGHT, $WIDTH и $BORDER_WIDTH. Вы можете просто пересчитать их с помощью арифметических выражений: http://tldp.org/LDP/abs/html/arithexp.html

Я проверял только KDE/Plasma, но когда вы расширяете окно, вы можете получить размеры украшения из одной из этих двух записей (значения взяты с моего рабочего стола):

_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 0, 0, 41, 4

_NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 41, 4
Другие вопросы по тегам