Quelles sont les alternatives à la wmctrl?

Connaissez-vous des alternatives à wmctrl? Un programme qui vous permet de manipuler les fenêtres et la gestion des fenêtres à partir de la ligne de commande.

Un inconvénient de wmctrl est que, même si vous pouvez manipuler la fenêtre en cours, vous ne pouvez pas demander à wmctrl de répertorier des informations sur la fenêtre en cours (elle ignore -r).

Pour trouver l’id de la fenêtre active, utilisez:

xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}" 

En utilisant cet identifiant, vous pouvez obtenir beaucoup d’informations sur la fenêtre actuellement active:

 xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") 

De là, vous pouvez grep ce dont vous avez besoin, ou le montrer juste le champ désiré de la même manière que j’ai extrait _NET_ACTIVE_WINDOW ci-dessus. Donc, pour trouver le PID de la fenêtre actuellement active, vous devez append -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID à la commande ci-dessus, en le faisant:

 xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID | awk "{print \$2}" 

Notez que wmctrl accepte également le même type d’identifiant en combinaison avec l’ -i .

Vous pouvez utiliser wmctrl pour générer le numéro d’identification de la fenêtre active en activant le mode prolixe et en lui indiquant de déplacer la fenêtre active avec un paramètre non valide:

 wmctrl -v -r :ACTIVE: -e dummy 

Bien que cela quitte avec un statut d’erreur, il affiche également le numéro d’identification de la fenêtre active:

 envir_utf8: 1 Using window: 0x08400004 The -e option expects a list of comma separated integers: "gravity,X,Y,width,height" 

Une fois que vous avez le numéro d’identification de la fenêtre active, vous pouvez répertorier toutes les fenêtres et rechercher ce numéro d’identification:

  wmctrl -l 

Il est difficile d’obtenir des informations sur la fenêtre active avec wmctrl, mais c’est possible.

xdotool est une alternative raisonnable ( projet github ici ), bien que malheureusement, l’auteur ne semble plus s’en soucier beaucoup .

Mon expérience avec la version 1.07 de wmctrl sous RH Linux 5.5 et 5.6 64 bits est que wmctrl est complètement perdu parfois. Par exemple, lorsque vous recherchez une fenêtre firefox, rien ne retourne:

 % wmctrl -lpGx | grep -i 'Firefox' 

Mon soupçon est que wmcntl ne peut pas trouver de fenêtres firefox en raison de la nature du gestionnaire de fenêtres, dans ce cas, de la métacité. Ce gestionnaire semble réparer les fenêtres et peut-être que wmctrl ne liste pas les fenêtres firefox. ‘xwininfo’ liste les fenêtres de Firefox.

Si vous avez access à xdotool (ma version est 2.20110530.1), vous pouvez essayer:

 % mywin=`xwininfo -root -tree | awk '/- Mozilla Firefox/ { printf $1; exit}'` % xdotool windowactivate --sync $mywin mousemove --window $mywin 0 0 

Cela rend Firefox actif, en fait la fenêtre supérieure de la stack sur votre bureau et place la souris dessus (comme cela est parfois nécessaire lorsque l’environnement d’un utilisateur met le focus sur une fenêtre sous la souris sans nécessiter de clic). Je veux que la souris bouge simplement en retirant ‘mousemove –window $ mywin 0 0’ de ce qui précède.

Note: J’ai eu le même problème pour trouver des fenêtres Konqueror sur les mêmes systèmes Linux.

identifiant de fenêtre

 wmctrl -a :ACTIVE: -v 2>&1 | grep "Using window: " | awk "{print \$3}" 

Vous pouvez vérifier xdo qui peut faire un travail décent avec un minimum de ressources.