Відповіді:
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, ширина та висота. Наступний стовпець завжди містить ім'я клієнтської машини. Залишок рядка містить заголовок вікна (можливо, з декількома пробілами у заголовку).
Я вірю, що 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:
Сценарії оболонок не знають і не цікавлять Windows. У кращому випадку вони працюють у терміналі (який може бути, а може і не відображатися у вікні). Якщо ви хочете отримати ширину і висоту терміналу в символах, скористайтеся утилітою stty.
Я знайшов tput cols
роботу досить приємно!
wmctrl
, ми говоримо не про консольні, а про графічні вікна середовища.