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:
- http://www.charvolant.org/~doug/xkb/html/node5.html
- http://people.uleth.ca/~daniel.odonnell/Blog/custom-keyboard-in-linuxx11
- http://www.x.org/releases/X11R7.5/doc/input/XKB-Enhancing.html
- Dużo poszukiwań!
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?
# xmodmap -verbose -e "clear shift" ! 1: clear shift clear shift ! ! executing work queue ! clear shift
Oto, co w końcu zadziałało! Użyłem
xmodmap
i~/.Xmodmap
plik zamiast konfiguracji xkb.~/.Xmodmap
: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
ustawia domyślną mapę w USA, dzięki czemu pracujesz z czystej tablicy, ixmodmap
dodaje 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!
źródło