Enviar evento no pressionamento de tecla global - ter um ouvinte no terminal reagir e executar outro programa?

0

Ok, este é o meu problema: eu tenho um aplicativo que eu quero screenshot; mas como gnome-screenshot e mate-screenshot escondem as barras de ferramentas ou qualquer outra coisa toda vez que pegam uma captura de tela quando são iniciadas na janela do applet interativo, elas atrapalham a janela do aplicativo que estou fazendo screenshots, que então trava. A única coisa que posso fazer é iniciar a captura de tela do gnome diretamente com um nome de arquivo e um atraso, o que torna esse processo bastante entediante.

Então, isso é o que eu estou pensando em fazer - eu posso configurar um ouvinte de keypress global via System / Keyboard Shortcuts ":

Issopoderiaacionaralgumprograma,queenviaalgumtipode"sinal" global se você desejar (possivelmente um pacote TCP / IP ou algo assim).

Então, eu poderia ter um script "ouvinte" em um terminal aberto, que reage ao sinal (em certo sentido, netcat poderia ser configurado como um servidor de escuta, reagindo a um dado TCP / IP recebido e em seguida, filtre a reação via grep ou algo assim) e, em resposta, execute gnome-screenshot -d 10 -f ~/Desktop/test.png . Como um exemplo simples com o netcat:

nc -l -p 1234 | while read l; do \
  if [ "$l" == "d" ]; then \
    echo "GOT IT"; \
  else \
    echo $l; \
  fi; \
done

A questão é - existem aplicativos que eu poderia usar para enviar este evento globalmente e ouvir e filtrar para ele em um terminal? Gostaria de saber se há algo assim evitando a rede, antes de tentar desenvolver minha própria solução de script baseada em netcat ...

    
por sdaau 31.03.2016 / 11:30

1 resposta

0

Ok, fizemos isso com netcat , mas esperamos que alguém publique uma solução melhor:

#!/usr/bin/env bash

# let the signal be the letter "d"
# set up a netcat listener, and run gnome-screenshot without prompt on incoming signal

# in System/Keyboard shortcuts:
# Name: trignetshot
# Cmd: bash -c "echo d | nc localhost 1234"
# Shortcut: whatever...

# then run this script in a terminal - and then press the shortcut key

while [ 1 ]; do # else it exits at each received line with TCP
  echo "Starting listener...";
  nc -l -p 1234 | while read l; do
    if [ "$l" == "d" ]; then
      echo "GOT IT";
      # calculate screenshot name
      maxnum=0;
      for ix in ~/Desktop/Screenshot*.png; do
        tnum=$(echo $ix | egrep -o '[[:digit:]]*');
        #echo $tnum ;
        if [ -z "$tnum" ]; then
          tnum=0;
        fi;
        if (($tnum>$maxnum)); then
          maxnum=$tnum;
        fi;
      done;
      #echo $maxnum # have it here
      newnum=$((maxnum+1))
      set -x
      gnome-screenshot -d 1 -f ~/Desktop/Screenshot-${newnum}.png
      set +x
    fi;
  done;
done
    
por sdaau 31.03.2016 / 11:59