2 votes

Comment puis-je xprop ou xwininfo Gnome-Do ?

J'ai besoin de voir les propriétés X de la fenêtre popup de Gnome-Do, en ce qui concerne cette question que j'ai posée précédemment. 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 vers le terminal pour lancer xprop . La réponse que je vois régulièrement sur Internet est la suivante :

sleep 5; xprop

Ouvrez ensuite la fenêtre Gnome-Do et attendez que xprop pour commencer. Cela semble astucieux, mais ne fonctionne tout simplement pas :

$ sleep 5; xprop
xprop: error: Can't grab the mouse.

Il en va de même pour xwininfo :

$ sleep 5; xwininfo 

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.
xwininfo: error: Can't grab the mouse.

J'ai également essayé de lancer xprop en utilisant le Mod+R dans Awesome WM, mais lorsque la fenêtre Gnome-Do est ouverte, le raccourci ne fonctionne pas. Il se contente de taper un r dans la boîte de recherche.

Je n'ai plus d'idées. Comment faire ?

2voto

Jacob Vlijm Points 78990

Si vous exécutez le script ci-dessous, il enregistre pendant 10 secondes (ou toute autre durée que vous définissez) la sortie de la fonction xprop dans la fenêtre la plus en avant (en exécutant la commande xprop -root ). Ensuite, il écrit la sortie, une fois le temps écoulé, dans un fichier : outfile.txt
Si vous veillez à conserver le Gnome-Do active jusqu'à ce que le script soit terminé, vous pouvez être sûr que le dernier enregistrement correspond au Gnome-Do fenêtre.

Pour l'utiliser

  • Il suffit de copier le script ci-dessous dans un fichier vide, de définir, dans la section head, le chemin d'accès au fichier de sortie ( outfile = , utiliser un absolu chemin). Sauvegardez-le sous le nom de record_xprop.py

  • Lancez le script par la commande :

      python3 /path/to/record_xprop.py
  • Appelez votre Gnome-Do (ou toute autre application pour laquelle vous avez besoin de données).

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

Note

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

 while t < 5:

en 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")

編集部

Si cela ne fonctionne pas pour une raison quelconque (apparemment, la fenêtre n'est pas au premier plan, comme le reconnaît le système xprop ), nous pourrions faire la même chose avec l'option wmctrl -l (remplacer xprop -root par wmctrl -l dans le script), pour identifier la fenêtre d'abord par son nom.
Une fois que cela est fait, nous pouvons à nouveau lancer l'opération xprop , avec le -name pour obtenir les informations nécessaires : xprop -name <windowname>

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

2voto

Mendokusai Points 447

Jacob l'a eu dans les commentaires !

L'utilisation de la sleep 1; wmctrl -l puis en ouvrant Gnome-Do, j'ai obtenu ce résultat :

0x00e000b9  0 bonus-debian Do

qui affiche le nom de la fenêtre Gnome-Do. Je pourrais alors utiliser ce nom pour identifier la fenêtre pour xprop :

sleep 1; xprop -name "Do"

Ce qui m'a permis d'obtenir le résultat que je recherchais :

$ sleep 1; xprop -name "Do"
WM\_STATE(WM\_STATE):
        window state: Withdrawn
        icon window: 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): window id # 0xe00004
WM\_CLIENT\_LEADER(WINDOW): window id # 0xe00001
\_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):
        program specified minimum size: 19 by 19
        window gravity: NorthWest
WM\_PROTOCOLS(ATOM): protocols  WM\_DELETE\_WINDOW, WM\_TAKE\_FOCUS, \_NET\_WM\_PING, \_NET\_WM\_SYNC\_REQUEST
WM\_CLASS(STRING) = "Do", "Do"
WM\_ICON\_NAME(STRING) = "Do"
\_NET\_WM\_ICON\_NAME(UTF8\_STRING) = "Do"
WM\_NAME(STRING) = "Do"
\_NET\_WM\_NAME(UTF8\_STRING) = "Do"

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