Я хочу написать сценарий оболочки для автоматизации снимков экрана с помощью программы создания снимков экрана, когда некоторые ключевые слова написаны в определенном приложении, таком как интернет-чат или служба обмена текстовыми сообщениями, или тому подобное.
По сути, когда вводится определенная строка, например «это прекрасный день», я хочу, чтобы мой сценарий оболочки мог сделать снимок этой конкретной фразы (а не только весь экран в целом), а затем вставить снимок экрана в папку.
Как мне написать сценарий, автоматизировать его и использовать Shutter в моем сценарии?
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
уг SUP>. Если строка найдена, 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 kbd> + C kbd>.