Podsumowanie pytań: Chcę, aby jeden z moich przycisków myszy został zarejestrowany jako lewy przycisk Windows Super_Ldo X11.
W moim menedżerze okien mogę przesuwać okna, przytrzymując „lewy przycisk Windows” (Left Super) i przeciągając okno lewym przyciskiem myszy. Chcę to zrobić bez dotykania klawiatury, więc chcę zmapować lewy klawisz Super do przycisku myszy 11, w ten sposób mogę przytrzymać przycisk myszy 11 i kliknąć + przeciągnąć okno.
Najbardziej oczywistym rozwiązaniem jest użycie xbindkeys i xte w ten sposób ( .xbindkeysrc
):
"xte 'keydown Super_L'"
b:11
"xte 'keyup Super_L'"
b:11 + release
Działa to tak:
- Kiedy naciskam przycisk myszy 11, Super_Ljest również wciśnięty
- Po zwolnieniu przycisku myszy 11 Super_Lzostaje zwolniony
Ale jest problem: nie mogę przenosić okien za pomocą Super_L+, Mouse1jeśli przytrzymuję również inny przycisk myszy, np. Przycisk myszy 11. Używając powyższego rozwiązania, przycisk myszy 11 nadal jest rejestrowany jako wciśnięty i zwolniony, a więc żaden z działają operacje menedżera okien.
Próbowałem tego przy użyciu zarówno Cinnamon, jak i Awesome WM, i absolutnie żadna z Super_Lkombinacji klawiszy nie działa, gdy przycisk myszy 10 lub 11 jest wciśnięty.
A hack
Obecnie pracuję nad tym problemem, powodując, że kliknięcie myszą 11 przytrzymuje Super_Lprzycisk przez określony czas. W ten sposób mogę kliknąć przycisk myszy, a następnie przeciągać różne rzeczy przez krótki czas:
"xte 'keydown Super_L' 'usleep 250000' 'keyup Super_L'"
b:11
Kolejna próba
Zgodnie z sugestią totti wypróbowałem tę xbindkeys
konfigurację:
"xte 'mouseup 10' 'keydown Super_L'"
b:10
"xte 'keyup Super_L'"
b:10 + Release
To nie działa Wygląda na to, że Super_Lklawisz jest przytrzymywany, ponieważ jak tylko zwolnię przycisk 10, pozostaje on wciśnięty na zawsze (dopóki nie Super_Lnacisnę ponownie klawisza na klawiaturze), ale przycisk myszy jest nadal rejestrowany, ponieważ nie mogę kliknąć i przeciągnąć okna . Nie sądzę, że będę w stanie sprawić, by ta praca działała przy użyciu xbindkeys
i xte
.
Odpowiedzi:
Post askubuntu zawiera odpowiedź , którą streszczę poniżej.
Problem polega na tym, że xbindkeys chwyta całą mysz, co powoduje, że modyfikatory + mapowanie kliknięcia myszy są niepewne. Odpowiedź wykorzystuje uinput za pomocą skryptu python-uinput do monitorowania
/dev/my-mouse
kliknięcia przycisku kciuka i wysłania Ctrlklucza do wirtualnej klawiatury. Oto szczegółowe kroki:1. Ustaw zasady udev
W przypadku myszy plik
/etc/udev/rules.d/93-mxmouse.conf.rules
:Udev będzie szukał urządzeń jądra o nazwach takich jak event5. SYMLINK służy do znajdowania myszy
/dev/my_mx_mouse
, którą może odczytać grupamxgrabber
.Aby znaleźć informacje o sprzęcie, uruchom coś takiego:
Dla uinput plik
/etc/udev/rules.d/94-mxkey.rules
:Odłącz i podłącz mysz lub zmuś udev do uruchomienia reguł
udevadm trigger
.2. Aktywuj moduł UINPUT
I w
/etc/modules-load.d/uinput.conf
:3. Utwórz nową grupę
4. Skrypt Python
Zainstaluj
python-uinput library
ipython-evdev library
.Poniższy skrypt wymaga zidentyfikowania kodu zdarzenia przycisku:
5. Wykończenie
Ustaw plik wykonywalny Pythona i upewnij się, że jest ładowany podczas uruchamiania.
źródło
F13
,F14
iF15
, i wyłączanie funkcji myszy za pomocąxinput
. Następnie można po prostu przypisać te klucze do tego, co mi potrzeba, stosując prostąxmodmap
. Główną ideą jest zredagowany w skrócie (istnieją pewne zakodowane wartości, axinput
potem nie przywracam funkcji myszy), opublikuję post na blogu na ten temat wraz z ostateczną wersją skryptu (i udostępnię link tutaj, kiedy to będzie zrobione. Dziękuję ty za pomoc! ☺ ♥Ponieważ skrypt można uruchomić jednym kliknięciem myszy, można użyć następującej sztuczki.
1. Naciśnij przycisk 11 , aby trzymać się z super-klucz . ( Przycisk 11 uruchamia skrypt)
2. Przesuń okna za pomocą innych przycisków myszy
3. Naciśnij ponownie przycisk myszy 11, aby zwolnić super klawisz
skrypt
Użyj,
xdotool
aby przytrzymać superkluczPrzy pierwszym kliknięciu przycisku utwórz plik tymczasowy i przytrzymaj klawisz. Przy następnym kliknięciu usuń plik tmp i zwolnij klucz,
aktualizacja
Według strony pomocy Ubuntu (jak wiele przycisków myszy)
imwheel
można zmienić przypisanie do klucza.źródło
+ Mod4
w konfiguracji xbindkeys, aby uwzględnić przytrzymanie superklucza. Sugerowane przez ciebie obejście jest lepsze niż moje i przechodzę do niego :-) Ale nadal nie odpowiada na pytanie.Sugestia debugowania: próbowałbym monitorować
/dev/input/eventX
plik, aby zobaczyć, jakie zdarzenia są generowane po naciśnięciu i zwolnieniu tego przycisku, szczególnie w połączeniu zBTN_LEFT
. Oto przykładowy kod na początek. Oczywiście będziesz musiał go zmodyfikować, aby rejestrować wszystkie zdarzenia, nie tylko naciśnięcia klawiszy.Możesz także sprawdzić
xev
wyniki, jeśli jeszcze tego nie zrobiłeś. Analiza obu dzienników powinna ujawnić dokładny problem.Możliwe, że twoja mysz generuje dodatkowe zdarzenia zwolnienia przycisku po naciśnięciu wielu przycisków. W takim przypadku opcją byłoby użycie obejścia wiązania klucza lub zmodyfikowanie
xf86-input-evdev
biblioteki w celu filtrowania niepożądanych zdarzeń (lub symulacji brakujących). Powtórzyłem jakiś czas temu ekran dotykowy, który generował zdarzenia „kliknięcia” podczas próby przeciągania i upuszczania. Pomysł polegał na filtrowaniu zdarzeń „zwolnienia”, które nadeszły prawie jednocześnie (w niewielkim przedziale czasowym) za pomocą zdarzeń „kliknięcia”. Jeśli moje przypuszczenie jest słuszne, w zasadzie musisz zaimplementować coś podobnego.źródło
Zrozumiałem to dzisiaj dzisiaj z innymi klawiszami modyfikującymi. Problem polega na tym, że musisz uwzględnić modyfikator w kombinacji przycisków dla wydania. Zakładając, że twój klucz Super jest mapowany na Mod4 (który powinien być domyślny, afaik):
EDYCJA: Właśnie zdałem sobie sprawę, że to nie do końca odpowiada na twoje pytanie, ponieważ nadal nie będziesz w stanie używać LMB, trzymając wciśnięty b: 11
źródło