Определение текущего активного окна

Определение текущего активного окна

Инструмент командной строки 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'

Связанный контент