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
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
|
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN"
"dtd/kdex.dtd" [
<!ENTITY kappname "&ksysguard;">
<!ENTITY package "tdebase">
<!ENTITY % addindex "IGNORE">
<!ENTITY % German "INCLUDE"> <!-- change language only here -->
]>
<book lang="&language;">
<bookinfo>
<title>Das Handbuch zu &ksysguard;</title>
<authorgroup>
<author>&Chris.Schlaeger;&Chris.Schlaeger.mail; </author>
<othercredit role="developer">&Chris.Schlaeger;&Chris.Schlaeger.mail; </othercredit>
<othercredit role="developer">&Tobias.Koenig;&Tobias.Koenig.mail; </othercredit>
<othercredit role="translator"><firstname>Marco</firstname><surname>Wegner</surname><affiliation><address><email>[email protected]</email></address></affiliation><contrib>Deutsche Übersetzung</contrib></othercredit>
</authorgroup>
<copyright>
<year>2000</year>
<holder>&Chris.Schlaeger;</holder>
</copyright>
<legalnotice>&FDLNotice;</legalnotice>
<date>2000-12-14</date>
<releaseinfo>1.00.00</releaseinfo>
<abstract><para>&ksysguard; ist ein netzwerkfähiger Prozess-Verwalter und Systemmonitor mit der zusätzlichen Fähigkeit von <application>top</application>.</para></abstract>
<keywordset>
<keyword>KDE</keyword>
<keyword>KSysGuard</keyword>
<keyword>Prozessmonitor</keyword>
<keyword>top</keyword>
<keyword>ps</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Einleitung</title>
<para>&ksysguard; übernimmt in &kde; die Aufgabe der Prozessverwaltung und Leistungsüberwachung. Es bietet eine Client/Server-Architektur, die das Überwachen von sowohl lokalen als auch Netzwerk-Rechnern zulässt. Die graphische Oberfläche verwendet so genannte Sensoren, um die Informationen zu bekommen, die auf ihr dargestellt werden. Ein Sensor kann einfache Werte oder auch komplexere Informationen wie Tabellen liefern. Für jede Art von Information werden eine oder mehrere Anzeigen bereitgestellt. Diese Anzeigen werden in Arbeitsblättern zusammengefasst, die gespeichert und unabhängig voneinander auch wieder geladen werden können. Damit ist &ksysguard; nicht nur ein einfacher Prozess-Verwalter, sondern gleichzeitig auch ein sehr mächtiges Werkzeug zur Kontrolle großer Server-Verbände.</para>
</chapter>
<chapter id="usingtheksysguard">
<title>&ksysguard; verwenden</title>
<sect1 id="getting-started">
<title>Erste Schritte</title>
<para>&ksysguard; kann im K-Menü gestartet werden, indem Sie den Eintrag <guimenuitem>Systemüberwachung</guimenuitem> im Menü <guimenu>System</guimenu> anklicken. Es ist ebenfalls möglich, das Programm durch Eingabe des Befehls <command>ksysguard</command> in einem Befehlsfenster zu starten.</para>
<para>Das Hauptfenster von &ksysguard; besteht aus einer Menüleiste, optionaler Werkzeug- und Statusleiste sowie dem Sensor-Browser und der Arbeitsfläche. Wenn man die Anwendung zum ersten Mal startet, wird der lokale Rechner als <guilabel>localhost</guilabel> im Sensor-Browser angezeigt. Außerdem gibt es zwei Karteikarten im Arbeitsbereich. Dies ist die Standard-Einstellung.</para>
<para>Diese Standard-Einstellung ist für den unerfahrenen Anwender völlig ausreichend, um ein einfaches System verwalten zu können. Ein erfahrener Anwender oder gar ein Systemadministrator eines großen Netzwerks wird andere Anforderungen haben. Um eine große Bandbreite an Anwendern anzusprechen, wurde &ksysguard; sehr flexibel gestaltet.</para>
</sect1>
<sect1 id="the-sensor-browser">
<title>Der Sensor-Browser</title>
<para>Der Sensor-Browser stellt die registrierten Rechner und deren Sensoren in einer Baumansicht dar. Um eine Verzweigung zu öffnen oder zu schließen, klickt man auf den entsprechenden Knoten. Jeder Sensor überwacht einen bestimmten Systemwert.</para>
<sect2 id="connectingtootherhosts">
<title>Verbindung zu anderen Rechnern herstellen</title>
<para>Um eine Verbindung zu einem neuen Rechner herzustellen, verwendet man <guimenuitem>Mit Rechner verbinden ...</guimenuitem> aus dem Menü <guimenu>Datei</guimenu>. Daraufhin öffnet sich ein Dialogfenster, in dem man den Namen des Rechners eingeben kann, zu dem eine Verbindung hergestellt werden soll. Unterhalb des Eingabefeldes für den Namen lässt sich der Verbindungstyp auswählen. Die Voreinstellung ist <application>ssh</application>, die so genannte Secure Shell (Sichere Shell). Ebenfalls auswählen kann man <application>rsh</application>, die Remote Shell, sowie den Dämon-Modus auswählen. Klicken Sie <guibutton>OK</guibutton>, um die Verbindung herzustellen. Kurz darauf wird der neue Rechner im Sensor-Browser erscheinen, und Sie können die Liste der Sensoren durchsuchen.</para>
<para>Um eine Verbindung herzustellen, muss auf dem Netzwerkrechner ein Programm mit dem Namen <application>ksysguardd</application> installiert sein, das in einem der folgenden Modi gestartet werden kann.</para>
<variablelist>
<varlistentry>
<term>Dämon-Modus</term>
<listitem>
<para>Man kann <application>ksysguardd</application> beim Hochfahren des Systems im <guilabel>Dämon</guilabel>-Modus starten, indem man den Parameter <parameter>-d</parameter> als Argument hinzufügt. In diesem Fall muss man den Dämon-Modus im Verbindungsdialog von <application>ksysguard</application> auswählen. Ein Nachteil dieses Verbindungstyps ist, dass sich der Prozess weder beenden noch innerhalb der <guilabel>Prozesstabelle</guilabel> in der Priorität verändern lässt. Außerdem erfolgt der Datenaustausch über das Netzwerk nicht verschlüsselt.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Shell-Modus</term>
<listitem>
<para>In diesem Modus wird <application>ksysguardd</application> zum Zeitpunkt der Verbindung von <application>ksysguard</application> gestartet. Um dies zu ermöglichen, muss der Ordner, in dem sich <application>ksysguardd</application> befindet, in der Umgebungsvariable <envar>PATH</envar> enthalten sein. Leider liest ssh die Datei <filename>.profile</filename> nicht ein, so dass Ihre Einstellungen für <envar>PATH</envar> nicht verfügbar sein werden. Stattdessen verwendet es eine Voreinstellung für <envar>PATH</envar> wie &zb; <parameter>/bin:/usr/bin</parameter>. Da &kde; mit ziemlicher Sicherheit in keinem dieser Ordner installiert ist, müssen Sie eine Datei in Ihrem Persönlichen Ordner erstellen oder anpassen. Diese Datei heißt <filename>environment</filename> und muss sich in einem versteckten Ordner mit dem Namen <filename>.ssh</filename> befinden. Schauen Sie bitte für weitere Informtionen auch in die Handbuch-Seiten von <application>ssh</application>. Die Datei muss eine Zeile wie die folgende enthalten:</para>
<screen><userinput>PATH=/bin:/usr/bin:/opt/kde/bin</userinput>
</screen>
<para>Dieses Beipiel nimmt an, dass <application>ksysguardd</application> sich in <filename>/opt/kde/bin/ksysguardd</filename> befindet.</para>
<tip><para>Verwenden Sie <application>ssh</application>, dann sollten Sie sicherstellen, dass sich auf dem Netzwerkrechner eine Datei mit dem Namen <filename>identity.pub</filename> befindet und außerdem der Rechnername des Netzwerkrechners auf Ihrem Rechner registriert ist. Am einfachsten können Sie dies überprüfen, indem Sie <command>ssh <option>remotehost ksysguardd</option></command> in einem Befehlsfenster eingeben. Wenn Sie von <application>ksysguardd</application> begrüßt werden, ist alles in Ordnung, und Sie können <userinput>quit</userinput> eingeben.</para></tip>
</listitem>
</varlistentry>
</variablelist>
<note><para>Für Experten: <application>ksysguardd</application> ist ein sehr kleines Programm, das nur gegen die libc gelinkt ist. Daher kann es auch auf Rechnern eingesetzt werden, auf denen kein &kde; installiert ist - wie zum Beispiel auf Servern. Falls "Benutzerdefinierter Befehl" aus dem Menü "Rechner verbinden" gewählt wird, muss der vollständige Befehl angegeben werden, um <application>ksysguardd</application> zu starten.</para></note>
</sect2>
<sect2 id="disconnecting-hosts">
<title>Verbindungen trennen</title>
<para>Um die Verbindung zu einem Rechner zu trennen, wählen Sie erst den Rechner im Sensor-Browser und anschließend <guimenuitem>Verbindung zu Rechner abbauen</guimenuitem> aus dem Menü <guimenu>Datei</guimenu>. Falls noch Sensoren in Verwendung sind, dann werden die entsprechenden Anzeigen deaktiviert und nicht mehr aktualisiert.</para>
</sect2>
</sect1>
<sect1 id="the-workspace">
<title>Die Arbeitsfläche</title>
<para>Die Arbeitsfläche ist in Arbeitsblättern organisiert. Wählen Sie <guimenuitem>Neu</guimenuitem> aus dem Menü <guimenu>Datei</guimenu>, um ein neues Arbeitsblatt zu erstellen. Ein Dialog wird geöffnet, in dem Sie den Titel, die Anzahl der Zeilen und Spalten sowie das Aktualisierungs-Intervall festlegen können. Um ein Arbeitsblatt wieder zu entfernen, wählen Sie <guimenuitem>Schließen</guimenuitem> aus dem Menü <guimenu>Datei</guimenu>. Alle Änderungen werden im Arbeitsblatt gespeichert. Falls ein Arbeitsblatt bisher noch nicht gespeichert wurde, dann werden Sie nach einem Dateinamen gefragt. Arbeitsblätter bestehen aus Zellen, die in einem Raster angeordnet sind.</para>
<para>Jede Zelle kann eine Anzeige für einen oder mehrere Sensoren enthalten. Sie können die Anzeige für eine Zelle festlegen, indem Sie einen Sensor aus dem Sensor-Browser auf diese Zelle ziehen. Falls es für den Sensor mehr als nur eine Möglichkeit zur Anzeige gibt, dann wird ein Aufklappmenü erscheinen. Dort können Sie dann die von Ihnen bevorzugte Anzeige auswählen. Bestimmte Anzeigen können auch mehr als nur einen Sensor anzeigen. Sie fügen weitere Sensoren zu einer Anzeige hinzu, indem Sie sie aus dem Sensor-Browser auf eine bereits existierende Anzeige ziehen.</para>
<para>Arbeitsblätter können eingerichtet werden, indem man auf <guimenuitem>Arbeitsblatt-Einstellungen</guimenuitem> im Menü <guimenu>Bearbeiten</guimenu> klickt. Im Dialog, der sich daraufhin öffnet, können die Anzahl der Zeilen und Spalten sowie das Aktualisierungs-Intervall festgelegt werden. Dieses Aktualisierungs-Intervall wird von allen Anzeigen des Arbeitsblattes verwendet, bei denen <guilabel>Aktualisierungs-Intervall des Arbeitsblattes verwenden</guilabel> in den Einstellungen für das Aktualisierungs-Intervall angekreuzt wurde.</para>
<para>Der Eintrag <guimenuitem>Stil festlegen</guimenuitem> aus dem Menü <guimenu>Einstellungen</guimenu> lässt Sie die globalen Stil-Attribute einrichten und auf das aktuelle Arbeitsblatt anwenden.</para>
<para>Anzeigen können durch Klicken mit der rechten Maustaste eingerichtet werden. Aus dem dann erscheinenden Aufklappmenü können Sie dann auswählen, ob Sie die Eigenschaften der Anzeige ändern oder die Anzeige vom Arbeitsblatt entfernen möchten. Außerdem können Sie das Aktualisierungs-Intervall und den -Typ festlegen sowie die Aktualisierung unterbrechen und wieder neu starten.</para>
<sect2 id="signal-plotter">
<title>Signal-Plotter</title>
<para>Der Signal-Plotter stellt die Anzeigen von einem oder mehreren Sensoren bezüglich der Zeit dar. Falls mehrere Sensoren angezeigt werden, werden deren Werte in verschiedenen Farben dargestellt. Ist die Anzeige groß genug, so wird ein Gitter angezeigt, das den Bereich der Werte veranschaulicht. Standardmäßig ist die automatische Bereichsfeststellung aktiv, sodass Minimal- und Maximalwert automatisch gesetzt werden. Wollen Sie jedoch feste Minimal- und Maximalwerte verwenden, können Sie die automatische Bereichsfeststellung deaktivieren und die gewünschten Werte im Dialog Eigenschaften festlegen.</para>
</sect2>
<sect2 id="multimeter">
<title>Multimeter</title>
<para>Ein Multimeter stellt die Sensorwerte als digitalen Zählen dar. Im Dialog Eigenschaften können Sie eine untere und obere Grenze festlegen. Falls eine dieser Grenzen dann unter- oder überschritten wird, wird die Anzeige in der Alarm-Farbe dargestellt.</para>
</sect2>
<sect2 id="process-controller">
<title>Prozesstabelle</title>
<para>Die Prozesstabelle zeigt eine Liste aller Prozesse auf Ihrem System. Diese Liste kann nach jeder Spalte sortiert werden. Klicken Sie einfach mit der linken Maustaste auf den Kopf der Spalte, in dem sich die Überschrift befindet. </para>
<para>Die Liste zeigt folgende Informationen über jeden Prozess. Beachten Sie bitte, dass nicht alle Eigenschaften auf jedem Betriebssystem verfügbar sind.</para>
<variablelist>
<varlistentry>
<term><guilabel>Name</guilabel></term>
<listitem><para>Der Name der ausführbaren Datei, die den Prozess gestartet hat.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><guilabel>PID</guilabel></term>
<listitem><para>Die Prozess-<abbrev>ID</abbrev>. Jeder Prozess erhält eine eigene Nummer.</para></listitem>
</varlistentry>
<varlistentry>
<term><guilabel>PPID</guilabel></term>
<listitem><para>Die Prozess-<abbrev>ID</abbrev> des so genannten Parent-Prozesses (in etwa "Eltern-Prozess").</para>
</listitem>
</varlistentry>
<varlistentry>
<term><guilabel>UID</guilabel></term>
<listitem><para>Die <abbrev>ID</abbrev> des Anwenders (Users), der den Prozess gestartet hat.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><guilabel>GID</guilabel></term>
<listitem><para>Die <abbrev>ID</abbrev> der Gruppe, zu der der Prozess gehört.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Status</guilabel></term>
<listitem><para>Der Status des Prozesses.</para></listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Nutzer %</guilabel></term>
<listitem>
<para>Die Prozessor-Last des Prozesses im Nutzerbereich (in Prozent).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><guilabel>System %</guilabel></term>
<listitem>
<para>Die Prozessor-Last des Prozesses im Systembereich (in Prozent).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Priorität</guilabel></term>
<listitem><para>Die Priorität des Prozesses.</para></listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Vm-Größe</guilabel></term>
<listitem><para>Die Gesamtgröße des virtuellen Speichers, den der Prozess nutzt (in KBytes).</para></listitem>
</varlistentry>
<varlistentry>
<term><guilabel>VmRss</guilabel></term>
<listitem><para>Die Gesamtgröße des physikalischen Speichers, den der Prozess nutzt (in KBytes).</para></listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Benutzer</guilabel></term>
<listitem><para>Der Anmelde-Name des Anwenders, der den Prozess gestartet hat.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><guilabel>Befehl</guilabel></term>
<listitem><para>Der komplette Befehl zum Starten des Prozesses.</para></listitem>
</varlistentry>
</variablelist>
<para>Unter der Tabelle befinden sich vier Knöpfe, die jetzt in der Reihenfolge von links nach rechts beschrieben werden.</para>
<sect3 id="the-tree-view">
<title>Die <guibutton>Baum</guibutton>-Ansicht</title>
<para>Die Baumansicht wurde erstellt, um die Beziehungen zwischen den laufenden Prozessen darzustellen. Ein Prozess, der von einem anderen Prozess gestartet wurde, wird als Kind dieses Prozesses ("Child Process") bezeichnet. Eine Baumansicht ist ein eleganter Weg, um diese Eltern-Kind-Beziehungen darzustellen. Der Prozess <emphasis>init</emphasis> ist der Hauptprozess für alle anderen Prozesse.</para>
<para>Wenn Sie an den Kind-Prozessen von bestimmten anderen Prozessen nicht interessiert sind, können Sie auf das kleine Kästchen links vom Prozess klicken, und der Unterbaum wird ausgeblendet. Ein weiterer Klick auf dieses Kästchen wird den Unterbaum wieder aufklappen.</para>
</sect3>
<sect3 id="the-process-filter">
<title>Der Prozess-Filter </title>
<para>Der Prozess-Filter kann verwendet werden, um die Anzahl der darzustellenden Prozesse in der Tabelle zu verkleinern. Sie können Prozesse herausfiltern, an denen Sie nicht interessiert sind. Gegenwärtig können Sie alle Prozesse, Systemprozesse, Benutzerprozesse oder eigene Prozesse wählen.</para>
</sect3>
<sect3 id="therefreshbutton">
<title>Der Knopf <guibutton>Neu aufbauen</guibutton> </title>
<para>Dieser Knopf kann verwendet werden, um einen sofortigen Neuaufbau der Prozessliste zu erzwingen.</para>
</sect3>
<sect3 id="thekillbutton">
<title>Der Knopf <guibutton>Beenden (kill)</guibutton> </title>
<para>Wenn Sie einen oder mehrere Prozesse ausgewählt haben, können Sie auf den Knopf <guibutton>Beenden (kill)</guibutton> klicken, um die Prozesse zu beenden. Ein so genannter <errorcode>SIGKIL</errorcode> wird an die Prozesse gesendet. Dieses Signal veranlasst die Prozesse zum sofortigen Beenden. Falls die Anwendungen noch ungespeicherte Daten hatte, gehen diese verloren. Verwenden Sie diesen Knopf also mit Vorsicht.</para>
</sect3>
</sect2>
<sect2 id="bargraph">
<title>Balkengraphik</title>
<para>Eine Balkengraphik stellt Sensorwerte als Balken dar. Im Dialog Eigenschaften können Sie einen Minimal- und Maximalwert sowie eine Unter- und Obergrenze festlegen. Wird eine dieser Grenzen unter- oder überschritten, erfolgt die Darstellung der Anzeige in der Alarm-Farbe.</para>
</sect2>
<sect2 id="sensorlogger">
<title>Sensor-Protokoll</title>
<para>Das Sensor-Protokoll stellt keine Werte dar, sondern schreibt diese zusammen mit Angaben über Datum und Zeit in eine Datei. Für jeden Sensor können Sie im Dialog Eigenschaften eine untere und eine obere Grenze angeben. Werden diese Grenzen dann unter- oder überschritten, wird der Eintrag in der Sensortabelle in der Alarm-Farbe dargestellt. Außerdem wird ein <application>knotify</application>-Ereignis versandt.</para>
</sect2>
<sect2 id="logfile">
<title>Protokolldatei</title>
<para>Der Monitor für Protokolldateien stellt den Inhalt einer Datei, &zb; <filename>/var/log/messages</filename>, dar. Im Dialog Eigenschaften können Sie eine Liste regulärer Ausdrücke zusammenstellen, die mit dem Inhalt der Datei verglichen werden. Falls einer dieser Ausdrücke eine Übereinstimmung zeigt, wird ein <application>knotify</application>-Ereignis versandt. </para>
</sect2>
<sect2 id="listview">
<title>Listen-Ansicht</title>
<para>Die Listen-Ansicht stellt die Daten der Sensoren in Form einer Tabelle dar.</para>
</sect2>
</sect1>
</chapter>
<chapter id="multiple-platforms">
<title><application>ksysguard</application> einrichten</title>
<para>Die graphische Oberfläche ist für alle Plattformen verfügbar, auf denen auch &kde; läuft. Das Programm, welches im Hintergrund läuft, ist momentan für folgende Varianten von &UNIX; erhältlich:</para>
<variablelist>
<varlistentry>
<term>&Linux; 2.x</term>
<listitem><para>Damit <application>ksysguardd</application> läuft, ist es notwendig, den &Linux;-Kernel mit Unterstützung für das Dateisystem <filename>/proc</filename> zu kompilieren. Dies ist die Standard-Einstellung und auch in den meisten &Linux;-Distributionen bereits verfügbar.</para> </listitem>
</varlistentry>
<varlistentry>
<term>FreeBSD</term>
<listitem><para>Die Anwendung <application>ksysguardd</application> muss zur Gruppe <systemitem class="groupname">kmem</systemitem> gehören. Außerdem muss das Bit setgid gesetzt sein.</para></listitem>
</varlistentry>
<varlistentry>
<term>&Solaris;</term>
<listitem><para>Noch zu schreiben</para></listitem>
</varlistentry>
</variablelist>
<para>An der Unterstützung für andere Plattformen wird gegenwärtig gearbeitet. Jede Hilfe ist dabei sehr willkommen.</para>
</chapter>
<chapter id="credits-and-licenses">
<title>Mitwirkende und Lizenz</title>
<para>&ksysguard; wird gegenwärtig von Chris Schläger <email>[email protected]</email> entwickelt und betreut. &ksysguard; ist eine neue Version von <application>KTop</application>, dem Task Manager von KDE 1.x. Viele andere Entwickler haben an <application>KTop</application> mitgearbeitet:</para>
<itemizedlist>
<listitem><para>A. Sanda <email>[email protected]</email></para></listitem>
<listitem><para>Ralf Mueller <email>[email protected]</email></para></listitem>
<listitem><para>Bernd Johannes Wuebben <email>[email protected]</email></para></listitem>
<listitem><para>Nicolas Leclercq <email>[email protected]</email></para></listitem>
</itemizedlist>
<para>Das Portieren zu anderen Plattformen als &Linux; haben übernommen:</para>
<itemizedlist>
<listitem><para>FreeBSD: Hans Petter Bieker <email>[email protected]</email></para></listitem> </itemizedlist> &underFDL; &underGPL; </chapter>
</book>
<!--
Local Variables:
mode: sgml
sgml-omittag: nil
sgml-shorttag: t
End:
-->
|