File: Keystroke-HOWTO.pl.html

package info (click to toggle)
doc-linux-pl 2002.06.14-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, jessie, jessie-kfreebsd, lenny, squeeze, wheezy
  • size: 6,900 kB
  • ctags: 968
  • sloc: makefile: 66
file content (304 lines) | stat: -rw-r--r-- 11,081 bytes parent folder | download | duplicates (5)
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>