Получить размер окна в оболочке

Я хотел бы получить размер текущего окна из сценария оболочки ...

На самом деле сказать особо нечего ... Я бы предпочел использовать wmctrl.

18
задан 18 May 2015 в 05:23

6 ответов

Я полагаю, что у 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"
0
ответ дан 18 May 2015 в 05:23
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, смещение по оси y, ширина и высота. Следующий столбец всегда содержит имя клиентского компьютера. Остальная часть строки содержит заголовок окна (возможно, с несколькими пробелами в заголовке).

0
ответ дан 18 May 2015 в 05:23

Используйте 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, активно использовался мной для scrips, например, на эти вопросы AskUbuntu:

0
ответ дан 18 May 2015 в 05:23

Сценарии оболочки не знают о окнах и не заботятся о них. В лучшем случае они запускаются в терминале (который может отображаться или не отображаться в окне). Если вы хотите получить ширину и высоту терминала в символах, используйте утилиту stty.

0
ответ дан 18 May 2015 в 05:23

Я нашел tput cols, чтобы работать довольно хорошо!

0
ответ дан 18 May 2015 в 05:23

Получено 3 экрана, это выводит 3 строки с размерами:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
0
ответ дан 9 December 2019 в 04:58

Другие вопросы по тегам:

Похожие вопросы: