Como executar um programa quando uma string específica é inserida em uma janela específica?

-1

Eu quero escrever um script de shell para automatizar capturas de tela usando o programa de captura de tela Shutter quando algumas palavras-chave são escritas em um determinado aplicativo, como uma sala de bate-papo na Internet ou serviço de mensagens de texto ou coisas do tipo.

Essencialmente, quando uma string específica é inserida, como "its a beautiful day", quero que meu script de shell capture essa frase específica (e não apenas a tela inteira em geral) e cole a captura de tela para uma pasta.

Como eu poderia escrever esse script, automatizá-lo e usar o Shutter no meu script?

    
por dabberson567 08.11.2017 / 01:22

1 resposta

1

Usando logkeys como um keylogger

Existem vários programas de keylogger disponíveis, eu uso logkeys dos repositórios aqui. Seus comandos básicos são:

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

Por padrão, logkeys registra o dispositivo de entrada padrão em /var/log/logkeys.log . O programa fornece opções para especificar, e. o dispositivo a ser logado, o caminho do arquivo de log e o mapa de teclado em uso, todos eles podem ser encontrados em man logkeys . Além disso, o o README do github fornece dicas úteis e ajuda na solução de problemas.

Monitorando logkeys output

Para monitorar o arquivo de saída dos keyloggers, inicio um shell com permissões de root e uso um simples while loop para constantemente grep para a palavra de segurança banana yt . Se a string for encontrada, echo sobrescreve o arquivo de log, efetivamente excluindo seu conteúdo para que grep não encontre a mesma string duas vezes. Depois disso, scrot tira uma captura de tela e a salva em, por exemplo. /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

É claro que o script também precisa ser iniciado com permissões de root. Você pode adicionar outros comandos dentro dos colchetes ou outros testes com grep linhas adicionais, por exemplo,

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

Testando se um programa específico tem o foco

Para executar apenas as teclas de log quando um programa específico tiver o foco, use xdotool para obter o nome da janela em foco com:

xdotool getactivewindow getwindowname

Colocando tudo junto

#!/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

Sugiro iniciar o script com, por exemplo, sudo bash /path/to/script "banana" '.*Kate' em uma janela de terminal que por si só não é monitorada, desta forma você pode terminá-la com segurança com Ctrl + C .

    
por dessert 08.11.2017 / 10:38