/usr/share/doc/HOWTO/pl-html/Keystroke-HOWTO.pl.html is in doc-linux-pl-html 2002.06.14-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 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 <CODE>defkeymap.c</CODE> i zbudowanie na nowo
j±dra.
<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± poni¿ej przetestowano na j±drze 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 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*
<P>7 V 94 - wersja 1.0
Wersja wyj¶ciowa Keystroke-HOWTO, oparta w dzia³aniu na wersji
j±dra 1.0
<P>
<H2><A NAME="s3">3. Krótki opis</A></H2>
<P>
<P>Wirtualny terminal Linuxa oraz sterowniki klawiatury przyjmuj± domy¶lny
uk³ad klawiatury taki jak zdefiniowany w pliku <CODE>/drivers/char/defkeymap.
c</CODE>
¼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.
<P>Ustawieniem odpowiedniego ³añcucha dla danego klawisza funkcyjnego mo¿emy
upro¶ciæ wykonywanie wybranych komend, na przyk³ad wywo³uj±c skrypt
pow³oki <CODE>/usr/local/bin/key_macro</CODE>, który mo¿emy utworzyæ i modyfikowaæ
wedle w³asnego uznania.
<P>3. Narzêdzia do modyfikacji sterownika klawiatury.
<P>Mo¿emy u¿yæ loadkeys(1), dumpkeys(1) oraz showkey(1):
<P>
<UL>
<LI>narzêdzie loadkeys(1) pomaga za³adowaæ nowe ci±gi znaków do buforów
klawiatury j±dra, lub przygotowuje nowy kod w C modyfikuj±cy j±dro,</LI>
<LI>dumpkeys(1) powinno byæ u¿ywane dla wydostania bie¿±cego uk³adu
klawiatury do obejrzenia lub modyfikacji,</LI>
<LI>showkey(1) mo¿e nam pomoæ w otrzymaniu kodu klawisza okre¶lonego
klawisza funkcyjnego.</LI>
</UL>
<P>Je¶li twój system linuxowy nie posiada tych narzêdzi, mo¿esz 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¶ u¿yæ
GNUsowskiego <CODE>tar</CODE> aby wypakowaæ potrzebne pliki.
<P>
<H2><A NAME="s4">4. Zmiana pliku uk³adu klawiatury</A></H2>
<P>
<P>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 <CODE>src/linux/drivers/char</CODE>.
<P>Potrzebujemy zmodyfikowaæ plik <CODE>defkeymap.map</CODE>, tak wiêc zróbmy 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 tak¿e du¿y zbiór ró¿nych plików z uk³adami klawiatury w
katalogu <CODE>/usr/lib/kbd/keytables</CODE>, z których <CODE>defkeymap.map</CODE>
mo¿e zostaæ u¿yty w twoim systemie w miejsce
<CODE>src/linux/drivers/char/defkeymap.map</CODE>.
<P>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 <CODE>defkeymap.map</CODE> ni¿ ten który mo¿esz znale¼æ.
<P>Przeczytajmy zawarto¶æ pliku <CODE>my_keytable.map</CODE>: 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".
<P>Wiêcej o sk³adni tego pliku mo¿na przeczytaæ w keytables(5)
<P>
<H2>4.1 Przyk³ad modyfikacji pliku uk³adu klawiatury</H2>
<P>
<P>Jako przyk³ad przypisania makro³añcucha naci¶niêciu klawisza funcyjnego,
ka¿my Ctrl-F1 wywo³ywaæ nasz skrypt <CODE>/usr/local/bin/key_macro</CODE>.
<P>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.
<P>Zamiast tego mo¿emy poszukaæ ci±gu "F1" w pliku <CODE>my_keytable.map</CODE> i
znale¼æ nastêpuj±c± liniê:
<P>
<BLOCKQUOTE><CODE>
<PRE>
keycode 59 = F1
</PRE>
</CODE></BLOCKQUOTE>
<P>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¼æ
<P>
<BLOCKQUOTE><CODE>
<PRE>
string F1 = "\033[[A"
</PRE>
</CODE></BLOCKQUOTE>
<P>Oznacza to ¿e po naci¶niêciu klawisza F1 sterownik klawiatury wysy³a
"Esc [ [ A" (bez spacji).
<P>Nie powinni¶my zmieniaæ tego ³añcucha, poniewa¿ niektóre aplikacje
polegaj± na nim jako na domy¶lnej czynno¶ci klawisza F1.
<P>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:
<P>
<BLOCKQUOTE><CODE>
<PRE>
# grep 59 my_keytable.map
</PRE>
</CODE></BLOCKQUOTE>
<P>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).
<P>Dodajmy nastêpuj±c± liniê do pliku <CODE>my_keytable.map</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
control keycode 59 = key_symbol
</PRE>
</CODE></BLOCKQUOTE>
<P>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 <CODE>my_keytable.map</CODE> w moim systemie
nieu¿ywane by³o F21, ale powiniene¶ obejrzeæ swój plik i wybraæ
odpowiedni klawsym. Mo¿emy wiêc dopisaæ liniê:
<P>
<BLOCKQUOTE><CODE>
<PRE>
control keycode 59 = F21
</PRE>
</CODE></BLOCKQUOTE>
<P>Teraz musimy zdefiniowaæ zawarto¶æ F21, dodaj±c liniê
<P>
<BLOCKQUOTE><CODE>
<PRE>
string F21 = "/usr/local/bin/key_macro\n"
</PRE>
</CODE></BLOCKQUOTE>
<P>Podsumowywuj±c, uczynili¶my dwie zmiany w stosunku do oryginalnego
<CODE>my_keytable.map</CODE>: zadeklarowali¶my nowy ³añcuch F21 oraz to ¿e Ctrl-F1
bêdzie wywo³ywaæ zawarto¶æ F21.
<P>
<H2>4.2 Czasowe zmiany w ustawieniach klawiatury</H2>
<P>
<P>Zmieniwszy w³a¶ciwie my_keytable.map mo¿emy skopiowaæ zmiany do sterownika
klawiatury j±dra u¿ywaj±c narzêdzia loadkeys(1):
<P>
<BLOCKQUOTE><CODE>
<PRE>
% loadkeys my_keytable.map
</PRE>
</CODE></BLOCKQUOTE>
<P>Pozwolenie modyfikacji sterownika klawiatury j±dra dawane jest ka¿demu
kto posiada prawa odczytu urz±dzenia <CODE>/dev/console</CODE>.
<P>Aby sprawdziæ czy zamierzone zmiany zosta³y zainstalowane, mo¿emy
u¿yæ narzêdzia dumpkeys(1) by sprawdziæ warto¶æ F21, na przyk³ad:
<P>
<BLOCKQUOTE><CODE>
<PRE>
% dumpkeys | grep F21
</PRE>
</CODE></BLOCKQUOTE>
<P>Mo¿emy 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 naci¶niêcie Ctrl-F1 powinno wywo³aæ skrypt <CODE>/usr/local/bin/key_macro</CODE>, tak jak zamierzali¶my.
<P>
<H2>4.3 Zmiany na sta³e</H2>
<P>
<P>Zmiany w sterowniku klawiatury j±dra narzucone loadkeys(1) trwaj± do
nastêpnego prze³adowania systemu (albo nastêpnego odwo³ania do loadkeys).
<P>Mo¿emy zmieniæ plik <CODE>/etc/rc.d/rc.local</CODE> aby wywo³a³ loadkeys z naszym
plikiem <CODE>my_keytable.map</CODE> jako argumentem. Zamiast tego zmodyfikowaæ
mo¿emy <CODE>src/linux/drivers/char/defkeymap.c</CODE> i ponownie skompilowaæ
j±dro z nowymi warto¶ciami domy¶lnymi.
<P>Nie powinni¶my zmieniaæ pliku <CODE>defkeymap.c</CODE> rêcznie, lecz raczej
wygenerowaæ go narzêdziem loadkeys(1):
<P>
<BLOCKQUOTE><CODE>
<PRE>
# mv defkeymap.c defkeymap.c.ORIG
# loadkeys --mktable my_keytable.map > defkeymap.c
</PRE>
</CODE></BLOCKQUOTE>
<P>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).
<P>W koñcu, powinni¶my u¿yæ lilo(1) aby zainstalowaæ i za³adowaæ nasze nowe
j±dro.
<P>
<H2><A NAME="s5">5. Przyk³ad skryptu key_macro</A></H2>
<P>
<P>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.
<P>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).
<P>Aby przeczytaæ zrzuty ekranu wirtualnej konsoli nale¿y wpierw przygotowaæ
parê plików urz±dzeñ. Jako root mo¿emy stworzyæ co nastêpuje:
<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>Oczywi¶cie wystarczy mieæ tylko pliki <CODE>/dev/vcs*</CODE> odpowiednie dla wirtualnych
konsoli których siê u¿ywa.
<P>Kod poni¿ej powinien byæ uwa¿any za przyk³ad mo¿liwego pliku
<CODE>/usr/local/bin/key_macro</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!/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
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="s6">6. Uwagi</A></H2>
<P>
<P>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.
<P>Naj¶wie¿sz± kopiê Keystroke-HOWTO znale¼æ mo¿na 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 pomys³y?</A></H2>
<P>
<P>W razie gdyby¶ znalaz³ co¶ wartego dodania do tego dokumentu, prze¶lij
proszê swoje uwagi na adres
<A HREF=""></A>"mailto:zenon@netcom.com" name=
"<CODE>zenon@netcom.com</CODE>"> - dziêki (zf).
<P>
</BODY>
</HTML>
|