Как найти геометрию X корневого окна, которая исключает какие-либо панели GNOME или другие «вещи» GNOME? - PullRequest
3 голосов
/ 13 ноября 2011

Мне нужно найти способ получить геометрию, подходящую для перехода к некоторому X опция -geometry команды окна, чтобы она гарантированно покрывала все корневое окно X, которое не перекрывается ни с чем GNOME управляет собой (например, окно панели GNOME). Это не то же самое, что вывод xwininfo -root, который будет возвращать геометрию для все X корневое окно, и обязательно будет включать в себя недвижимость потребляется панелью GNOME. Мне не нужно то же самое, чтобы быть правдой для KDE так как я больше не использую KDE.

Я бы хотел получить эту геометрию, используя X утилиты командной строки windows и не надо прибегать к Xlib программирование (т.е. я хотел бы сделать это из сценариев). Сценарии может зависеть от утилит командной строки GNOME.

Использование базовой математики для «вычитания» из панели GNOME было бы вариантом, но только если бы у меня была гарантия, что мне нужно будет только отчитаться для одного и единственного окна GNOME Panel X. Но я подозреваю, что GNOME Окно панели не единственное, что нужно учитывать. Я говорю потому что внизу есть окно, которое показывает xwininfo как «Нижняя расширенная кромочная панель», которая может или не может быть в конфликте с точки зрения недвижимости, поскольку отображается только при наведении мыши на в самом низу корневого окна X. Но если панель GNOME действительно только один, чтобы рассмотреть, то этот метод "вычитания" может быть просто достаточно хорошо.

Мой пример использования такой: я использую rdesktop для RDP в различные Рабочие столы Microsoft Windows. Пользователь должен решить, прежде чем выполнять rdesktop, размеры в окне X, так как он не может быть изменен после того, как это отображается. Мне нужно это окно, чтобы потреблять максимум количество недвижимости корневого окна при условии, что оно не конфликтует с управляемые GNOME окна, такие как панель GNOME. Что я делаю сейчас это жесткое программирование геометрии для конкретного рабочего стола в моей оболочке сценарии, которые вызывают rdesktop, но не в состоянии делать то, что я хочу, потому что Я работаю с разных рабочих столов, которые обязательно меняются по дисплею аппаратное обеспечение, с результирующим изменением геометрии корневого окна X. Подача геометрии корневого окна X в результаты команды rdesktop в окне RDP, которое выходит за видимую область в GNOME рабочий стол, так как оконный менеджер GNOME перемещает фактический верхний левый поверните вниз, чтобы избежать наложения на панель GNOME, с результатом что часть окна RDP скрыта от манипуляций мышью.

Я пытался использовать xwininfo -root -children, чтобы посмотреть, смогу ли я найти некоторое окно X в непосредственных потомках корня X, который будет последовательно быть окном, которое я мог бы использовать, чтобы извлечь эти измерения, но имена выглядят так, как будто они являются деталями реализации GNOME настольное программное обеспечение (или metacity WM), или и то, и другое что-то, на что я хочу положиться.

1 Ответ

3 голосов
/ 17 ноября 2011

Менеджер окон размещает несколько свойств в корневом окне. Одно из свойств относится к «рабочей области» каждого рабочего пространства, то есть области, которая не закрыта панелями и штучками.

Часть вывода "xprop -root" на моей машине содержит это:

_NET_CURRENT_DESKTOP (CARDINAL) = 0

_NET_WORKAREA (CARDINAL) = 0, 32, 1440, 838, 0, 32, 1440, 838, 0, 32, 1440, 838, 0, 32, 1440, 838

Свойство _NET_CURRENT_DESKTOP дает номер текущего рабочего пространства.

_NET_WORKAREA в группах по четыре дает (x, y, ширина, высота) рабочей области для каждого рабочего пространства.

Это задокументировано в Спецификации подсказок для расширенного оконного менеджера - http://standards.freedesktop.org/wm-spec/latest/ar01s03.html#id2568237

Возможно, вам придется вычесть область для рамки окна и строки заголовка, но это должно приблизить вас. Если вы хотите сделать это точнее, с дополнительным кодированием, прочитайте о _NET_WM_REQUEST_FRAME_EXTENTS: http://standards.freedesktop.org/wm-spec/latest/ar01s04.html#id2568770

...