我想编写一个 shell 脚本,当在某个应用程序(例如互联网聊天室或短信服务或类似的东西)中输入某些关键词时,使用截图程序 Shutter 自动截图。
本质上,当输入特定字符串时,例如“这是一个美好的一天”,我希望我的 shell 脚本能够截取该特定短语的屏幕截图(而不仅仅是整个屏幕),然后将屏幕截图粘贴到文件夹中。
我该如何编写此脚本、使其自动化并在脚本中使用 Shutter?
答案1
用作logkeys
键盘记录器
有几种可用的键盘记录程序,我使用的logkeys
是此处存储库中的程序。其基本命令是:
sudo logkeys -s # start logging
sudo logkeys -k # stop logging
默认情况下,logkeys
将默认输入设备记录到/var/log/logkeys.log
。该程序提供选项来指定要记录的设备、日志文件路径和正在使用的键盘映射,所有这些都可以在man logkeys
。 此外github 自述文件提供有用的提示和故障排除帮助。
监控logkeys
输出
为了监视键盘记录器的输出文件,我以 root 权限启动 shell,并使用一个简单的while
循环来不断grep
输入安全词banana
yt。如果找到该字符串,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
当然,脚本也需要以 root 权限启动。您可以在括号内添加更多命令,或者使用附加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。