от человека wmctrl:
wmctrl является командой, которая может использоваться для взаимодействия с менеджером по X Window, который совместим со спецификацией EWMH/NetWM. wmctrl может запросить менеджер окон для получения информации, и это может запросить, чтобы были приняты определенные меры управления окнами.
wmctrl -d
команда может использоваться для получения информации о рабочих столах (области просмотра/рабочие области), wmctrl -lG
списки команд все окна, включая их информацию о геометрии.
Как может я (в Единице по сравнению с другими менеджерами окон):
из командной строки, с помощью этих двух команд?
wmctrl-d команда
рабочие столы списков. На (например). Xubuntu, когда я работаю wmctrl -d
, Я могу ясно видеть в выводе, который является текущей рабочей областью и разрешением экрана (DG) на рабочей области (областях).
0 - DG: 1024x600 VP: N/A WA: 0,31 1024x569 1
1 - DG: 1024x600 VP: N/A WA: 0,31 1024x569 2
2 - DG: 1024x600 VP: N/A WA: 0,31 1024x569 3
3 * DG: 1024x600 VP: 0,0 WA: 0,31 1024x569 4
Текущая рабочая область отмечена с a *
.
На Единице однако, выводе wmctrl -d
шоу только одна (очень большая) рабочая область, отмеченная с a *
, неважно, который является текущей "рабочей областью", например:
0 * DG: 3360x2100 VP: 1680,0 WA: 65,24 1615x1026 N/A
wmctrl - команда LG
от man wmctrl
:
-l
: Перечислите окна, управляемые менеджером окон.
-G-
: Включайте информацию о геометрии в вывод-l действия
Когда я работаю wmctrl -lG
на (например). Xubuntu, с окном коврика для мыши на каждой рабочей области:
0x03400003 0 241 197 533 244 jacob-1001PX Untitled 1 - Mousepad
0x03400197 1 299 222 533 244 jacob-1001PX Untitled 2 - Mousepad
0x034001be 2 236 201 533 244 jacob-1001PX Untitled 3 - Mousepad
0x034001e3 3 283 228 533 244 jacob-1001PX Untitled 4 - Mousepad
Информация довольно понятна; из второго столбца мы знаем рабочую область, окно идет, его положение (x, y, столбец 3/4) и размер (x, y, столбец 5/6). Положение дано относительно worspace, на котором оно расположено.
На Единице однако, это - совершенно другая история. Когда у меня есть четыре рабочих области, и я открываю gedit окно на каждых из них:
0x03c03b81 0 468 -884 875 741 jacob-System-Product-Name Niet-opgeslagen document 1 - gedit
0x03c03e74 0 369 164 1111 741 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit
0x03c03f8e 0 -1269 214 1111 741 jacob-System-Product-Name Niet-opgeslagen document 3 - gedit
0x03c00085 0 -1376 -917 1111 741 jacob-System-Product-Name Niet-opgeslagen document 4 - gedit
Некоторые окна имеют отрицательные координаты, у некоторых (могут) быть coordintates, которые превышают разрешение моего экрана.
Как указано в этом ответе, существует существенное различие между Compiz/Unity и другими менеджерами окон.
Если мы смотрим на Xubuntu (XFCE), все рабочие области являются одинокими пробелами. Все, что мы должны знать, является рабочей областью, окно идет, и координаты X и Y. В основном нет никакой матрицы, в которой рабочие области заказаны кроме "lineair" порядка 1, 2, 3 и т.д.
Это отличается в Единице, где существует на самом деле только одна рабочая область. (Охват) рабочая область разделена на многие разделы, названные областями просмотра. Эти области просмотра расположены в строках и столбцах.
Тем путем возможно, что одно окно частично видимо на всех областях просмотра:
в отличие от рабочих областей:
Понять вывод wmctrl -lG
, мы должны понять его "анатомию":
Так как Единица только имеет одну рабочую область, вывод всегда показывает a *
на [2]
. Как мы знаем, как области просмотра расположены и какова текущая область просмотра?
Информация находится в VP: 1680,0
([4]
). Не просто как число области просмотра, но как координата X и Y. Эти координаты могут быть нулем или x
*разрешение экрана. Чтобы знать, как области просмотра настраиваются, мы должны будем знать reolution экрана также (с помощью xrandr
).
сколько области просмотра там в настоящее время и как они расположенный:
Взгляд на DG: 3360x2100
в примере "Единицы", и зная, что разрешение нашего экрана 1680x1050, мы можем прийти к заключению, что существует два столбца областей просмотра (3360/1680) и две строки (2100/1050).
который является текущей рабочей областью:
Пример
Экран имеет разрешение 1680x1050. Информация об области просмотра Саис VP: 1680,0
. Cordinates отображены как левый верхний угол, Таким образом, мы находимся на втором столбце, первой строке.
где окно расположено в абсолютном смысле:
После того как мы знаем, какая область просмотра является текущей, мы можем локализовать окна, смотря на их координаты в выводе wmctrl -lG
[3]
:
имя окна
Мы можем просто определить местоположение окна с источником в левой вершине текущей области просмотра.
Ниже примера разрешения экрана 1680x1050, области просмотра 2x2:
координаты окна с точки зрения области просмотра 1
координаты окна с точки зрения области просмотра 4
С информацией выше и справкой wmctrl -lG
(координаты окна, раздел [3]
), довольно простой:
если
затем окно расположено на текущей области просмотра.