Инструмент командной строки Linux wmctrl
позволяет вам вывести список всех окон или всех рабочих столов, среди прочего. В режиме списка рабочих столов текущий рабочий стол отмечен звездочкой.
Мне нужен инструмент, который может определить заголовок текущего активного окна. К сожалению, wmctrl
у него нет помощника, который делает это, несмотря на то, что он знает, какое окно в данный момент активно (см. :ACTIVE:
маркер).
Есть ли другой инструмент командной строки, который может выдать мне идентификатор окна и/или заголовок текущего окна?
решение1
Установить xdotool
, затем запустить
xdotool getwindowfocus getwindowname
Например, для текущей веб-страницы, открытой в Firefox, это даст:
linux - Detecting currently active window - Super User - Mozilla Firefox
решение2
Это более прямолинейно и использует только xprop
и cut
:
xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME
Эти команды представляют собой всего лишь извлечение свойств из корневого окна и окна приложения, но по просьбе Лоренцо фон Маттерхорна:
Первый,
xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
Извлекает
_NET_ACTIVE_WINDOW
свойство из корня, что дает вам XID активного окна. Сообщает32x '\t$0'
форматироватьxprop
вывод таким образом, чтобы егоcut
можно было легко проанализировать позже.Затем извлеките только XID из выходных данных с помощью
cut -f 2
Затем передайте XID в качестве параметра
xprop -id XID _NET_WM_NAME
Которая выводит название этого окна.
решение3
Есть, но нет короткого ответа или решения.
$ wmctrl -lp | grep $(xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \
awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/')
результат:
0x03800004 0 16459 xxxxxxxxxx /bin/bash
В использовании:
$ for x in $(seq 1 10); do sleep 5; wmctrl -lp | grep $(xprop -root | \
grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | \
sed 's/^0x/0x0/'); done
0x03800004 0 16459 xxxxxxxxxx /bin/bash
0x020000a4 0 13524 xxxxxxxxxx linux - Detecting currently active window - Super User - Mozilla Firefox (Build 20120129142219)
решение4
Относительно короткий и правильно обрабатывает имена окон, содержащие кавычки:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME |
sed -nr 's/.*= "(.*)"$/\1/p'