¿Por qué wmctrl no funciona para ciertas ventanas?

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 

Para ventanas que tienen la columna de nombre de máquina como N/A no puedo enviar comandos wmctrl -r "window name" -b add,above como wmctrl -r "window name" -b add,above . ¿Por qué? (Además, no sé por qué estas ventanas son diferentes con respecto a la columna de nombre de la máquina …)

Mi intención inicial era enviar dicho comando a la ventana de backlight , una aplicación Qt sin marco. Sin embargo, el uso del menú del sistema de ventanas y la comprobación de “Siempre visible” funcionan para la ventana. Simplemente me gusta un medio programático de hacer lo mismo.

Definitivamente es un error en wmctrl .
después de excavar alrededor del código wmctrl, parece que el error está en traducir las cadenas de nombre de la ventana al ID de la ventana correspondiente (o XID). así que wmctrl -r "window name" -b add,above no es confiable.

como solución alternativa, use XID en su lugar, es decir, wmctrl -i -r window_id -b add,above . en su caso, wmctrl -i -r 0x0520000b -b add,above debería funcionar.

la mayoría de las herramientas de administración de ventanas se implementan como X propiedades de ventana. puede ver todas las propiedades de una ventana con un comando -- xprop .

NOTA:

  1. Windows que tiene la columna de nombre de máquina como N / A. la propiedad del nombre de la máquina es WM_CLIENT_MACHINE . rara vez se utiliza. y algunos kits de herramientas de GUI pueden no implementarlos.
    puede ver la propiedad de nombre de máquina de una ventana ejecutando la siguiente línea de comando y haciendo clic en la ventana

     shell> xprop | grep MACHINE 
  2. En cuanto a Always On Top, es otro valor de propiedad _NET_WM_STATE_ABOVE .
    para comprobarlo usted mismo, ejecute la siguiente línea de comando y haga clic en la ventana

     shell> xprop | grep _NET_WM_STATE