web-dev-qa-db-fra.com

Pourquoi wmctrl ne fonctionne pas pour certaines fenêtres?

francisco@Ubuntu:~$ wmctrl -l
0x02600006  0 Ubuntu Área de trabalho
0x03c00002  0 Ubuntu XdndCollectionWindowImp
0x03c00005  0 Ubuntu unity-launcher
0x03c00008  0 Ubuntu unity-panel
0x03c0000b  0 Ubuntu unity-dash
0x03c0000c  0 Ubuntu Hud
0x046000b3  0 Ubuntu How to make a window aways on top? - Stack Overflow - Mozilla Firefox
0x0520000b  0    N/A Qt Creator
0x05002396  0 Ubuntu francisco@Ubuntu: ~
0x0540000b  0    N/A backlight

Pour les fenêtres dont la colonne du nom d'ordinateur est N/A, je ne parviens pas à envoyer de commandes wmctrl telles que wmctrl -r "window name" -b add,above. Pourquoi? (aussi, je ne sais pas pourquoi ces fenêtres sont différentes en ce qui concerne la colonne du nom de la machine ...)

Mon intention initiale était d'envoyer une telle commande à la fenêtre backlight, une application Qt sans cadre. Utiliser le menu système de la fenêtre et cocher la case "Toujours visible" fonctionne pour la fenêtre. J'aime juste un moyen programmatique de faire la même chose.

2
pepper_chico

c'est certainement un bug dans wmctrl.
Après avoir fouillé dans le code wmctrl, il semble que le bogue concerne la traduction des chaînes de noms de fenêtres en identificateurs de fenêtres (ou XID) correspondants. alors wmctrl -r "window name" -b add,above n'est pas fiable.

comme solution de contournement, utilisez XID à la place, c'est-à-dire wmctrl -i -r window_id -b add,above. dans votre cas, wmctrl -i -r 0x0520000b -b add,above devrait fonctionner.

la plupart des fonctionnalités de gestion de fenêtres sont implémentées en tant que propriétés de X window. vous pouvez afficher toutes les propriétés d'une fenêtre à l'aide de la commande -- xprop.

NOTE:

  1. Windows dont le nom de la colonne est N/A. la propriété du nom d'ordinateur est WM_CLIENT_MACHINE. c'est rarement utilisé. et certaines boîtes à outils d'interface graphique peuvent ne pas les implémenter.
    vous pouvez afficher la propriété du nom d’ordinateur d’une fenêtre en exécutant la ligne de commande suivante et en cliquant sur la fenêtre

    Shell> xprop | grep MACHINE
    
  2. En ce qui concerne Always On Top, il s'agit d'une autre valeur de propriété _NET_WM_STATE_ABOVE.
    pour le vérifier vous-même, exécutez la ligne de commande suivante et cliquez sur la fenêtre

    Shell> xprop | grep _NET_WM_STATE
    
6
sgx1