1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
<META HTTP-EQUIV="content-type" content="text/html; charset=iso-8859-2">
<TITLE>Linux Keystroke HOWTO</TITLE>
</HEAD>
<BODY>
<H1>Linux Keystroke HOWTO<BR></H1>
<H2>Zenon Fortuna
<A HREF="mailto:zenon@netcom.com">zenon@netcom.com</A><BR>
v2.0, kwiecie 1995<BR>
<B>Wersja polska: Gwidon S. Naskrent
<A HREF="mailto:naskrent@hoth.amu.edu.pl">naskrent@hoth.amu.edu.pl</A><BR></B>
v1.0, 29 X 1997</H2>
<H2><A NAME="s1">1. Co to jest Keystroke-HOWTO?</A></H2>
<P>
<P>Dokument ten napisany zosta dla uytkownikw ktrzy chc przypisa
specjalne czynnoci niektrym klawiszom na klawiaturze. Sugerowana metoda
to uycie loadkeys(1) bd zmiana <CODE>defkeymap.c</CODE> i zbudowanie na nowo
jdra.
<P>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.
<P>Metod opisan poniej przetestowano na jdrze 1.2.1, zamieszczonym
w dystrybucji 2.2 Slackware.
<P>
<H2><A NAME="s2">2. Historia zmian</A></H2>
<P>
<P>4 IV 95 - wersja 2.0
Przystosowana do wersji jdra 1.2.1;
-proste zmiany w sugerowanych modyfikacjach pliku "my_keytable.map"
-zmodyfikowany przykad "key_macro" ze zrzutami ekranu przez
/dev/vcs*
<P>7 V 94 - wersja 1.0
Wersja wyjciowa Keystroke-HOWTO, oparta w dziaaniu na wersji
jdra 1.0
<P>
<H2><A NAME="s3">3. Krtki opis</A></H2>
<P>
<P>Wirtualny terminal Linuxa oraz sterowniki klawiatury przyjmuj domylny
ukad klawiatury taki jak zdefiniowany w pliku <CODE>/drivers/char/defkeymap.
c</CODE>
rde jdra. Dwunastu klawiszom funkcyjnym PC przyda mona acuchy
przypisane wykonywanym przez nie czynnociom. Po naciniciu ktrego z
tych klawiszy, by moe z dodanymi klawiszami Alt lub Ctrl, biecy
wirtualny terminal dodaje okrelony acuch do swoich buforw danych
wejciowych i wyjciowych, emulujc w efekcie wprowadzenie owego acucha
tak jakby zosta wpisany z klawiatury.
<P>Ustawieniem odpowiedniego acucha dla danego klawisza funkcyjnego moemy
uproci wykonywanie wybranych komend, na przykad wywoujc skrypt
powoki <CODE>/usr/local/bin/key_macro</CODE>, ktry moemy utworzy i modyfikowa
wedle wasnego uznania.
<P>3. Narzdzia do modyfikacji sterownika klawiatury.
<P>Moemy uy loadkeys(1), dumpkeys(1) oraz showkey(1):
<P>
<UL>
<LI>narzdzie loadkeys(1) pomaga zaadowa nowe cigi znakw do buforw
klawiatury jdra, lub przygotowuje nowy kod w C modyfikujcy jdro,</LI>
<LI>dumpkeys(1) powinno by uywane dla wydostania biecego ukadu
klawiatury do obejrzenia lub modyfikacji,</LI>
<LI>showkey(1) moe nam pomo w otrzymaniu kodu klawisza okrelonego
klawisza funkcyjnego.</LI>
</UL>
<P>Jeli twj system linuxowy nie posiada tych narzdzi, moesz je zdoby
poprzez ftp jako pakiet <CODE>kbd-0.89.tar.gz</CODE> lub <CODE>kbd-0.90.tar.gz</CODE> z
<CODE>sunsite.unc.edu:/pub/Linux/system/Keyboards</CODE>, lub
<CODE>tsx-11.mit.edu:/pub/linux/sources/system</CODE> Powiniene uy
GNUsowskiego <CODE>tar</CODE> aby wypakowa potrzebne pliki.
<P>
<H2><A NAME="s4">4. Zmiana pliku ukadu klawiatury</A></H2>
<P>
<P>Jdro Linuxa zawiera skompilowany kod defkeymap.c, ktry tworzony jest
narzdziem loadkeys(1) z pliku defkeymap.map. Oba pliki umieszczone s
w katalogu <CODE>src/linux/drivers/char</CODE>.
<P>Potrzebujemy zmodyfikowa plik <CODE>defkeymap.map</CODE>, tak wic zrbmy jego
lokaln kopi przez
<P>
<BLOCKQUOTE><CODE>
<PRE>
# cp defkeymap.map my_keytable.map
</PRE>
</CODE></BLOCKQUOTE>
<P>lub
<P>
<BLOCKQUOTE><CODE>
<PRE>
# dumpkeys > my_keytable.map
</PRE>
</CODE></BLOCKQUOTE>
<P>Istnieje take duy zbir rnych plikw z ukadami klawiatury w
katalogu <CODE>/usr/lib/kbd/keytables</CODE>, z ktrych <CODE>defkeymap.map</CODE>
moe zosta uyty w twoim systemie w miejsce
<CODE>src/linux/drivers/char/defkeymap.map</CODE>.
<P>Poleca si metod uywajc dumpkeys(1), poniewa zdarzy si moe i
twoje jdro byo ju modyfikowane lub utworzony dla ciebie z innym
plikiem <CODE>defkeymap.map</CODE> ni ten ktry moesz znale.
<P>Przeczytajmy zawarto pliku <CODE>my_keytable.map</CODE>: znajduje si tam ponad
300 linii kodu, i moemy tam znale trzy grupy deklaracji: pierwsza
skada si z linii zawierajcych sowo "keycode", by moe z doczonymi
dodatkowymi sowami w rodzaju "alt", "control", itd. Druga grupa
skada si z linii ze sowem "string", trzecia z linii ze sowem
"compose".
<P>Wicej o skadni tego pliku mona przeczyta w keytables(5)
<P>
<H2>4.1 Przykad modyfikacji pliku ukadu klawiatury</H2>
<P>
<P>Jako przykad przypisania makroacucha naciniciu klawisza funcyjnego,
kamy Ctrl-F1 wywoywa nasz skrypt <CODE>/usr/local/bin/key_macro</CODE>.
<P>Po pierwsze powinnimy dowiedzie si jaki jest kod klawisza funkcyjnego
F1. Moemy narzdzia uy showkey(1) i pozna kod naciskajc F1.
<P>Zamiast tego moemy poszuka cigu "F1" w pliku <CODE>my_keytable.map</CODE> i
znale nastpujc lini:
<P>
<BLOCKQUOTE><CODE>
<PRE>
keycode 59 = F1
</PRE>
</CODE></BLOCKQUOTE>
<P>Sugeruje to e kodem klawisza dla F1 jest 59. Linia ta okrela rwnie
e po naciniciu F1 sterownik klawiatury powinien wysa acuch
oznaczony kodem "F1". Aby zobaczy zawarto tego acucha, poszuka
mona wzoru "string F1" i znale
<P>
<BLOCKQUOTE><CODE>
<PRE>
string F1 = "\033[[A"
</PRE>
</CODE></BLOCKQUOTE>
<P>Oznacza to e po naciniciu klawisza F1 sterownik klawiatury wysya
"Esc [ [ A" (bez spacji).
<P>Nie powinnimy zmienia tego acucha, poniewa niektre aplikacje
polegaj na nim jako na domylnej czynnoci klawisza F1.
<P>Moemy jednak zdefiniowa now czynno dla Ctrl-F1, zaoywszy e
nie jest ona zarezerwowana przez jdro dla innych specjalnych czynnoci.
Aby obejrze przypisania klawisza F1 razem z Ctrl, Shift i innymi
trybami, moemy zagldn do pliku my_keytable.map uywajc:
<P>
<BLOCKQUOTE><CODE>
<PRE>
# grep 59 my_keytable.map
</PRE>
</CODE></BLOCKQUOTE>
<P>W przypadku gdy nie ma tam linii z "control keycode 59", moemy uy
Ctrl-F1 bez problemw (gdy istnieje linia z "shift control keycode 59
nadal wszystko jest ok).
<P>Dodajmy nastpujc lini do pliku <CODE>my_keytable.map</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
control keycode 59 = key_symbol
</PRE>
</CODE></BLOCKQUOTE>
<P>gdzie "key_symbol" okrela bdzie czynno klawisza Ctrl-F1. Jdro
1.2.* pozwala na dynamiczn alokacj acuchw, ale nazwa dla "key_symbol"
musi zosta wybrana tylko z ustalonego zbioru nazw. Midzy innymi
dozwolone s symbole F1-F246. Dla <CODE>my_keytable.map</CODE> w moim systemie
nieuywane byo F21, ale powiniene obejrze swj plik i wybra
odpowiedni klawsym. Moemy wic dopisa lini:
<P>
<BLOCKQUOTE><CODE>
<PRE>
control keycode 59 = F21
</PRE>
</CODE></BLOCKQUOTE>
<P>Teraz musimy zdefiniowa zawarto F21, dodajc lini
<P>
<BLOCKQUOTE><CODE>
<PRE>
string F21 = "/usr/local/bin/key_macro\n"
</PRE>
</CODE></BLOCKQUOTE>
<P>Podsumowywujc, uczynilimy dwie zmiany w stosunku do oryginalnego
<CODE>my_keytable.map</CODE>: zadeklarowalimy nowy acuch F21 oraz to e Ctrl-F1
bdzie wywoywa zawarto F21.
<P>
<H2>4.2 Czasowe zmiany w ustawieniach klawiatury</H2>
<P>
<P>Zmieniwszy waciwie my_keytable.map moemy skopiowa zmiany do sterownika
klawiatury jdra uywajc narzdzia loadkeys(1):
<P>
<BLOCKQUOTE><CODE>
<PRE>
% loadkeys my_keytable.map
</PRE>
</CODE></BLOCKQUOTE>
<P>Pozwolenie modyfikacji sterownika klawiatury jdra dawane jest kademu
kto posiada prawa odczytu urzdzenia <CODE>/dev/console</CODE>.
<P>Aby sprawdzi czy zamierzone zmiany zostay zainstalowane, moemy
uy narzdzia dumpkeys(1) by sprawdzi warto F21, na przykad:
<P>
<BLOCKQUOTE><CODE>
<PRE>
% dumpkeys | grep F21
</PRE>
</CODE></BLOCKQUOTE>
<P>Moemy zobaczy:
<P>
<BLOCKQUOTE><CODE>
<PRE>
keycode 59 = F1 F11 Console_13 F21
string F21 = "/usr/local/bin/key_macro\012"
</PRE>
</CODE></BLOCKQUOTE>
<P>co jest ok, bowiem "\012", lub LF, odpowiada \n
<P>Teraz nacinicie Ctrl-F1 powinno wywoa skrypt <CODE>/usr/local/bin/key_macro</CODE>, tak jak zamierzalimy.
<P>
<H2>4.3 Zmiany na stae</H2>
<P>
<P>Zmiany w sterowniku klawiatury jdra narzucone loadkeys(1) trwaj do
nastpnego przeadowania systemu (albo nastpnego odwoania do loadkeys).
<P>Moemy zmieni plik <CODE>/etc/rc.d/rc.local</CODE> aby wywoa loadkeys z naszym
plikiem <CODE>my_keytable.map</CODE> jako argumentem. Zamiast tego zmodyfikowa
moemy <CODE>src/linux/drivers/char/defkeymap.c</CODE> i ponownie skompilowa
jdro z nowymi wartociami domylnymi.
<P>Nie powinnimy zmienia pliku <CODE>defkeymap.c</CODE> rcznie, lecz raczej
wygenerowa go narzdziem loadkeys(1):
<P>
<BLOCKQUOTE><CODE>
<PRE>
# mv defkeymap.c defkeymap.c.ORIG
# loadkeys --mktable my_keytable.map > defkeymap.c
</PRE>
</CODE></BLOCKQUOTE>
<P>Nastpnie powinnimy wygenerowa nowe jdro, zasadniczo zmieniajc katalog
na bazowy katalog rde jdra, i uywajc make(1).
<P>W kocu, powinnimy uy lilo(1) aby zainstalowa i zaadowa nasze nowe
jdro.
<P>
<H2><A NAME="s5">5. Przykad skryptu key_macro</A></H2>
<P>
<P>Szczeglnie uytecznym skryptem dla prostych operacji zwizanych z
naciskaniem klawiszy moe by skrypt powoki przygotowywujcy, bd
drukujcy, zrzut ekranu.
<P>Przykad ten uleg zmianie od czasw wersji 1.0 Linuxa, z powodu zmian
w jdrze, ktre nie udostpnia ju wywoania systemowego ioctl(0,TIOCLINUX).
<P>Aby przeczyta zrzuty ekranu wirtualnej konsoli naley wpierw przygotowa
par plikw urzdze. Jako root moemy stworzy co nastpuje:
<P>
<BLOCKQUOTE><CODE>
<PRE>
# mknod /dev/vcs1 c 7 1
# mknod /dev/vcs2 c 7 2
...
# mknod /dev/vcs63 c 7 63
</PRE>
</CODE></BLOCKQUOTE>
<P>Oczywicie wystarczy mie tylko pliki <CODE>/dev/vcs*</CODE> odpowiednie dla wirtualnych
konsoli ktrych si uywa.
<P>Kod poniej powinien by uwaany za przykad moliwego pliku
<CODE>/usr/local/bin/key_macro</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!/bin/sh
#
# Oto przykad uytecznego 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 ponisz lini gdy chcesz by zrzut by drukowany
# lpr $FILE
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="s6">6. Uwagi</A></H2>
<P>
<P>Nie ma praktycznego limitu sumy dugoci wszystkich acuchw ktre
moglibymy chcie zaadowa do sterownika klawiatury. Poprzedni stay
bufor dugoci FUNC_BUFSIZE (ustawiony na 512 bajtw) zosta w Linuxie
1.2.* zastpiony strategi dynamicznego przydzielania buforw w kawakach
po 512 bajtw kady.
<P>Najwiesz kopi Keystroke-HOWTO znale mona w
<P>
<A HREF=""></A>"ftp.netcom.com:/pub/ze/zenon/linux/howto"
name="ftp.netcom.com:/pub/ze/zenon/linux/howto">
<P>
<H2><A NAME="s7">7. Dalsze pomysy?</A></H2>
<P>
<P>W razie gdyby znalaz co wartego dodania do tego dokumentu, przelij
prosz swoje uwagi na adres
<A HREF=""></A>"mailto:zenon@netcom.com" name=
"<CODE>zenon@netcom.com</CODE>"> - dziki (zf).
<P>
</BODY>
</HTML>
|