Récupérer l'ID de window X11 d'un programme GUI récemment lancé

Je veux récupérer l'ID X des programmes GUI que je lance en arrière-plan, afin de travailler sur leurs propriétés Windows. J'ai utilisé jusqu'à présent cette solution de contournement:

myprogram & sleep 1 winID=$(wmctrl -l | awk '/./{line=$0} END{print $1;}') 

Mais cela repose sur trois hypothèses lourdes:

  • le programme prendra less d'une seconde pour avoir sa window ouverte (pour ne pas mentionner qu'une seconde peut être beaucoup trop long)
  • la window sera apposée à la fin de la list wmctrl
  • aucune autre window ne sera ouverte entre-time

Y at-il un signal que myprogram enverra une fois qu'il a ouvert une window? Comment puis-je l'intercepter?

Pour get l'ID de window dans mon programme, j'ai le programme définir le titre à quelque chose d'unique, puis faire démarrer le programme wmctrl et parsingr sa sortie (et non le script shell qui a démarré le programme), puis rapporter sur l'ID de la window le plus souvent via un file).

Puisque le programme ne continue pas tant que les windows ne sont pas ouvertes, vous n'aurez jamais à attendre trop longtime.

Bien sûr, cela nécessite que vous puissiez modifier mon myprogram (c.-à-comstackr à partir de la source).