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