Как может я, xprop или xwininfo Gnome - Делают?

Я должен видеть X свойств всплывающего окна Gnome - Do, в отношении этого вопроса, который я задал ранее. Проблема состоит в том, что, как только окно Gnome - Do теряет фокус, это закрывается, таким образом, я не могу изменить фокус на терминал для выполнения xprop. Ответ, который я продолжаю видеть в Интернете:

sleep 5; xprop

Затем откройте окно Gnome - Do и ожидайте xprop запускаться. Это кажется умным, но просто не работает:

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

То же идет для 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.

Я также попытался работать xprop использование Mod+R ярлык в Потрясающем WM, но в то время как окно Gnome - Do открыто, ярлык, не работает. Это просто вводит r в поле поиска.

У меня больше нет идей. Как я делаю это?

1
задан 13 April 2017 в 15:25

2 ответа

Если вы запустите приведенный ниже скрипт, он в течение 10 секунд (или в любое другое установленное время) записывает выходные данные команды xprop в самом переднем окне (при выполнении команды xprop -root). Впоследствии он записывает выходные данные по истечении времени в файл: outfile.txt
Если вы убедитесь, что окно Gnome-Do остается активным до завершения сценария, вы можете быть уверены, что последний запись соответствует окну Gnome-Do.

Чтобы использовать его

  • Просто скопируйте приведенный ниже скрипт в пустой файл, задайте в разделе заголовка желаемый путь к выходному файлу (outfile =, используйте абсолютный путь). Сохраните его как record_xprop.py
  • Запустите скрипт с помощью команды:

    python3 /path/to/record_xprop.py
    
  • Вызовите окно Gnome-Do (или любое другое приложение, которое вам нужно данные из).

  • По истечении времени ваш выходной файл будет в пять раз отображать выходные данные команды xprop -root, разделенные пунктирной линией.

Примечание

Если вам нужно больше времени, просто измените «5» в строке:

 while t < 5:

на любое другое значение, которое вам нужно

Сценарий

#!/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")

Редактировать

Если по какой-то причине это не работает (очевидно, что окно не является передним, как распознается xprop), мы могли бы сделать то же самое трюк с командой wmctrl -l (замените xprop -root на wmctrl -l в скрипте), чтобы сначала идентифицировать окно по его имени.
После этого мы можем запустить снова xprop, с опцией -name, чтобы получить необходимую информацию: xprop -name <windowname>

Для обеих команд вы можете запустить любую команду sleep, или, если вам нужно больше времени, снова запустите скрипт.

1
ответ дан 7 December 2019 в 14:02

Джейкоб получил это в комментариях!

Используя команду sleep 1; wmctrl -l, затем открыв Gnome-Do, я получил такой вывод:

0x00e000b9  0 bonus-debian Do

Который показывает имя гнома. -До окна. Тогда я мог бы использовать имя, чтобы идентифицировать окно для xprop:

sleep 1; xprop -name "Do"

, которое дало мне вывод, который я получил после:

$ 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"
1
ответ дан 7 December 2019 в 14:02

Другие вопросы по тегам:

Похожие вопросы: