Jak mogę indywidualnie mapować lewy i prawy klawisz Shift?

10

Po pierwsze, przepraszam za moją nieznajomość X i XKB; Próbowałem wspólnie zhakować rozwiązanie w nadziei, że uda mi się osiągnąć to, co chcę, bez konieczności szczegółowego zrozumienia.

Próbuję utworzyć mapę klawiatury XKB na Ubuntu 12.04, która pozwala mi ustalić, który z dwóch klawiszy Shift stanowi modyfikator Level2. W szczególności 4klucz powinien wywoływać tylko $wtedy, gdy przytrzymane jest prawe przesunięcie, a nie lewe.

Moje dotychczasowe czytanie:

Próbowałem zdefiniować niestandardowy typ, a następnie odwołać się do niego jawnie w mapie symboli:

/usr/share/X11/xkb/types/mbfisher:

default xkb_types "mbfisher" {
  type "RIGHT_SHIFT" {
    modifiers = None+Shift_R;
    map[None] = Level1;
    map[Shift_R] = Level2;
  };
}

/usr/share/X11/xkb/symbols/mbfisher:

default
partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "mbfisher";

  key <AE04> {
    type= "RIGHT_SHIFT",
    symbols[Group1]= [ 4,  dollar ]
  };

};

Następnie wybieram mapę za pomocą interfejsu GUI systemu Ubuntu Keyboard.

To oczywiście wyłącza klawiaturę alfanumeryczną oprócz 4klawisza, ale znak dolara można nadal wpisać dowolnym klawiszem Shift.

Jestem świadomy pisania ogromnego pytania z mnóstwem bezużytecznych informacji, więc zatrzymam się tutaj; proszę pytać o cokolwiek, co przeoczyłem.

Jakieś pomysły?

mbfisher
źródło

Odpowiedzi:

2

Nie wiem, czy to rozwiązanie, które chcesz, ale jedną z możliwości wyłączenia lewego klawisza Shift byłoby użycie xmodmap. Utwórz plik ~/.Xmodmapz zawartością

clear shift
add shift = Shift_R

i biegnij xmodmap ~/.Xmodmap.


Zobacz komentarze / czat:

Możesz napotkać problemy, jeśli jakieś inne modyfikacje dokonają twojego xkbmap przez inny program, więc setxkbmap usmoże być konieczne zresetowanie do domyślnej xkbmap z czymś podobnym .

Jeśli chcesz, aby niektóre klawisze reagowały tylko na jeden klawisz Shift, możesz uzyskać bieżący układ klawiatury, dzięki xmodmap -pke > .Xmodmapczemu uzyskasz .Xmodmaplistę wszystkich klawiszy w postaci keycode XX = functions. W tym zadaniu każdy kod może mieć kilka funkcji po prawej stronie. Każdy odpowiada innemu modyfikatorowi + temu klawiszowi. Możesz następnie wstawić clear + add z góry i dodać coś podobnego add mod5 = Shift_L. Prawy klawisz Shift odpowiadałby mod2, a lewy mod5. Możesz następnie przejść i przenieść funkcje mod2 klawiszy, które chcesz wywołać, za pomocą lewego klawisza Shift do mod5, po prostu wstawiając NoSymbolspacje, aż dojdziesz do prawej kolumny ( keycode 57 = n N-> keycode 57 = n NoSymbol NoSymbol NoSymbol N).

Trudbert
źródło
Miło, że mogłem pomóc. Zadziałało?
Trudbert
Przepraszam, pracowity dzień. Nadal mam oba klawisze Shift dostępne po uruchomieniu Xmodmap. Czy powinienem zrobić coś jeszcze, aby uzyskać zmianę?
mbfisher
Wypróbuj xmodmap -e „wyczyść shift”, po czym nie powinieneś mieć żadnych klawiszy shift, jeśli to działa, reszta też powinna działać
Trudbert
Nie, wciąż mam klawisze Shift. # xmodmap -verbose -e "clear shift" ! 1: clear shift clear shift ! ! executing work queue ! clear shift
mbfisher
dziwne. Brak komunikatu o błędzie? wyczyść powinno usunąć wszystko związane z modyfikatorem, więc nic nie powinno pozostać. Zdobędę ręce na system Linux za około godzinę i przyjrzę się temu ponownie.
Trudbert
2

Oto, co w końcu zadziałało! Użyłem xmodmapi ~/.Xmodmapplik zamiast konfiguracji xkb.

~/.Xmodmap:

clear Shift

! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key

keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5

keysym Shift_R = Mode_switch
add Shift = Shift_L

2 komentarze z komentarzami (oznaczone gwiazdką !) pokazują nagłówki kolumn przed i po moich zmianach. Pozwoliło mi to określić kolumnę 2 jako Shift_L i kolumnę 3 jako Shift_R, ponieważ zmapowałem shift_R jako przełącznik trybu.

Zmiany są dokonywane przez uruchomienie:

 # setxkbmap us
 # xmodmap ~/.Xmodmap

setxkbmap usustawia domyślną mapę w USA, dzięki czemu pracujesz z czystej tablicy, i xmodmapdodaje do niej niestandardowe zmiany.

Kiedy wdrożył !, @, #, $i %postacie mogą być wpisane tylko z prawego klawisza shift, i ^, &, *, (i )może być wpisany tylko z lewym klawiszem shift.

Mogę teraz kontynuować, mapując wszystkie klawisze po lewej stronie klawiatury, aby były modyfikowane tylko prawym klawiszem Shift (tj. Znaki alfabetyczne i ich modyfikacje dużymi literami) i odwrotnie; to rozwiązanie oznacza, że ​​muszę tylko zmienić mapowanie lewej strony.

Inne przydatne linki znalezione po drodze:

Bardzo dziękuję @Trudbert za doprowadzenie mnie w większości do odpowiedzi!

mbfisher
źródło