Czy jest jakiś sposób na uzyskanie stanu przycisku myszy z bash? Xdotool może uzyskać tylko lokalizację myszy.
Chciałbym ustawić coś, w czym mogę zdefiniować regułę, w której po naciśnięciu przycisku myszy skrypt może zostać wykonany.
Czy jest jakiś sposób na uzyskanie stanu przycisku myszy z bash? Xdotool może uzyskać tylko lokalizację myszy.
Chciałbym ustawić coś, w czym mogę zdefiniować regułę, w której po naciśnięciu przycisku myszy skrypt może zostać wykonany.
Odpowiedzi:
xinput --query-state <mouse_id>
To daje stan dla wszystkich przycisków myszy, który wygląda następująco:
2 classes :
ButtonClass
button[1]=up
button[2]=up
button[3]=up
button[4]=up
button[5]=up
button[6]=up
button[7]=up
button[8]=up
button[9]=up
button[10]=up
button[11]=up
button[12]=up
button[13]=up
button[14]=up
button[15]=up
button[16]=up
ValuatorClass Mode=Relative Proximity=In
valuator[0]=313
valuator[1]=667
valuator[2]=-20
Mouse_id można uzyskać z:
xinput --list
Oto mały skrypt obserwatora przycisku myszy:
#!/bin/bash
MOUSE_ID=$(xinput --list | grep -i -m 1 'mouse' | grep -o 'id=[0-9]\+' | grep -o '[0-9]\+')
STATE1=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
while true; do
sleep 0.2
STATE2=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
comm -13 <(echo "$STATE1") <(echo "$STATE2")
STATE1=$STATE2
done
Być może trzeba zmienić ciąg wykrywający MOUSE_ID („mysz”) na coś innego.
xinput --list
daje mi X Input extension not available.
. Niestety Google w tej kwestii nie ujawnia niczego, co byłoby pomocne w moim przypadku: Xvnc4
w minimalnej maszynie wirtualnej Debiana. Prawdopodobnie nie mam szczęścia
Możesz użyć narzędzia wiersza poleceń, xev
aby sprawdzić stan przycisków myszy w środowisku X.
$ xev
...
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319064320, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319064439, (164,14), root:(166,101),
state 0x100, button 1, same_screen YES
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065208, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065337, (164,14), root:(166,101),
state 0x100, button 1, same_screen YES
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319066059, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
Ale ta informacja tylko częściowo prowadzi do rozwiązania. Kluczową informacją, którą chcesz wyodrębnić z powyższego, jest to, który numer jest powiązany z określonym przyciskiem myszy. W moim przykładzie naciskam lewy przycisk „buton 1”.
Możesz użyć tego narzędzia, aby skonfigurować akcję związaną z naciśnięciem przycisku. Możesz nawet ustawić regułę, która wymaga naciśnięcia klawisza lub nawet naciśnięcia klawisza + przycisku.
Musisz najpierw upewnić się, że pakiety xbindkeys są zainstalowane.
Następnie musisz uruchomić następujące polecenie, tylko raz, aby utworzyć szablonowy plik konfiguracyjny xbindkeys.
$ xbindkeys --defaults > /home/saml/.xbindkeysrc
Po utworzeniu pliku możesz go otworzyć w edytorze tekstu i dodać następującą regułę:
"xterm"
b:3
Ta reguła mówi, że chcemy uruchomić program xterm
po naciśnięciu przycisku 3. „Przycisk 3” to mój prawy przycisk myszy.
Po wprowadzeniu powyższej zmiany musimy zabić xbindkeys, jeśli jest już uruchomiony, a następnie uruchomić go ponownie.
$ killall xbindkeys
$ xbindkeys
Teraz z tym działaniem za każdym razem, gdy kliknę prawym przyciskiem myszy, xterm
zostanie wykonane.
jeśli chcesz po prostu uruchomić polecenie bash w xterm po kliknięciu myszą (lub zdarzeniu koła), możesz wypróbować ten przykład:
$ echo -e "\e[?1000h"
$ while read -n 6; do echo hellowworld; done
to jest dla zdarzenia koła (zamiast zestawu kliknięć 12)
Nie możesz mieć wydarzenia z wciśnięciem przycisku ciasta i zjeść. Jeśli chcesz, aby skrypt odbierał zdarzenie myszy, zdarzenie myszy zostanie wysłane do skryptu zamiast do dowolnej innej aplikacji - oznacza to, że skrypt musi pobrać zdarzenie myszy. Jeśli skrypt nie odbiera zdarzenia, pobiera je okno, które powinno je pobrać.
Jeśli chcesz, możesz ponownie wysłać zdarzenie myszy do wybranego okna lub okna o podanych współrzędnych ( xdotool click
).
Możesz użyć XBindKeys do wykonania skryptu dla określonych zdarzeń myszy lub klawiatury.
MouseButton1Down
iMouseButton1Up
zdarzenia, na które należy zareagować.