С wmctrl (не установлен по умолчанию) мы можем получить информацию о окнах, их id, их геометрии, pid, к которым они принадлежат, и т. д. Мы также можем перемещать или изменять размер окон с несколькими командами. Однако в некоторых отношениях его поведение кажется нелогичным. Мой вопрос заключается в перемещении окон с помощью wmctrl:
move
Когда я запускаю команду:
wmctrl -lG
I get (ao) следующую информацию о окне на картинке ниже:
0x04200085 0 746 443 468 205 jacob-System-Product-Name Niet-opgeslagen document 1 - gedit
В столбце 3-5 информация о геометрии сообщает нам координаты x / y и ширину / высоту.
Перемещение / изменение размера окна
Когда я поместил эти координаты в команду wmctrl на Перемещение / изменение размера окна в окне, оно ничего не должно делать , так как координаты не изменяются:
wmctrl -ir 0x04200085 -e 0,746,443,468,205
Однако на приведенных ниже рисунках окно перемещается вниз (точнее, 28px). Я предположил, что причина в том, что команда перемещения окна wmctrl, рассчитанная с помощью resize (экран минус высота панели), а команда wmctrl -lG рассчитана с общим размером экрана. Тогда еще 4px необъяснимо (панель высотой 24px).
Хотя отклонение можно очень хорошо компенсировать в сценариях, тот факт, что я не понимаю причину, не удовлетворяет, поэтому вопрос :
В чем причина этого отклонения?
window move
У меня была та же проблема и я мог найти обходное решение.
Моя ситуация основана на Mate 16.04 с установленной Compiz (которая активирует gtk window manager)
Я использую скрипт, связанный с привязкой клавиш, чтобы разместить окна в предопределенных местах.
Проблема может быть включена и выключена включением и оформлением окна в настройках (compiz).
Декорации окон могут быть включены и выключены с помощью python для определенного окна (с помощью сочетаний клавиш удобно для использования активного окна).
#!/usr/bin/python
from gtk.gdk import *
import gtk.gdk
import time
import sys
w = gtk.gdk.get_default_root_window().get_screen().get_active_window()
w.set_decorations(0) #use 1 to turn on decorations
window_process_all_updates()
gtk.gdk.flush()
Затем вы можете отключить декорации окон, переместить окно и включить декорации окон.