Ответы:
wmctrl -lG
Даст вам что-то вроде:
oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330 170 bert N/A
0x01200023 -1 0 0 3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24 bert Bottom Expanded Edge Panel
0x01000028 -1 0 2352 1920 24 bert Bottom Expanded Edge Panel
0x0500003e 0 676 252 1404 1015 bert Chromium
0x02e00021 0 3860 160 1361 1084 bert Liferea
0x02000047 0 6650 940 506 683 bert Social broadcast messages
0x04600004 0 4546 460 1263 833 bert oli@bert: ~
С этим вы можете grep
и cut
вниз на них, так что вы останетесь со значениями геометрии (столбцы 3-6).
Чтобы процитировать man-страницу, вы точно понимаете, что это за столбцы:
-l
Список окон, управляемых менеджером окон. Для каждого окна выводится одна строка, причем строка разбивается на колонки, разделенные пробелами. Первый столбец всегда содержит идентификатор окна в виде шестнадцатеричного целого числа, а второй столбец всегда содержит номер рабочего стола (-1 используется для обозначения прикрепленного окна). Если указана опция -p, следующий столбец будет содержать PID для окна в виде десятичного целого числа. Если указана опция -G, то будут следовать четыре целочисленных столбца: x-offset, y-offset, width и height. Следующий столбец всегда содержит имя клиентского компьютера. Остальная часть строки содержит заголовок окна (возможно, с несколькими пробелами в заголовке).
Я полагаю, что wmctrl не имеет возможности напрямую найти идентификатор активного окна.
Если кто-то знает, как это сделать, мне интересно знать ...
Тем не менее, вот пара сценариев, которые распечатывают размер активного окна.
Это: wmctrl + xdotool ... (без использования sed).
id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done
Это: xwininfo + xdotool + sed
xwininfo
это часть x11-utils
set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
-e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"
Используйте xprop
или xwininfo
. Оба приходят по умолчанию, установка не требуется
Обе команды превращают курсор в квадрат / крест, чтобы позволить выбрать конкретное окно.
$ xprop _NET_WM_OPAQUE_REGION
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
В качестве альтернативы можно указать окно в командной строке в форме XID
$ xprop _NET_WM_OPAQUE_REGION -id 83886090
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
В частности xwininfo
, я активно использовал его для скриптов, например, в следующих вопросах AskUbuntu:
Сценарии оболочки не знают или не заботятся об окнах. В лучшем случае они запускаются в терминале (который может отображаться или не отображаться в окне). Если вы хотите получить ширину и высоту терминала в символах, используйте утилиту stty.
Я нашел tput cols
работать довольно хорошо!
wmctrl
, мы говорим не о консоли, а о графических окнах среды.