Erkennen des aktuell aktiven Fensters

Erkennen des aktuell aktiven Fensters

Mit dem Linux-Kommandozeilentool wmctrlkönnen Sie unter anderem alle Fenster oder alle Desktops auflisten. Im Desktop-Auflistungsmodus wird der aktuelle Desktop mit einem Sternchen markiert.

Ich brauche ein Tool, das den Titel des aktuell aktiven Fensters herausfinden kann. Leider wmctrlgibt es keinen Helfer, der das kann – obwohl es weiß, welches Fenster aktuell aktiv ist (siehe :ACTIVE:Markierung).

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

Antwort1

Installieren xdotoolund ausführen

xdotool getwindowfocus getwindowname

Es wird beispielsweise für die aktuell in Firefox geöffnete Webseite Folgendes angezeigt:

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

Antwort2

Dies ist direkter und verwendet nur xpropund cut:

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

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

  • Erste,

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

    Extrahiert die _NET_ACTIVE_WINDOWEigenschaft aus der Wurzel, wodurch Sie die XID des aktiven Fensters erhalten. Dies 32x '\t$0'weist Sie an xprop, die Ausgabe so zu formatieren, dass cutsie später leicht analysiert werden kann.

  • Extrahieren Sie dann nur die XID aus der Ausgabe mitcut -f 2

  • Übergeben Sie dann die XID als Parameter an

    xprop -id XID _NET_WM_NAME
    

Dadurch wird der Name dieses Fensters gedruckt.

Antwort3

Die gibt es, 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)

Antwort4

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

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

verwandte Informationen