Каковы альтернативы 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, но это возможно.
Ответ 3
xdotool является разумной альтернативой (проект github здесь), но, к сожалению, автор, похоже, больше не заботится об этом.
Ответ 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, который может выполнять достойную работу с минимальными ресурсами.