web-dev-qa-db-fra.com

Obtenir le nom du processus derrière une fenêtre

J'essaie de créer un script qui vérifie si Spotify est fermé. J'ai essayé ce qui suit pour imprimer le nombre de fenêtres Spotify ouvertes, mais cela ne fonctionne pas.

wmctrl -l | grep "Spotify" | wc -l

La raison en est que lorsque Spotify joue de la musique, le titre de la fenêtre change pour le nom du morceau en cours de lecture et il n'inclut pas "Spotify".

Je pensais pouvoir faire quelque chose comme ceci pour imprimer le nombre de fenêtres Spotify ouvertes:

wmctrl -l | awk '{print $1}' | xargs -I id ... | wc -l

Mais je ne sais pas quelle commande je peux utiliser pour vérifier le nom du processus qui exécuterait une fenêtre, étant donné l'ID de fenêtre renvoyé par wmctrl (sous la forme 0x06200001)

wmctrl -l | awk '{print $1}' | xargs -i xprop -id {} | grep WM_CLASS\(STRING\)\ =\ \"spotify\" | wc -l

J'ai utilisé xargs pour exécuter xprop -id <window-id> Sur chaque fenêtre ouverte, et pour chaque fenêtre Spotify, la sortie de xprop afficherait (parmi beaucoup d'autres choses) une ligne comme celle-ci:

WM_CLASS(STRING) = "spotify", "Spotify"

J'ai donc canalisé xprop dans grep WM_CLASS(STRING) = "spotify", évitant évidement les espaces, les citations et les crochets.