Z pewnością można wykryć zdarzenia związane z myszą , ale nie sądzę, że istnieje sposób, aby zapytać system, czy przycisk myszy jest obecnie naciskany . Każdy analizator aktywności myszy, którego widziałem, obserwuje, jeśli wybaczysz pseudokod MouseButton1Downi MouseButton1Upzdarzenia, na które należy zareagować.
DopeGhoti
Potrzebuję skryptu, który będzie obserwował mysz, a kiedy zostanie naciśnięty lewy przycisk, zrobi coś.
MartinP
Potrzebuje wyjaśnienia. Czy chcesz czegoś, co znajduje się w powłoce i klikniesz okno terminala, ta konkretna powłoka coś robi? A może chcesz, aby po kliknięciu określonego przycisku myszy w dowolnym miejscu uruchomiono skrypt (i nie musisz widzieć skryptu w terminalu)?
Patrick
Potrzebuję skryptu, który uruchomię, a następnie będzie szukał przycisków myszy w dowolnym miejscu na pulpicie. Nie blokuje myszy, tylko jej słucha. Próbowałem napisać program w C w Xlib, ale ma on tylko XGrabButton i XGrabPointer i tego nie chcę, ponieważ chwyta wskaźnik, a inne okna nie rejestrują zdarzeń kliknięcia.
MartinP
Odpowiedzi:
11
xinput --query-state <mouse_id>
To daje stan dla wszystkich przycisków myszy, który wygląda następująco:
xinput --listdaje mi X Input extension not available.. Niestety Google w tej kwestii nie ujawnia niczego, co byłoby pomocne w moim przypadku: Xvnc4w minimalnej maszynie wirtualnej Debiana. Prawdopodobnie nie mam szczęścia
Tino
6
Możesz użyć narzędzia wiersza poleceń, xevaby sprawdzić stan przycisków myszy w środowisku X.
Przykład
$ 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”.
xbindkeys
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.
Przykład
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 xtermpo 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, xtermzostanie wykonane.
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ć.Odpowiedzi:
To daje stan dla wszystkich przycisków myszy, który wygląda następująco:
Mouse_id można uzyskać z:
Oto mały skrypt obserwatora przycisku myszy:
Być może trzeba zmienić ciąg wykrywający MOUSE_ID („mysz”) na coś innego.
źródło
xinput --list
daje miX 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ęściaMożesz użyć narzędzia wiersza poleceń,
xev
aby sprawdzić stan przycisków myszy w środowisku X.Przykład
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”.
xbindkeys
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.
Przykład
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.
Po utworzeniu pliku możesz go otworzyć w edytorze tekstu i dodać następującą regułę:
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.
Teraz z tym działaniem za każdym razem, gdy kliknę prawym przyciskiem myszy,
xterm
zostanie wykonane.Bibliografia
źródło
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:
to jest dla zdarzenia koła (zamiast zestawu kliknięć 12)
źródło
Nie możesz mieć wydarzenia z wciśnięciem przycisku
ciastai 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.
źródło