65 votes

Détection de la fenêtre actuellement active

L'outil de ligne de commande linux wmctrl vous permet de répertorier tous les Windows, ou tous les bureaux, entre autres. En mode liste des bureaux, le bureau actuel est marqué d'un astérisque.

J'ai besoin d'un outil qui puisse déterminer le titre de la fenêtre actuellement active. Malheureusement, wmctrl n'a pas d'aide qui fasse cela - bien qu'il sache quelle fenêtre est actuellement active (voir :ACTIVE: marqueur).

Existe-t-il un autre outil en ligne de commande qui puisse me donner l'identifiant de la fenêtre et/ou le titre de la fenêtre en cours ?

68voto

Installer xdotool puis exécutez

xdotool getwindowfocus getwindowname

Il donnera par exemple la page web actuelle ouverte dans Firefox :

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

41voto

Jim Paris Points 511

Cette méthode est plus directe et utilise uniquement xprop y cut :

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

Ces commandes sont juste une extraction des propriétés de la fenêtre racine et de la fenêtre d'application, mais à la demande de Lorenzo von Matterhorn :

  • D'abord,

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

    Extrait le _NET_ACTIVE_WINDOW de la racine, qui vous donne le XID de la fenêtre active. Le site 32x '\t$0' dit à xprop pour formater la sortie de manière à ce que cut peut facilement être analysé plus tard.

  • Ensuite, extrayez juste le XID de la sortie avec cut -f 2

  • Ensuite, passez le XID en tant que paramètre à la fonction

    xprop -id XID _NET_WM_NAME

Ce qui imprime le nom de cette fenêtre.

11voto

BO VESTERGAARD Points 1

Il y en a une, mais il n'y a pas de réponse ou de solution courte.

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

résultat :

0x03800004  0 16459  xxxxxxxxxx /bin/bash

En cours d'utilisation :

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

5voto

Rob Points 3700

C'est ce qui a marché pour moi :

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

Donne :

WM_NAME(STRING) = "~"

Alors peut-être que tu ferais un peu de laideur sédimentaire pour avoir le nom tout seul :

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

Donne :

~

Ce qui est le nom de ma fenêtre actuellement focalisée, tout seul.

Ou bien, éviter les sédiments avec ceux qui sont un peu moins laids :

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

5voto

Robert Zelník Points 841

Relativement court, et gère correctement les noms de fenêtres contenant des guillemets :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X