it-swarm.com.de

Erkennen des aktuell aktiven Fensters

Mit dem Linux-Befehlszeilentool wmctrl können Sie unter anderem alle Fenster oder alle Desktops auflisten. Im Desktop-Listenmodus ist der aktuelle Desktop mit einem Stern markiert.

Ich benötige ein Tool, mit dem ich den Titel des derzeit aktiven Fensters ermitteln kann. Leider hat wmctrl keinen Helfer, der dies tut - obwohl er weiß, welches Fenster gerade aktiv ist (siehe :ACTIVE: marker).

Gibt es ein anderes Befehlszeilentool, das mir die Fenster-ID und/oder den Fenstertitel des aktuellen Fensters geben kann?

50
Dave Vogt

xdotool installieren und ausführen

xdotool getwindowfocus getwindowname

Es wird z.B. für die aktuelle in Firefox geöffnete Webseite:

linux - Detecting currently active window - Super User - Mozilla Firefox

Dies ist direkter und verwendet nur xprop und cut:

xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME

Diese Befehle sind nur eine Extraktion von Eigenschaften aus dem Stammfenster und dem Anwendungsfenster, aber gemäß der Anfrage von Lorenzo von Matterhorn:

  • Zuerst,

    xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
    

    Extrahiert die Eigenschaft _NET_ACTIVE_WINDOW aus dem Stammverzeichnis, wodurch Sie die XID des aktiven Fensters erhalten. Der 32x '\t$0' weist xprop an, die Ausgabe so zu formatieren, dass cut sie später leicht analysieren kann.

  • Dann extrahieren Sie einfach die XID aus der Ausgabe mit cut -f 2

  • Übergeben Sie dann die XID als Parameter an

    xprop -id XID _NET_WM_NAME
    

Welches druckt den Namen dieses Fensters.

32
Jim Paris

Es gibt aber keine kurze Antwort oder Lösung.

$ wmctrl -lp | grep $(xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \
    awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/')

ergebnis:

0x03800004  0 16459  xxxxxxxxxx /bin/bash

In Benutzung:

$ 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)
9
tao

Das hat bei mir funktioniert:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME

Gibt:

WM_NAME(STRING) = "~"

Vielleicht würdest du ein bisschen hässlich sein, um den Namen von alleine zu bekommen:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | sed -e 's/.*"\(.*\)".*/\1/'

Gibt:

~

Welches ist mein momentan fokussierter Fenstername, ganz für sich.

Oder vermeiden Sie Sed mit dem etwas weniger hässlichen:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | awk -F '"' '{print $2}'

5
Greg Bell

Relativ kurz und behandelt Fensternamen, die Anführungszeichen enthalten, korrekt:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | 
sed -nr 's/.*= "(.*)"$/\1/p'
3