Walczyłem z tym przez weekend i muszę ponownie przypisać przyciski myszy.
Mam mysz Logitech z 9 przyciskami, a naciśnięcie „środkowego przycisku” (# 2) wymaga kliknięcia kółka przewijania. Nie podoba mi się to, ponieważ jestem niezdarny i zwykle przewijam okno, w którym jestem, gdy próbuję kliknąć koło. Chciałem więc automatycznie przypisać górny przycisk boczny (w tym przypadku nr 9) do środkowego przycisku (nr 2). Chciałem również zmapować dolny przycisk boczny (# 8), aby wykonał dwukrotne kliknięcie lewym przyciskiem (# 1).
Chociaż moje cele były konkretne, poniższe rozwiązania można uogólnić na każdą sytuację, w której chcesz automatycznie przypisać ponownie przyciski myszy podczas uruchamiania.
Będziesz musiał xinput
zainstalować to zadanie. Można to zrobić całkowicie w .xsessionrc
pliku. Najpierw użyj, xinput
aby odkryć nazwę przypisaną do myszy, która następnie jest skorelowana z identyfikatorem urządzenia wejściowego. Poniżej znajduje się przykładowe dane wyjściowe z mojego laptopa:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
Moja mysz wywołuje się Logitech USB Laser Mouse
i jest wyświetlana jako id=11
. Twoja mysz będzie miała inną nazwę; ustalenie, że jest to ćwiczenie dla czytelnika.
Chociaż nadal znasz identyfikator urządzenia w tej sesji, dowiedz się, ile przycisków ma obsługiwać wejście za pomocą myszy . Może się różnić od liczby przycisków widocznych na urządzeniu.xinput list
deviceID
Logitech USB Laser Mouse id=11 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 11. Type: XIButtonClass
Buttons supported: 16
Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
Moja mysz ma tylko 9 oczywistych fizycznych przycisków, ale xinput
raporty 16.
Biorąc pod uwagę naturę USB, ten identyfikator może się zmieniać przy każdym ponownym uruchomieniu, więc nie jest wystarczające, aby wykonać skrypt, który jest statycznie przypisany do identyfikatora, który odkryjesz raz. Będziesz musiał dynamicznie przeanalizować to podczas uruchamiania i wykonać ponownie mapę w oparciu o bieżący identyfikator.
Teraz, gdy znasz jego nazwę, możesz xinput test
dowiedzieć się, który klucz ma zostać przypisany ponownie. Naciśnij przyciski myszy, z których chcesz mapować od i do, aby uzyskać ich indeksy. (Dla odniesienia, 1, 2 i 3 „zawsze” (tj. Zwykle) odnoszą się do lewego, środkowego i prawego przycisku myszy z trzema przyciskami. Wspólna zmiana mapy odwraca je, aby mysz była leworęczna. )
button press 2
button release 2
button press 9
button release 9
W tym przypadku stwierdziłem, że chcę zmapować przycisk nr 9 (z boku, u góry) na przycisk nr 2 (w środku).
Teraz, gdy wiesz, jak nazywa się Twoja mysz i które przyciski chcesz zmienić, możesz napisać ~/.xsessionrc
skrypt, który wywołuje xinput
ponowne mapowanie przycisków podczas uruchamiania. Poniżej znajduje się mój pełny skrypt.
# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Pierwszy wiersz tutaj ustawia tymczasową zmienną sesji równą identyfikatorowi myszy zgłoszonemu przez xinput
. Odbywa się to poprzez grep
wpisanie znanej nazwy myszy w raporcie xinput
, a następnie użycie sed
do wyodrębnienia numeru identyfikacyjnego z tego id=xxx
tokena w raporcie. Ta wartość jest następnie używana w xinput set-button-map
dyrektywie, która wykonuje ponowne mapowanie. W powyższym przykładzie jedyną zmianą jest to, że przycisk nr 9 jest ponownie mapowany na przycisk naśladowania nr 2. Wszystkie pozostałe pozostają w ustawieniach domyślnych.
Aktualizacja: Jak wskazuje @Lokasenna poniżej , jeśli twoje urządzenie zgłasza się jako mysz i klawiatura, być może będziesz musiał ograniczyć liczbę wyników grep
użycia -m 1
.
Zobacz także tę odpowiedź .
Będziesz potrzebował xinput
, xbindkeys
i xautomation
(w tym xte
) zainstalowany do tego zadania.
Użyj xinput list
i, xinput test
aby odkryć identyfikator urządzenia myszy i numer przycisku, który chcesz przypisać. W moim przypadku chciałem zmapować dolny przycisk boczny (# 8) do dwukrotnego kliknięcia lewym przyciskiem (# 1).
Utwórz lub edytuj ~/.xbindkeysrc
. Format tego pliku to seria sparowanych linii. Pierwszy wiersz to polecenie, które należy wykonać dla zdarzenia; druga linia to opis zdarzenia. Będziemy używać xte
komponentu xautomation
do wysyłania zdarzeń bezpośrednio do modułu obsługi danych wejściowych.
Aby utworzyć zdarzenie dwukrotnego kliknięcia po zwolnieniu przycisku, dodałem następujące elementy:
"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
Ta konfiguracja odwzorowuje sekwencję dwóch kliknięć myszą przycisku nr 1 na zwolnienie przycisku nr 8. (Teoretycznie wydaje mi się, że można przypisać dowolne polecenie do przycisku myszy, ale jest to najczęstszy przypadek. Zobacz tę odpowiedź w celu uzyskania innych praktycznych przykładów.)
W przypadku użytkowników z wieloma myszami podłączonymi do systemu musisz także podać identyfikator urządzenia. To może nie dotyczyć wszystkich użytkowników i zostało odkryte w Ubuntu 16.04 z Unity.
xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Kensington Kensington Expert Mouse id=9 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
Następnie zmodyfikuj plik .xbindkeysrc, odwołując się do wartości id = z danych wyjściowych komendy (w tym przykładzie id = 9):
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'
awk
oświadczenie swoimsed
oświadczeniem. Dzięki za ulepszenie!xinput set-button-map "Logitech Trackball" 1 3 3
xinput
pokazuje moją mysz dwukrotnie: like USB OPTICAL MOUSE id = 12 [wskaźnik slave (2)] ve USB OPTICAL MOUSE id = 13 [wskaźnik slave (2)] Tylko ID 13 będzie przechwytywał poleceniaxinput test
. Skrypt zawsze przechwytuje pierwszy identyfikator. Ale dlaczego tak jest dwa razy? Oba znikają po odłączeniu myszy i pojawiają się ponownie po podłączeniu.Krótkie kroki w tym celu:
Istnieje narzędzie o nazwie
xinput
.xinput list
lub po prostuxinput
pokaże wszystkie urządzenia wejściowe X i ich identyfikatory. Tutaj znajdziesz identyfikator myszy, którą chcesz odwzorować.Użyję mojego identyfikatora jako przykładu z konfiguracji, która wynosi 21, a następnie
xinput --get-button-map 21
wyprowadzęTeraz, jeśli chcesz, powiedzmy, zamienić lewy i prawy przycisk, po prostu uruchom
Tutaj jesteśmy, zmiana mapowania jest zakończona.
Aby uruchomić go podczas uruchamiania, po prostu włóż to do pliku:
daj mu uprawnienia do pliku wykonywalnego
Na koniec dodaj to ręcznie do aplikacji Statrtup z GUI lub, jeśli chcesz z CLI, umieść tekst poniżej (zmień ścieżki na swój) w pliku w swoim pliku
~/.config/autostart
, oto mój (less .config/autostart/leftmouseremap.sh.desktop
):Pamiętaj, że w KDE ścieżka wyglądałaby podobnie
~/.kde/Autosart
, w przypadku innych menedżerów pulpitu może to wyglądać inaczej. Alternatywnie uruchomienie systemu można wykonać za pomocą ogólnego podejścia przy użyciu/etc/rc.local
.źródło
Korzystając ze świetnej odpowiedzi zerobandwidth , niektóre urządzenia, takie jak Logitech MX Ergo, wyświetlają się zarówno jako wskaźnik, jak i klawiatura :
W rezultacie
grep "Logitech MX Ergo"
zwraca dwie wartości. Ten ostatni zostaje uwzględniony jako pierwszy element w ciągu odwzorowującym i psuje wszystkie przyciski myszy.Poprawka jest łatwa - wystarczy użyć
grep
argumentu maksymalnej liczby-m 1
:źródło
Udało mi się zmienić mapowanie środkowego przycisku myszy Logitech na „Return” za pomocą Easystroke Gesture Recognition, którą pobrałem z Centrum oprogramowania Ubuntu. Edycja: w aplikacji wybierz Dodaj akcję, Nazwij ją, wybierz typ klucza, kliknij Szczegóły i naciśnij Enter, naciśnij Record Stroke, a podczas pytania naciśnij środkowy przycisk.
źródło
xinput
z przyciskami, które nie pokazują się podczas używaniaxinput list <devID>
.Przed 12.04 w standardowym repozytorium znajdowało się łatwe narzędzie graficzne o nazwie „btnx”, które dodawano jako „Właściwości przycisku” w konfiguracji systemu. Niestety jednak została porzucona. „Niezaufany” PPA obecnie utrzymywany dla 14.04, 16.04 i 18.04 jest tutaj: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (znaleziony na https://launchpad.net/ubuntu/xenial/+source / btnx )
Nie zintegruje się z ustawieniami systemu, ale działa całkiem dobrze na moim laptopie z tanią 5-przyciskową myszą. Może także zmieniać przypisania do klawiszy i poleceń, a konfiguracja jest znacznie prostsza niż w przypadku jakiejkolwiek innej metody!
źródło
Mam HP EliteBook 2570p, Ubuntu 18.04.2. Tutaj mam trackpoint, który jest dla mnie bezużyteczny, a tutaj są 2 bezużyteczne przyciski trackpoint pod przestrzenią
Nie używam tych klawiszy, ponieważ mam go pod touchpadem. Chciałbym zmienić przypisanie tych przycisków do przycisku left = back_button (Alt_L + Left), prawy = middle_mouse_button. Punkt ścieżki w „xinput” to id = 11, a lewy przycisk to numer 1, a prawy to 3.
Czy ktoś mógłby napisać do mnie odpowiedni kod, aby po prostu skopiować na terminal? Mam połączenie z xbindkeysrc, ale to ustawia dowolną akcję dla obu przycisków (trackpoint i touchpad)
źródło