• # un script

    Posté par . En réponse au message lister les boîtes de dialogue ouvertes. Évalué à 5.

    Je pense que si j'avais besoin de faire ça, je modifierais ce script pour qu'au lieu qu'il tue la fenêtre ayant le focus, il affiche le pid. À partir de la, j'utiliserai pstree pour savoir à qui est le pid ainsi que qui sont ses parents (au cas ou le dialogue ne serait pas dans le même processus que l'application qui en a besoin).
    Bien sûr, soit il faut lier le script qui en résulterait à un raccourcis clavier, soit il faut ajouter un délai avant de l'exécuter, le temps d'aller donner le focus à la cible.

    Je pensais qu'il serait possible d'utiliser xkill pour retrouver le pid du processus ciblé, mais non. Peut-être avec un autre outil X... Dommage, ça aurait été plus simple.

    Bon, en gros, le script devrais ressembler a (je viens de tester, chez moi, ça marche):

    #!/bin/sh
    sleep 2
    windowFocus=$(xdotool getwindowfocus);
    pid=$(xprop -id $windowFocus | grep PID | sed 's/^.*= \([0-9]*\)$/1円/g' );
    pstree -p | grep -E --color "$pid|\$"

    C'est sûrement améliorable, par exemple man pstree signale une option -H pour remplacer le bordel après pstree, mais chez moi, ça marche pas.
    À noter que ce code est fait pour être lancé à partir d'un script dans un terminal, pas à partir d'un raccourcis clavier, parce que je ne stocke rien, j'affiche directement. Pour modifier le temps d'attente, c'est la ligne "sleep 2", il faut modifier le 2: ce sont des secondes.