J'ai un jeu qui nécessite que je clique sur un objet en mouvement à plusieurs reprises, ce qui est extrêmement difficile si vous ne disposez que d'un pavé tactile sans boutons de souris séparés.
Ce que je veux, c'est un outil/script qui émule à plusieurs reprises un clic de souris (bouton gauche, environ 5 clics par seconde) lorsqu'un bouton ou une combinaison de clavier spécifique est maintenu enfoncé, par exemple. Control (right)+Menu.
Je sais que je peux émuler des clics répétés avec une commande telle que
xdotool click --repeat 10 --delay 200 1
mais je ne sais pas comment le faire cliquer lorsqu'une combinaison de clavier spécifique est maintenue enfoncée au lieu d'un nombre fixe de clics.
Voici mes première et cinquième tentatives. Le premier est correct si vous n'avez pas besoin de changer le délai. Il semble y avoir des problèmes avec certaines combinaisons de touches, mais il n’en est pas sûr.
Méthode 1, dans ~/.xbindkeysrc
:
keystate_scrolllock = enable
"xdotool click 1"
Scroll_Lock
Méthode 5:
keystate_scrolllock = enable
"/home/USER/infinite_clicks.sh event16 KEY_SCROLLLOCK 0.1 &"
Scroll_Lock
Avec infinite_clicks.sh
étant:
#!/bin/bash
kbd=$1 #"event16"
key=$2 #"KEY_SCROLLLOCK"
delay=$3 #"0.1"
fn=`basename "$0"`
if [ $# -le 1 ]; then
echo "Usage: $fn input_device key_name delay"
echo "Example: $fn event16 KEY_SCROLLLOCK 0.1"
echo "Must run as superuser."
exit 1
fi
# do not start if already started
if [[ $(pidof -o %PPID -x $fn) ]]; then
exit 0
fi
while true; do
# this is why you need to use Sudo/superuser
evtest --query /dev/input/$kbd EV_KEY $key
# get evtest return code, if it's 0 the key is up
if [[ "$?" -eq "0" ]]; then
break
fi
xdotool click 1 &
sleep "$delay"
done
exit 0
Avec ce code, vous devez également exécuter xbindkeys en tant que Sudo xbindkeys -f ~/.xbindkeysrc
Vous pouvez trouver votre numéro d’événement au clavier en utilisant Sudo evtest
, puis les noms de touches en utilisant Sudo evtest /dev/input/eventXXX
en utilisant le numéro d’événement.