![]() |
|
Dokument ten napisany zosta� dla u�ytkownik�w kt�rzy chc� przypisa�
specjalne czynno�ci niekt�rym klawiszom na klawiaturze. Sugerowana metoda
to u�ycie loadkeys(1) b�d� zmiana defkeymap.c
i zbudowanie na nowo
j�dra.
Tekst ten NIE omawia przemapowywania klawiszy klawiatury, np. Delete czy BackSpace. Co do informacji na temat przemapowywania klawiszy przeczytaj Backspace Mimi-HOWTO autorstwa Stevena Lee.
Metod� opisan� poni�ej przetestowano na j�drze 1.2.1, zamieszczonym w dystrybucji 2.2 Slackware.
4 IV 95 - wersja 2.0 Przystosowana do wersji j�dra 1.2.1; -proste zmiany w sugerowanych modyfikacjach pliku "my_keytable.map" -zmodyfikowany przyk�ad "key_macro" ze zrzutami ekranu przez /dev/vcs*
7 V 94 - wersja 1.0 Wersja wyj�ciowa Keystroke-HOWTO, oparta w dzia�aniu na wersji j�dra 1.0
Wirtualny terminal Linuxa oraz sterowniki klawiatury przyjmuj� domy�lny
uk�ad klawiatury taki jak zdefiniowany w pliku /drivers/char/defkeymap.
c
�r�de� j�dra. Dwunastu klawiszom funkcyjnym PC przyda� mo�na �a�cuchy
przypisane wykonywanym przez nie czynno�ciom. Po naci�ni�ciu kt�rego� z
tych klawiszy, by� mo�e z dodanymi klawiszami Alt lub Ctrl, bie��cy
wirtualny terminal dodaje okre�lony �a�cuch do swoich bufor�w danych
wej�ciowych i wyj�ciowych, emuluj�c w efekcie wprowadzenie owego �a�cucha
tak jakby zosta� wpisany z klawiatury.
Ustawieniem odpowiedniego �a�cucha dla danego klawisza funkcyjnego mo�emy
upro�ci� wykonywanie wybranych komend, na przyk�ad wywo�uj�c skrypt
pow�oki /usr/local/bin/key_macro
, kt�ry mo�emy utworzy� i modyfikowa�
wedle w�asnego uznania.
3. Narz�dzia do modyfikacji sterownika klawiatury.
Mo�emy u�y� loadkeys(1), dumpkeys(1) oraz showkey(1):
Je�li tw�j system linuxowy nie posiada tych narz�dzi, mo�esz je zdoby�
poprzez ftp jako pakiet kbd-0.89.tar.gz
lub kbd-0.90.tar.gz
z
sunsite.unc.edu:/pub/Linux/system/Keyboards
, lub
tsx-11.mit.edu:/pub/linux/sources/system
Powiniene� u�y�
GNUsowskiego tar
aby wypakowa� potrzebne pliki.
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)
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.
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.
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.
Szczeg�lnie u�ytecznym skryptem dla prostych operacji zwi�zanych z naciskaniem klawiszy mo�e by� skrypt pow�oki przygotowywuj�cy, b�d� drukuj�cy, zrzut ekranu.
Przyk�ad ten uleg� zmianie od czas�w wersji 1.0 Linuxa, z powodu zmian w j�drze, kt�re nie udost�pnia ju� wywo�ania systemowego ioctl(0,TIOCLINUX).
Aby przeczyta� zrzuty ekranu wirtualnej konsoli nale�y wpierw przygotowa� par� plik�w urz�dze�. Jako root mo�emy stworzy� co nast�puje:
# mknod /dev/vcs1 c 7 1
# mknod /dev/vcs2 c 7 2
...
# mknod /dev/vcs63 c 7 63
Oczywi�cie wystarczy mie� tylko pliki /dev/vcs*
odpowiednie dla wirtualnych
konsoli kt�rych si� u�ywa.
Kod poni�ej powinien by� uwa�any za przyk�ad mo�liwego pliku
/usr/local/bin/key_macro
:
#!/bin/sh
#
# Oto przyk�ad u�ytecznego skryptu key_macro
#
VT_NUMBER=`tty|cut -c9-`
FILE=/tmp/vt$VT_NUMBER.dump
cp /dev/vcs$VT_NUMBER $FILE
echo zrzut ekranu zachowany w $FILE
#
# Odkomentuj poni�sz� lini� gdy chcesz by zrzut by� drukowany
# lpr $FILE
Nie ma praktycznego limitu sumy d�ugo�ci wszystkich �a�cuch�w kt�re mogliby�my chcie� za�adowa� do sterownika klawiatury. Poprzedni sta�y bufor d�ugo�ci FUNC_BUFSIZE (ustawiony na 512 bajt�w) zosta� w Linuxie 1.2.* zast�piony strategi� dynamicznego przydzielania bufor�w w kawa�kach po 512 bajt�w ka�dy.
Naj�wie�sz� kopi� Keystroke-HOWTO znale�� mo�na w
"ftp.netcom.com:/pub/ze/zenon/linux/howto" name="ftp.netcom.com:/pub/ze/zenon/linux/howto">
W razie gdyby� znalaz� co� wartego dodania do tego dokumentu, prze�lij
prosz� swoje uwagi na adres
"mailto:zenon@netcom.com" name=
"zenon@netcom.com
"> - dzi�ki (zf).
# #
Hosting by: Hurra Communications Sp. z o.o.
Generated: 2007-01-26 18:02:23