![Как сделать автоматический кликер с глобальными клавишами запуска и остановки](https://rvso.com/image/111969/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%20%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9%20%D0%BA%D0%BB%D0%B8%D0%BA%D0%B5%D1%80%20%D1%81%20%D0%B3%D0%BB%D0%BE%D0%B1%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%BC%D0%B8%20%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D1%88%D0%B0%D0%BC%D0%B8%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0%20%D0%B8%20%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8.png)
Итак, у меня есть скрипт автоматического кликера, представляющий собой простую команду:Дань уважения
xdotool click --delay 5 --repeat 900000 1
Мне приходится переключаться на терминал и Ctrl-C
прерывать скрипт, чтобы остановить его. Затем просто запускать его снова, чтобы перезапустить.
Поэтому я начал использовать read
команду для проверки ввода клавиш, чтобы избежать этого переключения туда-сюда. Однако это проверяет только ввод на терминале. Я нажимаю где-то еще и хочу иметь возможность начать и остановить оттуда.
Есть ли версия, read
которая может проверять нажатия клавиш глобально?
решение1
Набрав xinput --list
, вы получите список всех устройств ввода в вашей системе. Вы также можете программно получить состояние каждой клавиши, используя xinput --query-state DEVICE_ID
.
1 class :
KeyClass
key[0]=up
key[1]=up
key[2]=up
...
Сначала вам нужно будет выяснить, какой код клавиши вы хотите использовать. Вы можете сделать это, запустив xinput --test DEVICE_ID
, и нажав клавишу.
key press ###
key release ###
Как только вы найдете правильный ключ, создайте такой скрипт.
#!/bin/bash
while true; do
# Replace DEVICE_ID and KEYCODE.
inp=`xinput --query-state DEVICE_ID | grep -o 'button\[KEYCODE\]=down'`
if [ ! -z "$inp" ]; then
xdotool click 1
fi
done
Это будет спамить нажатием кнопки мыши, пока пользователь удерживает кнопку.
решение2
Вы можете использовать другое расширение - numlockx
Идея вот в чем.
вам нужно установить xdotools и numlockx черезsudo apt-get install -y numlockx xdotool
тогда вы бы пошли дальше и использовали что-то вроде этого.
DELAY=5
while true
do
NUMLOCK=$(numlockx status)
if [ "$NUMLOCK" == "Numlock is on" ]
then
xdotool click 1
fi
sleep $DELAY
done
В результате получается глобальный кликер с 5-секундной задержкой, связанной с вашей клавишей NumLock. Вы можете изменить задержку, чтобы клик срабатывал с более короткими интервалами.