Ponieważ chcesz ponownie przypisać klucze do wszystkich aplikacji, najlepszą opcją jest użycie xmodmap. Jest elastyczny i bardzo wydajny, ale wymaga wpisania kilku poleceń w terminalu.
Krok 0 - Podejście
Serwer X zarządza klawiaturą i wszystkimi kluczowymi zdarzeniami i tłumaczy je na kody klawiszy dla wszystkich aplikacji.
Podejście polegałoby na zmapowaniu klawisza modyfikującego (takiego jak klawisz Super lub prawy klawisz Alt) jako klawisza „zmiany trybu” i powiedzenia serwerowi X, aby wygenerował różne kody w zależności od tego, czy klawisz jest wciśnięty, czy klawisz Tryb jest wciśnięty, czy nie.
Domyślnie nie ma zdefiniowanego klawisza zmiany trybu, a także wszystkie klawisze są skonfigurowane do generowania tego samego kodu po naciśnięciu z przełącznikiem trybu lub bez niego. Jest to dobre, ponieważ oznacza to, że z wyjątkiem kluczy, które jawnie zastąpisz, żadne inne klucze nie będą zachowywać się inaczej ani wymagać dodatkowej konfiguracji.
Chciałbym jednak, abyś rozważył użycie prawego klawisza Alt jako przełącznika trybu, szczególnie jeśli używasz również compiz, ponieważ niektóre wtyczki do compiz mapują skróty klawiszowe (np. Wybieranie okien, przełącznik zmiany itp.). Jeśli nie lubisz kontrolować compiz za pomocą klawiatury, Super jest w porządku.
W xmodmap superklucze są identyfikowane jako Super_L lub Super_R. Musisz wybrać taki, który będzie używany jako klawisz zmiany trybu. Alternatywnie, prawy klawisz Alt to Alt_R. Możesz to potwierdzić, uruchamiając xev i naciskając niezbędne klawisze na klawiaturze. Zobacz ten post dla kroków.
Krok 1 - Konfigurowanie mapy modyfikatorów
Otwórz terminal ( Applications -> Accesories -> Terminal
) i uruchom następujące polecenie, aby utworzyć plik z bieżącymi skrótami klawiszowymi. Wykorzystamy to jako punkt wyjścia.
xmodmap -pke > curkeys.map
xmodmap -pm >> curkeys.map
Otwórz to w swoim ulubionym edytorze tekstu. gedit curkeys.map &
otwiera to w gedit. Pod koniec pliku zobaczysz kilka takich wierszy:
keycode 253 =
keycode 254 =
keycode 255 =
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Usuń wiersz zaczynający się od „xmodmap: do 4 ...”
Edytuj mapę modyfikatora, aby wyglądała następująco. Umieść słowo „dodaj” na początku każdego wiersza i wstaw „=” po nazwie modyfikatora. Następnie usuń kody w nawiasach i przecinkach. Zauważ też, że przechodziłem Mode_switch
z mod5
linii do mod3
linii, ponieważ była pusta. Zmodyfikowana tabela powinna wyglądać tak - rzeczywista zawartość może nieznacznie różnić się w twoim przypadku od tych poniżej (zależy od układu klawiatury).
add shift = Shift_L Shift_R
add lock = Caps_Lock
add control = Control_L Control_R
add mod1 = Alt_L Meta_L Alt_R
add mod2 = Num_Lock
add mod3 = Mode_switch
add mod4 = Super_L Super_R Super_L Hyper_L
add mod5 = ISO_Level3_Shift
Ponownie zamapuj klucz przełącznika trybu fizycznego. Dodaj taką linię na końcu (w razie potrzeby zamień Super_L na Super_R lub Alt_R).
keysym Super_L = Mode_switch
Usuń nazwę klucza (Super_L) z dowolnej definicji modyfikatora. Dla Super_L oznacza to usunięcie go z linii mod4.
add mod4 = Super_R Hyper_L
Teraz prawy klawisz „Super” nadal będzie działał jak zwykły superklucz, podczas gdy lewy klawisz będzie miał specjalne właściwości.
Teraz musimy ponownie przypisać klawisze, aby wygenerować różne kody bez względu na to, czy zostaną naciśnięte przy wciśniętym Super_L, czy nie. Każda linia w naszym pliku, rozpoczynająca się od, keycode
określa 4 skróty klawiszowe dla każdego klawisza, który ma zostać wygenerowany na podstawie tego, czy naciśnięto klawisze Mod1 (klawisze Shift) i klawisz zmiany trybu. ( Link )
!...........................................................................
! Key Base Shift Mode Mode+Shift
!---------------------------------------------------------------------------
keycode 13 = 4 dollar 4 quotedbl
keycode 14 = 5 percent 5 colon
keycode 15 = 6 asciicircum 6 comma
keycode 16 = 7 ampersand 7 period
...
keycode 45 = k K k K
Jeśli chcemy, aby naciśnięcie klawisza Super_L + k wygenerowało klawisz „+”, musimy go zmodyfikować, aby czytać
keycode 45 = k K plus plus
Ostatni plus mapuje również Shift + Super_L + k na plus, ale można to odwzorować na coś innego. Dla każdego klucza jest dokładnie 1 linia do modyfikacji. Edytuj więcej wierszy, aby ponownie przypisać więcej klawiszy - pozostaw 2 pierwsze wpisy nienaruszone, aby zachować normalne zachowanie po naciśnięciu klawisza.
Zapisz plik i zamknij edytor.
Zainstaluj mapę klawiszy, uruchamiając następujące polecenia w terminalu. Pierwszy konfiguruje go dla tej sesji, drugi czyni go stałym dla przyszłych sesji.
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
Możesz to natychmiast przetestować, naciskając zmodyfikowane klawisze (na przykład Super_L + k).
Krok 3 - Dodawanie / przeglądanie mapy
Po zainstalowaniu zmodyfikowanej mapy można łatwo dodawać nowe klucze.
Użyj xev, aby znaleźć kody klawiszy i klucze
przetestuj go, uruchamiając to polecenie, aby zmapować klucz:
xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
Zamień elementy w nawiasach kątowych (jak <code>
<base>
itp.) Na odpowiednie wartości.
Utwórz kopię zapasową curkeys.map
pliku.
- Otwórz
curkeys.map
i edytuj linię dla odpowiedniego kodu klucza.
Ponownie zastosuj poniższe polecenia (pierwsze nie jest konieczne, jeśli zrobiłeś krok 2)
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
Uwaga: 1 : Modyfikacje wprowadzone za pomocą skrótów klawiaturowych (np., System -> Preferences -> Keyboard Shortcuts
) Wpływają na mapę modyfikatorów i zazwyczaj zostaną utracone przy następnym logowaniu. Więc proszę, unikaj tego.
Uwaga: 2 : czasami otrzymuję takie komunikaty o błędach podczas korzystania z tej metody. Nie wiem, co to oznacza, jednak są one na ogół nieszkodliwe.
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 118 (X_SetModifierMapping)
Value in failed request: 0x17
Serial number of failed request: 263
Current serial number in output stream: 263
Szczegółowa pomoc dla xmodmap jest dostępna tutaj .