Эмуляция нажатия клавиш в скрипте

Языки программирования, IDE, компиляторы, интерпретаторы, гипервизоры и виртуальные среды
Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Версия ОС вместе с разрядностью. Пример: LM 18.1 x64, LM Sarah x32 2. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 3. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 4. Суть. Желательно с выводом консоли, логами. 5. Скрин. Просьба указывать 1, 2 и 3 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
mint
Сообщения: 37
Зарегистрирован: 20 фев 2017, 06:28
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Эмуляция нажатия клавиш в скрипте

Сообщение mint » 16 янв 2018, 18:47

Может кто то подскажет?
в общем нужно обновить окно вкладку nemo вне скрипта клавиши "ctrl+r" или "F5"
в скрипте пытаюсь так:

xdotool search --name "Домашняя папка" windowactivate key ctrl+r
окно nemo "Домашняя папка" вылазит на передний план но не обновляется

Аватара пользователя

Chocobo
Сообщения: 9070
Зарегистрирован: 27 авг 2016, 19:57
Решено: 197
Откуда: НН
Благодарил (а): 624 раза
Поблагодарили: 2580 раз

Эмуляция нажатия клавиш в скрипте

Сообщение Chocobo » 17 янв 2018, 05:34

mint,

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

app='Домашняя папка'
window_id=`wmctrl -l | grep "$app" | cut -d' ' -f1`
wmctrl -i -R $window_id && xdotool key F5
Изображение
   
Изображение

Аватара пользователя

Автор темы
mint
Сообщения: 37
Зарегистрирован: 20 фев 2017, 06:28
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Эмуляция нажатия клавиш в скрипте

Сообщение mint » 17 янв 2018, 14:13

1 раз сработало потом перестало, попробовал запустить с терминала такая ошибка

X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 20 (X_GetProperty)
Resource id in failed request: 0x7600003
Serial number of failed request: 16
Current serial number in output stream: 16
wmctrl: ключ должен использоваться с аргументом — «R»

Аватара пользователя

Автор темы
mint
Сообщения: 37
Зарегистрирован: 20 фев 2017, 06:28
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Эмуляция нажатия клавиш в скрипте

Сообщение mint » 18 янв 2018, 15:10

Chocobo,
обновляет не окно "Домашняя папка" а окно терминала из которого запущен скрипт появляется новая строка с символом "~"

Аватара пользователя

Dja
Сообщения: 5465
Зарегистрирован: 27 авг 2016, 17:03
Решено: 22
Откуда: Voskresensk
Благодарил (а): 760 раз
Поблагодарили: 590 раз

Эмуляция нажатия клавиш в скрипте

Сообщение Dja » 25 мар 2018, 22:25

mint, если нужно через время, то...
напишу свой вариант, пусть и кривой.
Итак, допустим, мы хотим обновлять окно ФМ каждую минуту.
При этом у нас есть папка скриптов.
~/.scripts
Теперь создадим скрипт

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

cd ~/.scripts
nano upnemo.sh
#!/bin/sh

xdotool key --window XXXXXXXXX "F5"
где, XXXXXXXXX - числовой идентификатор окна, который в свою очередь мы получаем из

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

xdotool getmouselocation --shell
$ хдемышь
X=1161
Y=473
SCREEN=0
WINDOW=92274689
Теперь нам осталось зациклить.

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

watch --interval=60 ~/.scripts/upnemo.sh
Делаем алиасы

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

alias хдемышь="xdotool getmouselocation --shell"
alias апнемо="watch --interval=60 ~/.scripts/upnemo.sh"
alias наноапнемо="nano ~/.scripts/upnemo.sh"
В итоге:
делаем раз: "хдемышь" - узнаем ID окна.
делаем два: "наноапнемо" - меняем ID окна, ставя нужный.
делаем три: "апнемо".
Цель достигнута.
Возможно кто напишет сценарий лучше.

Аватара пользователя

Автор темы
mint
Сообщения: 37
Зарегистрирован: 20 фев 2017, 06:28
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Эмуляция нажатия клавиш в скрипте

Сообщение mint » 26 мар 2018, 18:22

Dja, Попробовал ваш вариант, не работает
sleep 5 ; WIN=$(xdotool getmouselocation --shell | sed '/WINDOW/!d;s/^.*=//') ; xdotool key --window $WIN "F5"
У себя для теста использовал задержку в 5 секунд чтоб попробовать на разных окнах, id окна определяется, xdotool отрабатывает без ошибок, похоже он это вообще не умеет (передавать клавиши окнам) проверьте у себя пожалуйста

Аватара пользователя

Dja
Сообщения: 5465
Зарегистрирован: 27 авг 2016, 17:03
Решено: 22
Откуда: Voskresensk
Благодарил (а): 760 раз
Поблагодарили: 590 раз

Эмуляция нажатия клавиш в скрипте

Сообщение Dja » 26 мар 2018, 18:34

mint, у меня текст в HexChat, к примеру, передает. И ентером посылает. Уж обновлять окна не приходилось ))) Даже не знаю как проверить. Это ж надо чтоб какое-то изменение делалось. А так то смысл обновлять

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

xdotool type --window 111149059 "текст" && xdotool key --window 111149059 "Return"

Аватара пользователя

Автор темы
mint
Сообщения: 37
Зарегистрирован: 20 фев 2017, 06:28
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Эмуляция нажатия клавиш в скрипте

Сообщение mint » 26 мар 2018, 18:42

Dja, у меня скрипт вносит изменения и они видны только при обновлении окна клавишей F5

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

#!/bin/bash
DCLICK () {
xdg-open "$3/$4"
} 
export -f DCLICK

GUI () { 
for i in $(ls -1 "$1" | sed 's/ //g')
do  
       A=$(echo "$i" | sed 's// /g') 
       grep -wq "$A" "$1/.hidden" && echo -e "TRUE\nСкрыто\n$1"|| echo -e "FALSE\nВидимый\n$1"
       echo "$A"
done | yad --list --checklist --title='' --window-icon='imagemagick' --width=400 --height=400\
 --dclick-action='bash -c "DCLICK %s"' --tooltip-column=2 --no-rules-hint --print-all\
 --column='' --column='подсказка:HD' --column='Директория:HD' --column='Скрытые элементы обозначены галкой'
} 

REZ=$(GUI "$1") 

[ $? -ne 0 ] && exit # если нажата кнопка "Ok" то продолжаем скрипт

REZULTAT=$(echo "$REZ" | awk  -F "|" '/^TRUE/ {print $4}')

if [ -z "$REZULTAT" ] 
  then  rm "$1/.hidden" 
  else echo "$REZULTAT" > "$1/.hidden"
fi

Аватара пользователя

Автор темы
mint
Сообщения: 37
Зарегистрирован: 20 фев 2017, 06:28
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Эмуляция нажатия клавиш в скрипте

Сообщение mint » 26 мар 2018, 18:46

Вот так выглядит gui

Аватара пользователя

Автор темы
mint
Сообщения: 37
Зарегистрирован: 20 фев 2017, 06:28
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Эмуляция нажатия клавиш в скрипте

Сообщение mint » 26 мар 2018, 18:52

Вот файл Action

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

[Nemo Action]

Name=Скрыть объекты

Comment=Позволяет скрыть файлы директории без добавления точки перед именем, по прямому запросу объекты доступны

Exec=hidden.sh '%P'

Icon-Name=imagemagick

Selection=none

Extensions=any;

Conditions=dbus org.Cinnamon;

EscapeSpaces=false

Аватара пользователя

Dja
Сообщения: 5465
Зарегистрирован: 27 авг 2016, 17:03
Решено: 22
Откуда: Voskresensk
Благодарил (а): 760 раз
Поблагодарили: 590 раз

Эмуляция нажатия клавиш в скрипте

Сообщение Dja » 26 мар 2018, 19:10

mint,

Вернуться в «Программирование, скриптинг, виртуализация»