Znajdź właściciela chwytaka wskaźnika X.org

17

Mam aplikację, która najwyraźniej chwyciła mysz (mogę ją przenieść, ale nie mogę nigdzie kliknąć), czy istnieje sposób, aby dowiedzieć się, która aplikacja jest właścicielem chwytaka myszy X.org?

Podany tutaj skrót do zwolnienia myszy nie działał, więc interesuje mnie coś, co mogłoby dać mi więcej informacji.

Tobu
źródło
Czy jesteś pewien, że na tym polega problem? Byłoby to trochę dziwne w przypadku aplikacji, której nie używasz do tego celu (gdyby tak się stało, przestałbym korzystać z tej aplikacji), więc są szanse - jeśli to jest naprawdę przyczyna - to jest to, czego właśnie używałeś.
goldilocks,
Znalazłem to, metodą prób i błędów, zabijając kilka rzeczy, dopóki coś (aplikacja do wina) nie zwolniło chwytania.
Tobu,

Odpowiedzi:

16

Możesz to zrobić, naciskając XF86LogGrabInfoklawisz wprowadzony w tym zatwierdzeniu .

Domyślnie ten klawisz nie jest powiązany z żadnym fizycznym kluczem ani kombinacją klawiszy. Ale nadal możesz go aktywować za pomocą xdotool:

xdotool key "XF86LogGrabInfo"

Po wykonaniu tego polecenia lista aktywnych chwytów zostanie zapisana w dzienniku X. Przynajmniej na Ubuntu /var/log/Xorg.0.log. Będzie to gdzieś pod koniec pliku dziennika, ale pod nim może znajdować się kilka nieistotnych komunikatów dziennika. Jeśli nie ma żadnych chwytów, pisze:

[1199271.146] (II) Printing all currently active device grabs:
[1199271.146] (II) End list of active device grabs

Jeśli są jakieś chwyty (tutaj otworzyłem menu w przeglądarce Firefox), rejestruje coś takiego:

[1199428.782] (II) Printing all currently active device grabs:
[1199428.782] Active grab 0x4c00000 (core) on device 'Virtual core pointer' (2):
[1199428.782]       client pid 15620 /usr/lib/firefox/firefox 
[1199428.782]       at 1199423728 (from active grab) (device thawed, state 1)
[1199428.782]         core event mask 0x7c
[1199428.782]       owner-events true, kb 1 ptr 1, confine 0, cursor 0x0
[1199428.782] (II) End list of active device grabs
Ślimak mechaniczny
źródło
2

Właśnie miałem podobny problem i zawęziłem go do błędu, który w jakiś sposób sprawia, że ​​X11 myśli, że środkowy przycisk jest wciśnięty i nie zwolniony. Fizyczne odłączenie myszy nie pomaga, dopóki nie nastąpi zdarzenie myszy.

Problem można odtworzyć za pomocą xdotool mousedown 2- nie można przełączać fokusu między oknami,

xdotool key XF86LogGrabInfo pokazuje bieżące skoncentrowane okno procesu, ale gdy jedno go zabija, inne okno otrzymuje fokus i ten sam scenariusz jest kontynuowany.

Obejście: problem xdotool mouseup 2.

Aktualizacja: naciśnięcie i zwolnienie środkowego przycisku jest po prostu najmniej zauważalne, ponieważ większość aplikacji nie reaguje na to, a niektóre myszy nie mają tego przycisku, aby spróbować kliknąć, aby sprawdzić, czy problem zniknie.

ArticIceJuice
źródło
0

Wpisy w dzienniku Xorg mogą być dość nieczytelne. Napisałem program, który analizuje je i przedstawia w formie możliwej do zrozumienia dla człowieka:

https://gist.github.com/CyberShadow/6412d11aea64144f8905cc0b8196f38e

Aby użyć, najpierw uruchom xdotool key XF86LogGrabInfo, jak opisano w odpowiedzi Mechanicznego ślimaka. Następnie uruchom powyższy program. Jeśli plik dziennika Xorg nie znajduje się w /var/log/Xorg.0.log, możesz określić jego lokalizację za pomocą --xorg-logopcji. Zobacz --helpszczegóły.

Vladimir Panteleev
źródło