This file is indexed.

/usr/share/doc/HOWTO/pl-html/Keystroke-HOWTO.pl.html is in doc-linux-pl-html 2002.06.14-3.

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>