Каковы альтернативы wmctrl? - PullRequest
11 голосов
/ 25 ноября 2010

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

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

Ответы [ 6 ]

11 голосов
/ 31 декабря 2011

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

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.

9 голосов
/ 19 октября 2011

Вы можете обмануть 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, но это возможно.

2 голосов
/ 12 октября 2013

xdotool - разумная альтернатива ( проект github здесь ), хотя, к сожалению автор, похоже, больше не заботится об этом .

1 голос
/ 17 ноября 2016

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

1 голос
/ 09 марта 2016

идентификатор окна

wmctrl -a :ACTIVE: -v 2>&1 | grep "Using window: " | awk "{print \$3}"
1 голос
/ 12 августа 2014

Мой опыт работы с wmctrl версии 1.07 под RH Linux 5.5 и 5.6 64-bit таков, что Время от времени 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.

...