Я пытался выяснить размер окна для использования в небольшом скрипте. Моя текущая техника использует, wmctrl -lG
чтобы узнать размеры. Однако проблема заключается в следующем:
Цифры x и y, которые он дает, относятся к верхнему левому углу оформления окна, а высота и ширина - только к области содержимого. Это означает, что если декорации окна добавляют 20px высоты и 2px ширины, wmctrl сообщит, что окно размером 640x480, даже если оно занимает 660x482 на экране. Это проблема, потому что следующим шагом моего скрипта будет использование этой области, чтобы сообщить ffmpeg записать экран. Я хотел бы избежать жесткого кодирования размера оконных декораций из моей текущей настройки.
То, что подойдет, это либо метод получения размера оконных декораций, чтобы я мог использовать их для определения положения области содержимого 640x480, либо способ непосредственного получения положения области контента, а не расположения оконных декораций. ,
Ответы:
Следующий скрипт даст вам верхний левый экранные координаты и размер окна (без какой-либо декорации). , , ,
xwininfo -id $(xdotool getactivewindow)
содержит достаточно информации для вас.источник
xdotool getactivewindow
возвращает идентификатор окна фрейма оконного менеджера (который включает в себя оформление), а не окно клиента, содержащееся в нем.xdotool getactivewindow getwindowgeometry
Принятый ответ может быть расширен, чтобы получить все окно:
Хотя это легко, оказывается, не работать на Unity в Ubuntu 14.04, потому что относительная информация - все 0. Я спросил Получить полные размеры окна (включая украшения) в Unity и получил хороший ответ. Вот как я использовал этот ответ:
Этот второй метод работает как в Unity, так и в Xfce, и должен работать в Gnome.
источник
aw=`xdotool getactivewindow`
добавить top, чтобы избежать зависания при вызове xwininfo. Это приятно знать, потому что я рассматриваю возможность перехода на Unity, где я не могу запустить wmiface без segfaulting.aw
определение. Я сейчас отредактирую ответ, чтобы добавить эту строку.h
. Кажется, заголовок уже включен в высоту, которая возвращаетсяxwininfo
.Намного более простой способ получить размер и положение окна:
источник
Принятый ответ явно не включает оформление окна. Для тех, кто все еще ищет, как получить геометрию, включая все декорации, в соответствии с заголовком этого вопроса, вы можете использовать wmiface как в этом другом вопросе https://superuser.com/questions/164047/how-to-get-accurate-window -информация-размеры-и-т-в-linux-x . Пример:
Это возвращает геометрию и положение относительно верхнего левого угла следующим образом:
wmiface, похоже, не поставляется со всеми дистрибутивами linux (я не нашел пакет, предоставляющий его в Mint или Ubuntu), но мне удалось установить его из пакетов здесь: http://kde-apps.org/content/show .php? содержание = 40425
И это идет без документов и даже
--help
, но README здесь:https://gitorious.org/wmiface/wmiface/source/ea941eeb2076124734f6a3d3079326c826b462d7:README
источник
wmiface activeWindow
570x434 + 870 + 31 $ xdotool getwindowgeometryxdotool getactivewindow
Window 6291772 Позиция: 878,77 (экран: 0) Геометрия: 562x407Использование xdotool:
sleep 3s && xdotool getactivewindow
у вас есть 3 секунды, чтобы открыть окноxdotool getwindowgeometry $WINDOW_ID
xdotool getwindowgeometry -shell $WINDOW_ID
источник
Объединяя ответы на этой странице, я использовал это:
Запустите однострочник и затем в течение 3 секунд нажмите на окно, для которого вы хотите положение и геометрию.
источник