%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%BE%D0%BA%D0%BD%D0%BE%3F.png)
Я пишу скрипт, который требует определить, в какой области просмотра находится окно.
Мой рабочий стол имеет размер 2x2 (4 области просмотра); обычно это рассматривается как 4 виртуальных рабочих стола, но в compiz/unity это на самом деле область просмотра и только один рабочий стол, основанный на xdotool get_num_desktops
.
Чтобы было проще объяснить, посмотрите на эти области просмотра (хотя не уверен, что это на самом деле их идентификаторы):
0 1
2 3
Поместите окно в область просмотра 2, запустите xwininfo -all
и щелкните по окну; вы получите его идентификатор и увидите, что все значения в «верхнем левом углу» маленькие, как будто они находятся в области просмотра 0, но на самом деле они относятся к области просмотра 2.
Кроме того, вы не найдете никакой информации о том, в каком окне просмотра он находится.
Более подробную информацию вы можете найти с помощью: ,
wmctrl -d
который показывает точную информацию о том, в каком окне просмотра мы находимся.
xdotool get_desktop_viewport
не будет точным для окон просмотра 2 и 3.
решение1
На самом деле все очень просто: информация о положении области просмотра окна относится к текущей области просмотра.
Итак, просто введите xwininfo
и выберите окно.
Теперь измените область просмотра и тип xwininfo -id 0x...
(0x... — это идентификатор, который вы собрали для окна), значения позиции будут отображаться как находящиеся за пределами текущих границ области просмотра, с относительными значениями, основанными на текущей области просмотра, например:
Absolute upper-left X: -1270
Absolute upper-left Y: 62
На основании этого можно определить, где находится окно.
В данном случае я был на вьюпорте 1, а окно на вьюпорте 0.