Ponownie przypisz klawisze Ctrl i Alt - błąd „BadValue” xmodmap

13

Próbuję ponownie mapować klawiaturę, aby emacs był użyteczny. Moja ergonomiczna klawiatura umieszcza pojedynczy klawisz Control na izolowanej 4-klawiszowej wyspie z lewej strony.

System operacyjny to ściśnięcie Debiana.

Oto linie, do których próbuję się zapisać xmodmap, umieszczam je w pliku ~ / .Xmodmap:

jasne sterowanie
wyczyść Mod1
! Klawisze Alt są oznaczone „Opcją” na mojej klawiaturze,
! użycie xev pokazuje je, aby wysłać odpowiednio klucze Alt_L i Alt_R
keysym Alt_L = Control_L
keysym Alt_R = Control_R
! Klucze Super_L i Super_R to klucze Windows
keysym Super_L = Alt_L
keysym Super_R = Alt_R
dodaj Control = Control_L Control_R
dodaj Mod1 = Alt_L Alt_R

Moim celem jest, aby moje Altklawisze Option (aka ) zachowywały się jak klawisze Control i aby moje klucze Windows (aka Super) zachowywały się podobnie Alt.

Oto kody klawiszy i klucze generowane przez xev dla tych kluczy. Uwaga: moja klawiatura (ergonomiczna klawiatura Goldtouch) ma tylko jeden klawisz kontrolny.

kod klucza 37 (keyym 0xffe3, Control_L)
kod klucza 64 (keyym 0xffe9, Alt_L)
kod klucza 133 (keyym 0xffeb, Super_L)
kod klucza 134 (keyym 0xffec, Super_R)
kod klucza 108 (keyym 0xffea, Alt_R)

Oto, co wyświetla xev podczas działania xmodmap .Xmodmap

Zdarzenie MappingNotify, numer seryjny 34, syntetyczny NO, okno 0x0,
    żądanie MappingKeyboard, first_keycode 204, liczba 1

Zdarzenie MappingNotify, numer seryjny 34, syntetyczny NO, okno 0x0,
    żądanie MappingKeyboard, first_keycode 64, liczba 1

Zdarzenie MappingNotify, numer seryjny 34, syntetyczny NO, okno 0x0,
    żądanie MappingKeyboard, first_keycode 108, liczba 1

Zdarzenie MappingNotify, numer seryjny 34, syntetyczny NO, okno 0x0,
    żądanie MappingKeyboard, first_keycode 206, liczba 1

Zdarzenie MappingNotify, numer seryjny 34, syntetyczny NO, okno 0x0,
    żądanie MappingKeyboard, first_keycode 133, liczba 1

Zdarzenie MappingNotify, numer seryjny 34, syntetyczny NO, okno 0x0,
    żądanie MappingKeyboard, first_keycode 134, liczba 1

A oto błąd zwrócony przez xmodmap:

X Błąd nieudanego żądania: BadValue (parametr liczby całkowitej poza zakresem do działania)
Główny kod operacji nieudanego żądania: 118 (X_SetModifierMapping)
Wartość w nieudanym żądaniu: 0x17
Numer seryjny nieudanego żądania: 17
Aktualny numer seryjny w strumieniu wyjściowym: 17

jakieś sugestie, jak to rozwiązać?

Aliud Alius
źródło
W jakim systemie operacyjnym i wersji? Jaki szeroki typ klawiatury (PC / Mac / Sun / ...)? Spróbuj xevuruchomić się w terminalu, a następnie xmodmapw innym terminalu. Powinieneś zobaczyć kilka MappingNotifyzwrotek z xev, dodaj je do swojego pytania. Ponadto w xevoknie naciśnij różne zaangażowane klawisze i powiedz nam, z jakim kodem klucza i kluczem odpowiadają (część „keycode 37 (keysym 0xffe3, Control_L)” na wyjściu xev).
Gilles „SO- przestań być zły”

Odpowiedzi:

7

Patrząc na obejście połączone przez Gilesa, działało to dla mnie:

clear Mod1
clear Mod4

keycode 204 = NoSymbol NoSymbol NoSymbol NoSymbol
keycode 206 = NoSymbol NoSymbol NoSymbol NoSymbol

keycode 64 = Control_L Control_L Control_L Control_L
keycode 133 = Alt_L Alt_L Alt_L Alt_L
keycode 134 = Alt_R Alt_R Alt_R Alt_R
keycode 108 = Control_R Control_R Control_R Control_R

add Control = Control_L Control_R
add Mod1 = Alt_L Alt_R

Moje klawisze opcji działają teraz jak klawisze Control, a moje klawisze Windows jak klawisze Alt.

Aliud Alius
źródło
3

Problem pojawia się, gdy próbujesz dodać klucz do modyfikatora, który jest już dodany do innego klawisza modyfikatora. Ważne jest, aby wiedzieć, że jeśli dodasz klucz do modyfikatora, wszystkie inne klucze, które towarzyszą temu kluczowi w przypadku zostaną dodane również do tego modyfikatora.

Na przykład:

clear mod5
add mod5    = ISO_Level3_Shift Mode_switch

może spowodować

mod5        backslash (0x33),  Caps_Lock (0x42),  ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

ponieważ masz coś takiego

keycode  66 = Caps_Lock NoSymbol ISO_Level3_Shift

w ~ / .Xmodmap (Zobacz bieżący kod klucza do mapowania kluczy za pomocą xmodmap -pke)

co spowoduje pojawienie się błędu BadValue podczas próby wykonania czegoś podobnego

add lock    = Caps_Lock

ponieważ Caps_Lock jest już dodany do modyfikatora mod5.

Pływ
źródło
2

To kolejne rozwiązanie twojego problemu, chociaż tak naprawdę nie odpowiada na twoje pytanie. Edytuj plik xorg.conf, wstawiając do sekcji „InputDevice”:

 Option "XkbOptions" "ctrl:swapcaps"
kropka
źródło