Каковы альтернативы wmctrl?

Знаете ли вы какие-либо альтернативы wmctrl? Программа, которая позволяет вам управлять окнами и управлением окон из командной строки.

Одним из недостатков wmctrl является то, что пока вы можете манипулировать текущим окном, вы не можете заставить wmctrl отображать информацию о текущем окне (он игнорирует -r).

Ответ 1

Чтобы найти идентификатор текущего активного окна, используйте:

xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"

Используя этот идентификатор, вы можете получить много информации о текущем активном окне:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")

Оттуда вы можете grep, что вам нужно, или сделать так, чтобы оно отображало только нужное поле так же, как я извлек _NET_ACTIVE_WINDOW выше. Итак, чтобы найти PID текущего активного окна, вы добавили бы -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID к приведенной выше команде, сделав это:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID | awk "{print \$2}"

Обратите внимание, что wmctrl также принимает одинаковый идентификатор в сочетании с флагом -i.

Ответ 2

Вы можете обмануть wmctrl для вывода идентификационного номера активного окна, включив подробный режим и сообщив ему, чтобы переместить активное окно с недопустимым параметром:

wmctrl -v -r :ACTIVE: -e dummy

Пока он завершает работу со статусом ошибки, он также выводит идентификационный номер активного окна:

envir_utf8: 1
Using window: 0x08400004
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"

Как только у вас есть идентификационный номер активного окна, вы можете перечислить все окна и выполнить поиск этого идентификационного номера:

 wmctrl -l

Неловко получать информацию об активном окне с помощью wmctrl, но это возможно.

Ответ 4

Мой опыт работы с wmctrl версии 1.07 под RH Linux 5.5 и 5.6 64-битами - это то, что Время от времени wmctrl полностью теряется. Например, при поиске окна firefox следующее ничего не возвращает:

% wmctrl -lpGx | grep -i 'Firefox'

Мое подозрение заключается в том, что wmcntl не может найти окна firefox из-за характера диспетчера окон, в этом случае, metacity. Этот диспетчер, похоже, заново открывает окна, и, возможно, это приводит к тому, что wmctrl не укажет окна firefox. "xwininfo" перечисляет окна firefox.

Если у вас есть доступ к xdotool (моя версия - 2.20110530.1), вы можете попробовать:

% mywin=`xwininfo -root -tree | awk '/- Mozilla Firefox/ { printf $1; exit}'`
% xdotool windowactivate --sync $mywin mousemove --window $mywin 0 0

Это делает firefox активным, делает его верхним окном в стеке на вашем рабочем столе и накладывает на него мышь (как это иногда необходимо, когда пользовательская среда накладывает фокус на окно под мышью, не требуя щелчка). Если вы не хотите, чтобы мышь просто двигалась удалить 'mousemove --window $mywin 0 0' из приведенного выше.

Примечание. У меня была та же проблема с поиском окон Konqueror в тех же системах Linux.

Ответ 5

id окна

wmctrl -a :ACTIVE: -v 2>&1 | grep "Using window: " | awk "{print \$3}"

Ответ 6

Вы можете проверить xdo, который может выполнять достойную работу с минимальными ресурсами.