Como posso xprop ou xwininfo Gnome-Do?

1

Eu preciso ver as propriedades X da janela pop-up Gnome-Do, em relação a esta pergunta que eu perguntei mais cedo. O problema é que, assim que a janela do Gnome-Do perde o foco, ela se fecha, por isso não posso mudar o foco para o terminal para executar xprop . A resposta que eu continuo vendo na internet é:

sleep 5; xprop

Em seguida, abra a janela do Gnome-Do e aguarde que xprop seja iniciado. Parece inteligente, mas simplesmente não funciona:

$ sleep 5; xprop
xprop: error: Can't grab the mouse.

O mesmo vale para xwininfo :

$ sleep 5; xwininfo 

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.
xwininfo: error: Can't grab the mouse.

Eu também tentei executar xprop usando o atalho Mod+R no Awesome WM, mas enquanto a janela do Gnome-Do está aberta, o atalho não funciona. Apenas digita um r na caixa de pesquisa.

Não tenho mais ideias. Como faço isso?

    
por Hubro 27.01.2015 / 22:31

2 respostas

1

Se você executar o script abaixo, ele registrará por 10 segundos (ou qualquer outro horário definido) a saída do comando xprop na janela frontal (executando o comando xprop -root ). Posteriormente, grava a saída, após o tempo decorrido, em um arquivo: outfile.txt
Se você tiver certeza de manter a janela Gnome-Do ativa até que o script termine, você pode ter certeza que o último registro está correspondendo à janela Gnome-Do .

Para usá-lo

  • Simplesmente copie o script abaixo em um arquivo vazio, defina, na seção head, o caminho desejado para o arquivo de saída ( outfile = , use um caminho absoluto ). Salve como record_xprop.py
  • Inicie o script pelo comando:

    python3 /path/to/record_xprop.py
    
  • Chame sua janela Gnome-Do (ou qualquer outro aplicativo de que você precise de dados).

  • Após o tempo decorrido, o arquivo de saída mostrará cinco vezes a saída do comando xprop -root , separado por uma linha pontilhada.

Nota

Se você precisar de mais tempo, basta alterar o "5" na linha:

 while t < 5:

em qualquer outro valor que você precise

O script

#!/usr/bin/env python3
import subprocess
import time

outfile = "/home/jacob/Bureaublad/outfile.txt"
data = []; t = 0
while t < 5:
    data.append(subprocess.check_output(["/bin/bash", "-c", "xprop -root"]).decode("utf-8"))
    time.sleep(2)
    t = t + 1
with open(outfile, "wt") as out:
    for rec in data:
        out.write(rec+"\n"+"-"*20+"\n\n")

Editar

Se isso não funcionar por algum motivo (aparentemente a janela não está à frente, como reconhecido por xprop ), poderíamos fazer o mesmo com o comando wmctrl -l (substituir xprop -root por wmctrl -l no script), para identificar primeiro a janela pelo nome.
Feito isso, podemos executar novamente xprop , com a opção -name , para obter as informações necessárias: xprop -name <windowname>

Para ambos os comandos, você pode executar o comando sleep ou, se precisar de mais tempo, executar o script novamente.

    
por Jacob Vlijm 27.01.2015 / 23:02
0

Jacob entendeu nos comentários!

Usando o comando sleep 1; wmctrl -l , abrindo o Gnome-Do, recebi esta saída:

0x00e000b9  0 bonus-debian Do

Que mostra o nome da janela do Gnome-Do. Então eu poderia usar o nome para identificar a janela para xprop:

sleep 1; xprop -name "Do"

Que me deu a saída que eu procurava:

$ sleep 1; xprop -name "Do"
WM_STATE(WM_STATE):
        window state: Withdrawn
        icon window: 0x0
GDK_TIMESTAMP_PROP(GDK_TIMESTAMP_PROP) = 0x61
_NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 14680093
_XEMBED_INFO(_XEMBED_INFO) = 0x1, 0x1
_NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0xe00004
WM_CLIENT_LEADER(WINDOW): window id # 0xe00001
_NET_WM_PID(CARDINAL) = 6708
WM_LOCALE_NAME(STRING) = "en_US.UTF-8"
WM_CLIENT_MACHINE(STRING) = "bonus-debian"
WM_NORMAL_HINTS(WM_SIZE_HINTS):
        program specified minimum size: 19 by 19
        window gravity: NorthWest
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST
WM_CLASS(STRING) = "Do", "Do"
WM_ICON_NAME(STRING) = "Do"
_NET_WM_ICON_NAME(UTF8_STRING) = "Do"
WM_NAME(STRING) = "Do"
_NET_WM_NAME(UTF8_STRING) = "Do"
    
por Hubro 27.01.2015 / 23:50