To pytanie zostało już zadane, ale nigdy nie udzielono właściwej odpowiedzi. Po odprawie w @Seth pytam teraz ponownie. Pozwoli mi to odpowiedzieć i ewentualnie zmodyfikować pytanie o wiele łatwiej. Oryginalne pytanie można znaleźć tutaj:
Mapuj Ctrl i Alt na przyciskach myszy
Kwestia:
Chociaż bardzo proste jest przypisanie dowolnego naciśnięcia klawisza do przycisku myszy za pomocą xbindkeys
w połączeniu z xdotool
lub xte
wydaje się o wiele bardziej problematyczne mapowanie klawisza modyfikującego (np. ALT , CTRL , SHIFT itp.).
Ostateczne rozwiązanie powinno pozwolić m.in. na CTRL + kliknięcie (np. W celu wybrania wielu pozycji listy) za pomocą myszy.
Kilka możliwych sposobów rozwiązania tego problemu można znaleźć tutaj na Stack Exchange oraz na innych forach związanych z Linuksem. Ale żaden z nich nie działa zgodnie z oczekiwaniami, ponieważ prowadzi do innych problemów i skutków ubocznych.
Uwagi:
Niektóre z poniższych przykładów dotyczą Guile ze składnią Scheme i polegają na .xbindkeysrc.scm
pliku, podczas gdy inne polegają na .xbindkeysrc
pliku z odpowiednią składnią. Wiem, że nie będą ze sobą współpracować.
Ponadto poniższe fragmenty polegają xdotool
tylko na, ale jestem otwarty na podejścia obejmujące inne aplikacje, takie jak np xte
. - chociaż wydaje się, że oba prowadzą do tych samych rezultatów i dlatego używam xdotool
tutaj tylko akcji.
Podejście A:
Aktualizacja .xbindkeysrc
pliku za pomocą:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
Tak początkowo próbowałem, ale ma efekt uboczny, że modyfikator jest trzymany i nie można go zwolnić.
Podejście B:
Aktualizacja .xbindkeysrc.scm
pliku za pomocą:
(xbindkey '("b:8") "xdotool keydown ctrl")
(xbindkey '(release "b:8") "xdotool keyup ctrl")
(xbindkey '("m:0x14" "b:8") "xdotool keydown ctrl")
(xbindkey '(release "m:0x14" "b:8") "xdotool keyup ctrl")
Znaleziony na http://www.linuxforums.org/forum/hardware-peripherals/169773-solved-map-mouse-button-modifier-key.html i próbuje rozwiązać problem związany z trzymaniem modyfikatora (zgodnie z opisem w podejściu za).
Chociaż naprawia to, że działa tylko częściowo, ponieważ nie można wykonywać innych kliknięć myszą, gdy przycisk kciuka jest wciśnięty.
Podejście C:
Aktualizacja .xbindkeysrc
pliku za pomocą:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
Wypróbowane przez OP powiązanego pytania tutaj na askubuntu. O wiele prostsze i bardziej solidne, ponieważ nie obejmuje stanów modyfikatora. Niemniej jednak problem pozostaje, tzn. CTRL + kliknięcie nie jest możliwe.
Wygląda na to, że xbindkeys
sam tutaj jest problem, ponieważ rozpoznaje kliknięcie, ale go nie wykonuje. Można to przetestować za pomocą xev | grep button
i xbindkeys -v
:
Zapisane normalne kliknięcie myszy xev
powinno wyglądać następująco:
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
Podobnie jak w przypadku przycisku kciuka:
state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES
Ale po włączeniu powyższej xbindkeys
konfiguracji nic nie nagrywa. Chociaż ma to sens dla przycisku kciuka, ponieważ jest odwzorowany na CTRL, a zatem nie jest już przyciskiem myszy, dziwne jest, że przycisk 1 również nie jest rejestrowany. Jest to prawdopodobne, ponieważ xbindkeys
nie wykonuje go, ale sam je rozpoznaje:
Button press !
e.xbutton.button=8
e.xbutton.state=16
"xdotool keydown ctrl"
m:0x0 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Button press !
e.xbutton.button=1
e.xbutton.state=20
Button release !
e.xbutton.button=1
e.xbutton.state=276
Button release !
e.xbutton.button=8
e.xbutton.state=20
"xdotool keyup ctrl"
Release + m:0x4 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Podejście D:
Aktualizacja .xbindkeysrc
pliku za pomocą:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
"xdotool click 1"
b:1
Po prostu zbyt proste ... ale prowadzi do nieskończonej pętli kliknięć.
AKTUALIZACJA:
W międzyczasie kupiłem Logitech G502 i zauważyłem, że po skonfigurowaniu za pomocą sterownika w systemie Windows nie tylko sam profil jest przechowywany w pamięci urządzenia, ale faktyczne naciśnięcie klawisza odbywa się za pomocą myszy. To faktycznie rozwiązało mój problem z Linuksem!
Jedyna inna mysz, jaką pamiętam, która była w stanie to zrobić, to Razer Copperhead w tamtych czasach. Sądzę jednak, że dostępne są inne myszy, które mogą zrobić to samo.