Как получить идентификатор окна из стека окон xdotool

12

Мне нужен идентификатор окна, которое активно или сосредоточено. Я пытаюсь использовать xdotoolкоманду. Есть команда:

xdotool getactivewindow

результат сохраняется в стеке окон. Я хочу получить idnow id из этого стека окон. команда

xdotool getactivewindow getwindowpid

не удовлетворяет меня. Я не хочу получать идентификатор окна по идентификатору процесса.

Мариуш
источник

Ответы:

11

Я думаю xdotool getactivewindow, что ты хочешь - ты попробовал это?

Он печатает идентификатор окна (из стека окон), если в командной строке больше нет подкоманд xdotool.

В xdotool getactivewindow getwindowpid, например, getactivewindowпомещает идентификатор в стеке окна, и getwindowpidиспользует этот идентификатор для запроса PID. Обратите внимание, что выполнение этой команды в терминале всегда возвращает идентификатор окна терминала, потому что оно активно. Чтобы получить идентификатор из другого окна, попробуйте sleep 2s && xdotool getactivewindowвыбрать интересующее окно в промежутке времени в две секунды.


Существует сложность при использовании xdotoolс другими инструментами для обработки окон:

В то время как xdotoolвыходные данные используют десятичные числа для идентификаторов ветра, большинство других инструментов используют шестнадцатеричные числа для вывода (обычно они поддерживают оба для ввода).

Например, если вы найдете окно с xdotool getactivewindow, вы не найдете результат в выводе xwininfo -root -tree, который перечисляет все окна. Сначала его нужно преобразовать в шестнадцатеричное число:

$ xdotool getactivewindow                              
69206716
$ printf 0x%x 69206716                  
0x42002bc
$ xwininfo -root -tree | grep 0x42002bc
           0x42002bc (has no name): ("konsole" "Konsole")  1154x781+0+0  +1289+498


Преобразование десятичного числа в шестнадцатеричное:

printf 0x%x 69206716

Преобразование шестнадцатеричного в десятичное:

printf %i 0x42002bc
Volker Siegel
источник
Я пробовал xdotool getactivewindowкоманду и проблема в том, что она не печатает результат в терминале. Сохраняет результат в стеке окон. Эта команда печатает некоторое число, но это не идентификатор окна (например, 35651588)
Mariusz
Как вы думаете, почему 35651588 не идентификатор окна?
Фолькер Сигел
Да, я думаю, что 35651588 не идентификатор окна. Вы можете увидеть идентификатор Windows с помощью команды xwininfo, например, xwininfo -root -tree- эта команда печатает все окна и окна имеют другие типы нумерации.
Мариуш
1
xwininfoпоказывает идентификатор окна в виде шестнадцатеричных чисел, а xdotool показывает десятичные числа, но это точно так же.
Фолькер Сигел
вы правы. 35651588 = 0x2200004. xwininfo -root -tree | grep 2200004 0x2200004 "user@host:~": ("gnome-terminal" "Gnome-terminal") 1680x974+0+26 +0+51
Мариуш
1

У меня эта команда работает

xdotool key --window "$(xdotool getactivewindow)" F5

xdotool версия 3.20160805.1

Ахмед Хабиба
источник
xdotool getactivewindow key F5должен
выдать