Linux Keystroke HOWTO: Zmiana pliku układu klawiatury
Następna strona
Poprzednia strona
Spis treści
4. Zmiana pliku układu klawiatury
Jądro Linuxa zawiera skompilowany kod defkeymap.c, który tworzony jest
narzędziem loadkeys(1) z pliku defkeymap.map. Oba pliki umieszczone są
w katalogu src/linux/drivers/char.
Potrzebujemy zmodyfikować plik defkeymap.map, tak więc zróbmy jego
lokalną kopię przez
# cp defkeymap.map my_keytable.map
lub
# dumpkeys > my_keytable.map
Istnieje także duży zbiór różnych plików z układami klawiatury w
katalogu /usr/lib/kbd/keytables, z których defkeymap.map
może zostać użyty w twoim systemie w miejsce
src/linux/drivers/char/defkeymap.map.
Poleca się metodę używającą dumpkeys(1), ponieważ zdarzyć się może iż
twoje jądro było już modyfikowane lub utworzony dla ciebie z innym
plikiem defkeymap.map niż ten który możesz znaleźć.
Przeczytajmy zawartość pliku my_keytable.map: znajduje się tam ponad
300 linii kodu, i możemy tam znaleźć trzy grupy deklaracji: pierwsza
składa się z linii zawierających słowo "keycode", być może z dołączonymi
dodatkowymi słowami w rodzaju "alt", "control", itd. Druga grupa
składa się z linii ze słowem "string", trzecia z linii ze słowem
"compose".
Więcej o składni tego pliku można przeczytać w keytables(5)
4.1 Przykład modyfikacji pliku układu klawiatury
Jako przykład przypisania makrołańcucha naciśnięciu klawisza funcyjnego,
każmy Ctrl-F1 wywoływać nasz skrypt /usr/local/bin/key_macro.
Po pierwsze powinniśmy dowiedzieć się jaki jest kod klawisza funkcyjnego
F1. Możemy narzędzia użyć showkey(1) i poznać kod naciskając F1.
Zamiast tego możemy poszukać ciągu "F1" w pliku my_keytable.map i
znaleźć następującą linię:
keycode 59 = F1
Sugeruje to że kodem klawisza dla F1 jest 59. Linia ta określa również
że po naciśnięciu F1 sterownik klawiatury powinien wysłać łańcuch
oznaczony kodem "F1". Aby zobaczyć zawartość tego łańcucha, poszukać
można wzoru "string F1" i znaleźć
string F1 = "\033[[A"
Oznacza to że po naciśnięciu klawisza F1 sterownik klawiatury wysyła
"Esc [ [ A" (bez spacji).
Nie powinniśmy zmieniać tego łańcucha, ponieważ niektóre aplikacje
polegają na nim jako na domyślnej czynności klawisza F1.
Możemy jednak zdefiniować nową czynność dla Ctrl-F1, założywszy że
nie jest ona zarezerwowana przez jądro dla innych specjalnych czynności.
Aby obejrzeć przypisania klawisza F1 razem z Ctrl, Shift i innymi
trybami, możemy zaglądnąć do pliku my_keytable.map używając:
# grep 59 my_keytable.map
W przypadku gdy nie ma tam linii z "control keycode 59", możemy użyć
Ctrl-F1 bez problemów (gdy istnieje linia z "shift control keycode 59
nadal wszystko jest ok).
Dodajmy następującą linię do pliku my_keytable.map:
control keycode 59 = key_symbol
gdzie "key_symbol" określać będzie czynność klawisza Ctrl-F1. Jądro
1.2.* pozwala na dynamiczną alokację łańcuchów, ale nazwa dla "key_symbol"
musi zostać wybrana tylko z ustalonego zbioru nazw. Między innymi
dozwolone są symbole F1-F246. Dla my_keytable.map w moim systemie
nieużywane było F21, ale powinieneś obejrzeć swój plik i wybrać
odpowiedni klawsym. Możemy więc dopisać linię:
control keycode 59 = F21
Teraz musimy zdefiniować zawartość F21, dodając linię
string F21 = "/usr/local/bin/key_macro\n"
Podsumowywując, uczyniliśmy dwie zmiany w stosunku do oryginalnego
my_keytable.map: zadeklarowaliśmy nowy łańcuch F21 oraz to że Ctrl-F1
będzie wywoływać zawartość F21.
4.2 Czasowe zmiany w ustawieniach klawiatury
Zmieniwszy właściwie my_keytable.map możemy skopiować zmiany do sterownika
klawiatury jądra używając narzędzia loadkeys(1):
% loadkeys my_keytable.map
Pozwolenie modyfikacji sterownika klawiatury jądra dawane jest każdemu
kto posiada prawa odczytu urządzenia /dev/console.
Aby sprawdzić czy zamierzone zmiany zostały zainstalowane, możemy
użyć narzędzia dumpkeys(1) by sprawdzić wartość F21, na przykład:
% dumpkeys | grep F21
Możemy zobaczyć:
keycode 59 = F1 F11 Console_13 F21
string F21 = "/usr/local/bin/key_macro\012"
co jest ok, bowiem "\012", lub LF, odpowiada \n
Teraz naciśnięcie Ctrl-F1 powinno wywołać skrypt /usr/local/bin/key_macro, tak jak zamierzaliśmy.
4.3 Zmiany na stałe
Zmiany w sterowniku klawiatury jądra narzucone loadkeys(1) trwają do
następnego przeładowania systemu (albo następnego odwołania do loadkeys).
Możemy zmienić plik /etc/rc.d/rc.local aby wywołał loadkeys z naszym
plikiem my_keytable.map jako argumentem. Zamiast tego zmodyfikować
możemy src/linux/drivers/char/defkeymap.c i ponownie skompilować
jądro z nowymi wartościami domyślnymi.
Nie powinniśmy zmieniać pliku defkeymap.c ręcznie, lecz raczej
wygenerować go narzędziem loadkeys(1):
# mv defkeymap.c defkeymap.c.ORIG
# loadkeys --mktable my_keytable.map > defkeymap.c
Następnie powinniśmy wygenerować nowe jądro, zasadniczo zmieniając katalog
na bazowy katalog źródeł jądra, i używając make(1).
W końcu, powinniśmy użyć lilo(1) aby zainstalować i załadować nasze nowe
jądro.
Następna strona
Poprzednia strona
Spis treści
Wyszukiwarka
Podobne podstrony:
Keystroke HOWTO pl (2)Keystroke HOWTO pl 3 (2)Keystroke HOWTO pl 7 (2)Keystroke HOWTO pl 6 (2)Keystroke HOWTO pl (3)Keystroke HOWTO pl 1 (2)Keystroke HOWTO pl 5 (2)keystroke howto plKeystroke HOWTO pl 2 (2)bootdisk howto pl 8PPP HOWTO pl 6 (2)NIS HOWTO pl 1 (2)cdrom howto pl 1jtz howto pl 5PostgreSQL HOWTO pl 14printing howto pl 5debian apt howto plKernel HOWTO pl 12 (2)XFree86 HOWTO pl (3)więcej podobnych podstron