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

У меня возникла проблема с некоторыми версиями драйвера Intel GM965 / GL960. Я предлагаю вам попробовать обновить видеодрайверы. Вы не указали, используете ли fglrx или нет.

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

4 ответа

Я верю, что 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"
4
ответ дан 25 May 2018 в 22:50

Используйте 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:

Всегда скрывать окно приложения. Как я могу свести к минимуму окна только на конкретном мониторе?
2
ответ дан 25 May 2018 в 22:50
  • 1
    Он общий, добавьте пример;) – A.B. 20 May 2015 в 00:11
  • 2
    Добавлено их через год;) Но лучше позже, чем никогда, не так ли? – Sergiy Kolodyazhnyy 15 July 2016 в 20:25

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

0
ответ дан 25 May 2018 в 22:50
  • 1
    Разумеется, скрипт оболочки может каким-то образом запросить X-клиентов для их геометрии? Еще бы, как было бы написано X приложений? – djeikyb 25 February 2011 в 02:01
  • 2
    @djeikyb они записываются как X-клиенты и общаются с X-сервером. Сценарии оболочки запускаются в оболочке, которая может выполняться или не работать в среде, которая даже имеет X-сервер, и не должна заботиться о X. – psusi 25 February 2011 в 18:19
  • 3
    Понятно, да. Но есть обходные пути! Используя wmctrl, пакет из репо, вы можете перемещать, изменять размер, сводить к минимуму и даже изменять рабочее пространство! – drnessie 26 February 2011 в 09:04

Я использую в своих сценариях это решение:

    $ stty size
0
ответ дан 25 May 2018 в 22:50

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

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