Отримати розмір вікна в оболонці


18

Я хотів би отримати розмір поточного вікна зі сценарію оболонки ...

Дійсно, не багато чого сказати ... Я вважаю за краще використовувати wmctrl.

Відповіді:


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).

Щоб процитувати довідкову сторінку, щоб ви зрозуміли, що саме таке стовпці:

Перелічіть вікна, якими керує менеджер вікон. Один рядок виводиться для кожного вікна, при цьому рядок розбивається на стовпчики, розділені пробілом. Перший стовпець завжди містить ідентичність вікна як шістнадцяткове ціле число, а другий стовпчик завжди містить номер робочого столу (-1 використовується для ідентифікації липкого вікна). Якщо параметр -p заданий, наступний стовпець буде містити PID для вікна у вигляді десяткового цілого числа. Якщо вказано параметр -G , наступні чотири цілі стовпці: x-offset, y-offset, ширина та висота. Наступний стовпець завжди містить ім'я клієнтської машини. Залишок рядка містить заголовок вікна (можливо, з декількома пробілами у заголовку).


Я буду цим користуватися!
Аллан

1
Мені подобається те, як ваш комп'ютер називається bert :)
drnessie

5

Я вірю, що 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"

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:


Він звичайний, додайте приклад;)
AB

Додав їх через рік;) Але краще пізніше, ніж ніколи, правда?
Сергій Колодяжний

0

Сценарії оболонок не знають і не цікавлять Windows. У кращому випадку вони працюють у терміналі (який може бути, а може і не відображатися у вікні). Якщо ви хочете отримати ширину і висоту терміналу в символах, скористайтеся утилітою stty.


2
Напевно сценарій оболонки міг якось запитати клієнтів X щодо їх геометрії? Як ще писатимуться програми X?
djeikyb

@djeikyb вони написані як клієнти X і спілкуються з сервером X. Сценарії оболонки запускаються в оболонці, яка може бути, а може і не працювати в середовищі, у якій навіть є X-сервер, і не повинно піклуватися про X.
psusi

2
Зрозуміло, що так. Але є обхідні шляхи! Використовуючи wmctrl, пакет від репо, ви можете переміщати, змінювати розмір, мінімізувати і навіть змінювати робочу область!
drnessie

За логікою @ psusi, настільні середовища не повинні існувати. Зрештою, це просто величезна колекція сценаріїв, які взаємодіють із програмним забезпеченням, написаним для X.
Andyn

0

Я знайшов tput colsроботу досить приємно!


2
Дякую за ваш внесок. Я пропоную вдосконалити свою відповідь: поясніть, що це робить, змініть команду, щоб отримати і кількість рядків. Можливо, покажіть, як використовувати результати в сценарії оболонки. - Дивіться найкращі відповіді як приклади.
guntbert

Маючи на увазі згадування ОП wmctrl, ми говоримо не про консольні, а про графічні вікна середовища.
Андін

0

Отримав 3 екрани, цей вихід 3 рядки з розмірами:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.