Как выполнить программу, когда определенная строка введена в определенном окне?

Я хочу написать сценарий оболочки для автоматизации снимков экрана с помощью программы создания снимков экрана, когда некоторые ключевые слова написаны в определенном приложении, таком как интернет-чат или служба обмена текстовыми сообщениями, или тому подобное.

По сути, когда вводится определенная строка, например «это прекрасный день», я хочу, чтобы мой сценарий оболочки мог сделать снимок этой конкретной фразы (а не только весь экран в целом), а затем вставить снимок экрана в папку.

Как мне написать сценарий, автоматизировать его и использовать Shutter в моем сценарии?

-1
задан 8 November 2017 в 21:12

1 ответ

Использование logkeys в качестве кейлоггера

Доступно несколько программ кейлоггера, я использую logkeys из репозиториев здесь. Основные команды:

sudo logkeys -s # start logging
sudo logkeys -k # stop logging

По умолчанию logkeys регистрирует устройство ввода по умолчанию на /var/log/logkeys.log. Программа предоставляет опции для указания, например, регистрируемое устройство, путь к файлу журнала и используемая раскладка ключей - все они можно найти в man logkeys . Дополнительно github README предоставляет полезные советы и помощь в устранении неполадок.

Мониторинг вывода logkeys

Для отслеживания выходного файла клавиатурных шпионов я запускаю оболочку с правами root и использую простой цикл while для постоянного grep для слова безопасности banana уг . Если строка найдена, echo перезаписывает файл журнала, эффективно удаляя его содержимое, так что grep не может найти одну и ту же строку дважды. После этого scrot делает снимок экрана и сохраняет его, например, в. /home/user/2017-11-08_10:00:00_screenshot.png.

while :; do
  grep -q banana /var/log/logkeys.log &&
  (
    echo >/var/log/logkeys.log
    scrot "/home/user/$(date +%F_%T)_screenshot.png"
  )
done

Конечно, скрипт также должен запускаться с правами суперпользователя. Вы можете добавить дополнительные команды в скобках или другие тесты с дополнительными grep строками, например

grep -q apple /var/log/logkeys.log && echo "I found an apple!"

Проверка того, имеет ли конкретная программа фокус

Чтобы запускать logkeys, только когда конкретная программа имеет фокус, я использовал бы xdotool, чтобы получить имя окна с фокусом:

xdotool getactivewindow getwindowname

Собираем все вместе

#!/ind/bash

# The script takes two arguments, the first being the keyword which triggers 
# the below commands and the second being the name of the window to monitor, 
# with support of extended regular expressions.
# Example call: sudo bash /path/to/script "banana" '.*Kate'

sleep_time="1" # sleep time between tests for focused window in seconds
logfile="/var/log/logkeys.log" # path to the keylogger's logfile
logkeys_options="-o $logfile" # options for logkeys
commands(){ # command(s) to run
  scrot "/home/user/$(date +%F_%T)_screenshot.png"
}

while :; do
  # test if a window with the given name is focused
  if [[ "$(xdotool getactivewindow getwindowname)" =~ $2 ]]; then
    # start logkeys if not running
    [ -e /var/run/logkeys.pid ] || logkeys -s $logkeys_options
    # search logfile for given keyword
    grep -q "$1" "$logfile" && ( echo >"$logfile"; commands )
  else
    # stop logkeys if running
    [ -e /var/run/logkeys.pid ] && logkeys -k
  fi
  # sleep for $sleep_time seconds before testing again
  sleep $sleep_time
done

Я предлагаю начать сценарий с, например, sudo bash /path/to/script "banana" '.*Kate' в окне терминала, которое само не отслеживается, таким образом вы можете безопасно завершить его с помощью Ctrl + C .

1
ответ дан 8 November 2017 в 21:12

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

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