Linux Keystroke HOWTO

Zenon Fortuna zenon@netcom.com
v2.0, kwiecie� 1995
Wersja polska: Gwidon S. Naskrent naskrent@hoth.amu.edu.pl
v1.0, 29 X 1997

1. Co to jest Keystroke-HOWTO?

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.

2. Historia zmian

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

3. Kr�tki opis

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.

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.

5. Przyk�ad skryptu key_macro

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

6. Uwagi

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">

7. Dalsze pomys�y?

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