Как на самом деле послать окну сообщение автоматически? (xdotool)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение жучара »

Друзья! Есть терминал, его хэндл 0x6664b6
user@debian:~$ xwininfo

xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.

xwininfo: Window id: 0x6664b6 "user@debian: ~"

Absolute upper-left X: 4
Absolute upper-left Y: 528
Relative upper-left X: 14
Relative upper-left Y: 40
Width: 896
Height: 280
Depth: 32
Visual: 0x6a3
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x600005 (not installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +4+528 -380+528 -380-216 +4-216
-geometry 110x14+-10+488

user@debian:~$
Из другого терминала посылаем ему сообщение:

Shell

$ xdotool key --window 0x6664b6 KP_Enter
$
ноль эмоций. Сказать, что xdotool вообще не работает не могу, ибо активным я его всё-таки нужное окно могу сделать:

Shell

$ xdotool windowactivate 0x6664b6
$
-------------------------------------------------------

В скрипте тоже это дело не работает:

Код: Выделить всё

#!/bin/bash
xdotool windowactivate 0x6664b6
sleep 10
xdotool key --window 0x6664b6 KP_Enter
Ну то есть нужное окно активируется, 10 секунд ждём, деактивируется. Всё. Ни тебе интер, ни пол интер. Ну и без строчки xdotool windowactivate 0x6664b6 (в скрипте), понятное дело, тоже не работает. ЧЯДНТ? Спасибо, кто откликнется. Debian 12.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение olecya »

Код: Выделить всё

xdotool click --window 0x6664b6 KP_Enter
Можно получать id окна еще самим инструментом xdotool только в десятеричной системе исчисления:

Shell

xdotool getwindowfocus
6710454
Проверим идентичность значений в разных исчислениях:

Shell

echo $((16#6664b6))
6710454

Код: Выделить всё

xdotool click --window 6710454 KP_Enter
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение жучара »

olecya писала:
04.02.2024 19:56
xdotool click --window 0x6664b6 KP_Enter
нет. Он делает то окно активным (это, кстати, не входит в мои планы). Но никакого интера.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5268
ОС: Gentoo

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение /dev/random »

жучара писал(а):
04.02.2024 19:32
xdotool key --window 0x6664b6 KP_Enter
xdotool плохо работает с клавишами цифрового блока. Лучше использовать просто Enter, а не KP_Enter. Если же нужен именно KP_Enter (Enter из цифрового блока), попробуйте Num_Lock+KP_Enter.
Последний раз редактировалось /dev/random 04.02.2024 20:34, всего редактировалось 1 раз.
Причина: s/NumLock/Num_Lock/
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение жучара »

/dev/random писал:
04.02.2024 20:23
жучара писал(а):
04.02.2024 19:32
xdotool key --window 0x6664b6 KP_Enter
xdotool плохо работает с клавишами цифрового блока. Лучше использовать просто Enter, а не KP_Enter. Если же нужен именно KP_Enter (Enter из цифрового блока), попробуйте NumLock+KP_Enter.
чё-то всё без толку пока как-то, он слов даже таких не знает

Shell

$ xdotool key --window 0x6664b6 Enter
(symbol) No such key name 'Enter'. Ignoring it.
(symbol) No such key name 'Enter'. Ignoring it.
$
$
$ xdotool key --window 0x6664b6 NumLock+KP_Enter
(symbol) No such key name 'NumLock'. Ignoring it.
(symbol) No such key name 'NumLock'. Ignoring it.
$
А Num_Lock знает но тоже без толку

Shell

$ xdotool key --window 0x6664b6 Num_Lock+KP_Enter
$
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение olecya »

У меня в федоре работает так:
В первом терминале набираю команду:
echo hi
Во втором терминале ввожу две команды:
xdotool windowactivate 44050563 && xdotool key KP_Enter
И в первом срабатывает Enter и выводится
hi
Так же работает и с NumLock+KP_Enter
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5268
ОС: Gentoo

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение /dev/random »

жучара писал(а):
04.02.2024 20:37
чё-то всё без толку пока как-то, он слов даже таких не знает
Странно, что он у вас Enter не знает. У меня знает. Попробуйте Return, может, поймёт?
жучара писал(а):
04.02.2024 20:37
$ xdotool key --window 0x6664b6 Num_Lock+KP_Enter
$
Попробуйте не в своё окно, а в чужое, как в предыдущих сообщениях. Или поставить "sleep 1;" перед командой. Не пересекайте реальный ввод и фиктивный.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение olecya »

Вот так получилось выполнить одной командой:

Код: Выделить всё

xdotool click --window 44050563 1 key KP_Enter

Код: Выделить всё

xdotool windowactivate 44050563 key KP_Enter
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение жучара »

/dev/random писал:
04.02.2024 20:44
жучара писал(а):
04.02.2024 20:37
чё-то всё без толку пока как-то, он слов даже таких не знает
Странно, что он у вас Enter не знает. У меня знает. Попробуйте Return, может, поймёт?
жучара писал(а):
04.02.2024 20:37
xdotool key --window 0x6664b6 Num_Lock+KP_Enter
Попробуйте не в своё окно, а в чужое, как в предыдущих сообщениях. Или поставить "sleep 1;" перед командой. Не пересекайте реальный ввод и фиктивный.

Shell

$ xdotool key --window 0x679958 Return
$
бесполезно. Причём, что интересно, ему Return знакомо, он на неё не ругается, но не реагирует. И да, вообще непонятно какие у клавиш имена. Из мана:
Type a given keystroke. Examples being "alt+r", "Control_L+J", "ctrl+alt+n", "BackSpace".

Generally, any valid X Keysym string will work. Multiple keys are separated by '+'. Aliases exist for
"alt", "ctrl", "shift", "super", and "meta" which all map to Foo_L, such as Alt_L and Control_L, etc.

In cases where your keyboard doesn't actually have the key you want to type, xdotool will automatically
find an unused keycode and use that to type the key.
последний абзац вообще напряг. Он как сам будет всё делать?
---------------------------------------------------------------------------------------------------
olecya писала:
04.02.2024 20:51
Вот так получилось выполнить одной командой:

Код: Выделить всё

xdotool click --window 44050563 1 key KP_Enter
это хорошо. Плохо, что его нужно делать активным. Вот так, допустим, можно возвращать фокус на начальное окно:

Shell

$temp=$(xdotool getwindowfocus) && xdotool click --window 0x679958 1 key KP_Enter && xdotool click --window $temp 1
$
Вставлять sleep при необходимости.
Я немножко обескуражен, неужели нельзя послать окну сообщение не делая его активным? Я не помню, как в винде, раньше занимался. И там да, сообщения действительно посылаешь программно, с помощью API-функций.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение olecya »

Вот так можно вернуть на начальное окно:

Код: Выделить всё

xdotool windowactivate 44060485 key KP_Enter windowactivate $(xdotool getwindowfocus)
Сперва выполнится команда в $(...) а значит оболочка подставит id именно этого окна.
Добавлено (21:46):
Вот такой вариант работает лучше:

Код: Выделить всё

xdotool click --window 44060485 1 key KP_Enter windowactivate $(xdotool getwindowfocus)
Добавлено (21:50):
А вот так без лишних движений можно задержку организовать:

Код: Выделить всё

xdotool click --window 44060485 --delay 1000 1 key KP_Enter windowactivate $(xdotool getwindowfocus)
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

Re: Как на самом деле послать окну сообщение автоматически? (xdotool)

Сообщение жучара »

olecya
тут ещё такой момент. В скрипте вот это вот не хотело работать ни за что:
xdotool windowactivate $HWND_activnoeokno && xdotool key --window $HWND_activnoeokno KP_Enter

а это заработало.
xdotool windowactivate $HWND_activnoeokno && xdotool key KP_Enter

То есть суть в чём. В первом случае мы делам окно активным и ЕГО ЖЕ И УКАЗЫВАЕМ, куда отправить сообщение. Считается за ошибку, что ли. Типа если окно активно, куда же ещё будут отправляться соединения как не ему? Без дополнительного указания окна (второй вариант) работает.

...Зачем же тогда опция --window тайна сия, покрытая мраком.
Я просто читаю маны.
Спасибо сказали: