Por que o wmctrl não funciona em certas janelas?

2
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 as janelas que têm a coluna do nome da máquina como N/A , não consigo enviar wmctrl comandos como wmctrl -r "window name" -b add,above . Por quê? (também, não sei por que essas janelas são diferentes em relação à coluna do nome da máquina ...)

Minha intenção inicial era enviar tal comando para a janela backlight , um aplicativo Qt sem moldura. Usando o menu do sistema de janela e verificando o "Always On Top" funciona para a janela embora. Eu apenas gosto de um meio programático de fazer o mesmo.

    
por pepper_chico 24.12.2013 / 02:58

1 resposta

6

é definitivamente um bug em wmctrl .
depois de cavar em torno do código wmctrl, parece que o erro está na tradução de strings de nome de janela para o ID de janela correspondente (ou XID). então wmctrl -r "window name" -b add,above não é confiável.

como solução alternativa, use XID, ou seja, wmctrl -i -r window_id -b add,above . no seu caso, wmctrl -i -r 0x0520000b -b add,above deve funcionar.

a maioria dos recursos de gerenciamento de janela é implementada como propriedades da janela X. você pode ver todas as propriedades de uma janela por um comando -- xprop .

NOTA:

  1. Janelas que têm a coluna do nome da máquina como N / A. a propriedade do nome da máquina é WM_CLIENT_MACHINE . é raramente usado. e alguns toolkits da GUI podem não implementá-los.
    você pode ver a propriedade do nome da máquina de uma janela pela seguinte linha de comando e clicar na janela

    shell> xprop | grep MACHINE
    
  2. Quanto a Always On Top, é outro valor de propriedade _NET_WM_STATE_ABOVE .
    para verificar você mesmo execute a seguinte linha de comando e clique na janela

    shell> xprop | grep _NET_WM_STATE
    
por sgx1 25.12.2013 / 07:04