Mam sobie bardzo prosty skrypt który działa na zasadzie spamowania lewym przyciskiem myszy przez xdotool kiedy przycisk 12 na myszce jest trzymany, a kiedy przycisk 12 zostanie zwolniony skrypt się wyłącza. Działa perfekcyjnie kiedy odpalę go w terminalu.
Problem jest taki że nie mam pojęcia jak wywołać ten skrypt kiedy wcisnę przycisk 12 na myszce.
xbindkeys jednocześnie działa i nie działa - Widzę że skrypt odpalił i w logu xbindkeys lewy przycisk myszy spamuje jak popieprzony ale kliknięcia nie są zarejestrowane przez system, zero reakcji. Ktoś ma pomysł na to jak to zrobić? Dodam że podobny program, sxhkd działa tak samo.
@3zet to mi się spodobało najbardziej ( ͡° ͜ʖ ͡°) --> jednocześnie działa i nie działa - LINUX ( ͡° ͜ʖ ͡°)
@gawafe1241 Najgorsze jest to że na windowsie użyłbym softu logitecha do zrobienia makra i bajlando.
@3zet Najpewniej wiąże się to z tym, że odpalasz clicker, ale go nie ubijasz. I masz kilka instancji, które się wzajemnie blokują poniżej progu wyzwolenia kliku.
@ataxbras właśnie o to chodzi że nie, xbindkeys wywołuje skrypt tylko kiedy przycisk 12 jest wciśnięty i przerywa pętlę (kończy skrypt i ubija proces) kiedy przycisk jest odpuszczony. mimo to kliknięcia nie są rejestrowane przez system.
@3zet Nie widzę skryptu, więc nie mogę się do końca autorytatywnie wypowiedzieć. Ale miałem sytuację, gdzie pętla tworzyła procesy potomne. I też się chrzaniło, bo coś się demonizowało.
I też dotyczyło to clickera, bo zachciało mi się idle game (nie kojarzę już której). Po wyprostowaniu - działał.
@ataxbras
#!/bin/bash
while true; do
if [ ! -z "$(/usr/bin/xinput --query-state 17 | grep -o 'button\[12\]=down')" ]; then
/usr/bin/xdotool click --delay 18 1
else
break
fi
done
dosłownie takie gówienko.
@3zet Nie mam swojego clickera (właśnie sprawdzałem, ale to było dawno i pewnie jest w jakiś backupach), ale z tego co pamiętam to w pętli powinien być jakiś, nawet mały, sleep. I to w pętli, a nie w poleceniu xdotool. Bo to co teraz robisz to wyzwalasz xdotool jak szalony w bardzo krótkiej pętli ze stałym opóźnieniem.
@ataxbras I tak ma być, opóźnienie jest zamiast sleepa.
@3zet Byłoby, gdyby nie było pętli... Pętla wywołuje xdotool w kółko przy naciśnięciu.
@ataxbras Jeszcze raz bo widzę nie ta pora. chcę aby ten skrypt napierdalał lpm co 18ms póki trzymam przycisk 12 na myszy co robi poprawnie. Jak go puszczę to skrypt ma się zabić co robi poprawnie.
Problem jest taki że jak zbinduję ten skrypt do przycisku 12 softem typu xbindkeys to mimo, że skrypt poprawnie odpala jak wcisnę przycisk 12 i się zabija jak go puszczę i log xbindkeys pokazuje że lpm wciska się co 18ms jak powinien to system nie rejestruje tych kliknięć.
@3zet Wywaliłem break, dodałem sleep i działa (podpiąłem pod keyboard, literka f).
while true; do
if [ ! -z "$(/usr/bin/xinput --query-state xx | grep -o 'key\[41\]=down')" ]; then
/usr/bin/xdotool click --delay 18 1
else
sleep 0.01
fi
done
Działa bez xbindkeys.
Obawiam się, że problem może być w tym, że Twój skrypt robi test tylko jeśli warunek jest spełniony a jak nie to wypad. Tym samym powtarza test, który wyzwala xbindkeys. Ale w momencie uruchomienia, test może już być fałszywy.
Choć z tego co piszesz, to sytuacja jest inna. Być może dlatego, że masz po drodze xbindkeys.
@ataxbras Tamto co wysłałem też działa bez xbindkeys
chodzi o to aby nie było niepotrzebnej pętli w tle która obciąża CPU jak w twoim przypadku. Skrypt po odpuszczeniu przycisku ma się po prostu zabić.
Pytanie z początku brzmi dlaczego system nie rejestruje kliknięć tym skryptem jeśli wyzwolony jest właśnie przez xbindkeys bo odpalony z terminala po prostu działa (jak trzymam przycisk 12 w trakcie odpalanie bo oczywiście prawie natychmiast się wyłączy jakbym tego nie zrobił)
@3zet I tak jak wspomniałem, pewnie chodzi właśnie o xbindkeys z jakiegoś powodu. U mnie działa wywołanie samego xdotool z xbindkeys. Z pętlą nie sprawdzałem (może jutro). Ale wydaje się, że spokojnie stale wywołuje przy trzymaniu klawisza.
@ataxbras posiadam, używam, ale nie można z tym zrobić nic użytecznego poza zmianą rgb
@3zet Dobrze wiedzieć.
Zaloguj się aby komentować