web-dev-qa-db-fra.com

Comment puis-je utiliser xprop ou xwininfo Gnome-Do?

J'ai besoin de voir les propriétés X de la fenêtre contextuelle Gnome-Do, en ce qui concerne cette question que j'ai posée plus tôt. Le problème est que dès que la fenêtre Gnome-Do perd le focus, elle se ferme, donc je ne peux pas changer le focus sur le terminal pour exécuter xprop. La réponse que je continue de voir sur Internet est:

sleep 5; xprop

Ouvrez ensuite la fenêtre Gnome-Do et attendez que xprop démarre. Cela semble intelligent, mais ne fonctionne tout simplement pas:

$ dormir 5; xprop 
 xprop: erreur: impossible de saisir la souris.

Il en va de même pour xwininfo:

$ dormir 5; xwininfo 
 
 xwininfo: Veuillez sélectionner la fenêtre sur laquelle vous 
 souhaitez obtenir des informations en cliquant sur la souris 
 dans cette fenêtre. 
 xwininfo: erreur: Impossible de saisir la souris.

J'ai également essayé d'exécuter xprop à l'aide de Mod+R raccourci dans Awesome WM, mais pendant que la fenêtre Gnome-Do est ouverte, le raccourci ne fonctionne pas. Il tape simplement un r dans la zone de recherche.

Je n'ai plus d'idées. Comment puis-je faire cela?

1
Hubro

Si vous exécutez le script ci-dessous, il enregistre pendant 10 secondes (ou à tout autre moment que vous définissez) la sortie de la commande xprop sur la fenêtre la plus en avant (exécutant la xprop -root commande). Par la suite, il écrit la sortie, une fois le temps écoulé, dans un fichier: outfile.txt
Si vous vous assurez de conserver le Gnome-Do fenêtre active jusqu'à la fin du script, vous pouvez être sûr que le dernier enregistrement correspond au Gnome-Do fenêtre.

Pour l'utiliser

  • Copiez simplement le script ci-dessous dans un fichier vide, définissez, dans la section head, le chemin d'accès souhaité au fichier de sortie (outfile =, utilisez un chemin absol). Enregistrez-le sous record_xprop.py
  • Démarrez le script par la commande:

    python3 /path/to/record_xprop.py
    
  • Appelle ton Gnome-Do fenêtre (ou toute autre application dont vous avez besoin de données).

  • Une fois le temps écoulé, votre fichier de sortie affichera cinq fois la sortie du xprop -root commande, séparée par une ligne pointillée.

Remarque

Si vous avez besoin de plus de temps, changez simplement le "5" dans la ligne:

 while t < 5:

dans toute autre valeur dont vous avez besoin

Le script

#!/usr/bin/env python3
import subprocess
import time

outfile = "/home/jacob/Bureaublad/outfile.txt"
data = []; t = 0
while t < 5:
    data.append(subprocess.check_output(["/bin/bash", "-c", "xprop -root"]).decode("utf-8"))
    time.sleep(2)
    t = t + 1
with open(outfile, "wt") as out:
    for rec in data:
        out.write(rec+"\n"+"-"*20+"\n\n")

Éditer

Si cela ne fonctionne pas pour une raison quelconque (apparemment, la fenêtre n'est pas au premier plan, comme le reconnaît xprop), nous pourrions faire la même astuce avec le wmctrl -l commande (remplacez xprop -root par wmctrl -l dans le script), pour identifier d'abord la fenêtre par son nom.
Une fois cela fait, nous pouvons ensuite réexécuter xprop, avec le -name option, pour obtenir les informations nécessaires: xprop -name <windowname>

Pour les deux commandes, vous pouvez exécuter la commande sleep ou, si vous avez besoin de plus de temps, réexécuter le script.

1
Jacob Vlijm

Jacob l'a compris dans les commentaires!

En utilisant le sleep 1; wmctrl -l commande, puis en ouvrant Gnome-Do, j'ai obtenu cette sortie:

0x00e000b9 0 bonus-debian Do

Qui montre le nom de la fenêtre Gnome-Do. Ensuite, je pourrais utiliser le nom pour identifier la fenêtre pour xprop:

sleep 1; xprop -name "Do"

Ce qui m'a donné la sortie que je recherchais:

$ dormir 1; xprop -name "Do" 
 WM_STATE (WM_STATE): 
 état de la fenêtre: retiré 
 icône fenêtre: 0x0 
 GDK_TIMESTAMP_PROP (GDK_TIMESTAMP_PROP) = 0x61 
 _NET_WM_SYNC_REQUEST_COUNTER (CARDINAL) = 14680093 
 _ XEMBED_INFO (_XEMBED_INFO) = 0x1, 0x1 
 _ NET_WM_USER_TIME_WINDOW (WINDOW): id fenêtre de fenêtre # 0xe00004 
 WM_CLI: 0x_WIND .] _ NET_WM_PID (CARDINAL) = 6708 
 WM_LOCALE_NAME (STRING) = "en_US.UTF-8" 
 WM_CLIENT_MACHINE (STRING) = "bonus-debian" 
 WM_NORMAL_HINTS (WM_SIZE_HINTS) 
 taille minimale spécifiée du programme: 19 par 19 
 gravité de la fenêtre: nord-ouest 
 WM_PROTOCOLS (ATOM): protocoles WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST 
 WM_CLASS (STRING) "Faire", "Faire" 
 WM_ICON_NAME (STRING) = "Faire" 
 _ NET_WM_ICON_NAME (UTF8_STRING) = "Faire" 
 WM_NAME (STRING) = "Faire" 
 _NET_WM_NAME (UTF8_STRING) = "Faire"
1
Hubro