add more spacing
[personal-kdebase.git] / runtime / doc / userguide / kde-for-admins.docbook
blobb7f625fb8a75b42242e82c5dcef714a2234ff7ff
1 <part id="kde-for-administrators">
2 <partinfo>
3 <authorgroup>
4 <author>
5 <personname>
6 <firstname>Waldo</firstname>
7 <surname>Bastian</surname>
8 </personname>
9 <email>bastian@kde.org</email>
10 </author>
11 <othercredit role="reviewer">
12 &Philip.Rodrigues;
13 &Philip.Rodrigues.mail;
14 </othercredit>
15 </authorgroup>
16 </partinfo>
18 <title>&kde; for Administrators</title>
20 <chapter id="kde-internals">
21 <title>&kde; Internals</title>
23 <sect1 id="kde-for-admins-overview">
24 <title>Overview</title>
25 <para>to be written</para>
26 </sect1>
28 <sect1 id="directory-layout">
29 <title>Directory Layout</title>
31 <para>&kde; defines a filesystem hierarchy which is used by the &kde;
32 environment itself as well as all &kde; applications. In general &kde;
33 stores all its files in a directory tree with a fixed structure.
34 </para>
36 <para>By default &kde; uses two directory trees:</para>
38 <itemizedlist>
39 <listitem><para>One at the system level (for example <filename
40 class="directory">/opt/kde3</filename>).</para></listitem>
41 <listitem><para>One at the user level in the user's home directory
42 (usually <filename class="directory">
43 ~/.kde</filename>)</para></listitem>
44 </itemizedlist>
46 <para>As a system administrator you can create additional trees. Such
47 additional trees can be used for <link
48 linkend="user-profiles">profiles</link></para>
50 <informalexample><para>&SuSE; &Linux; for example uses:</para>
52 <itemizedlist>
53 <listitem><para><filename
54 class="directory">$<envar>HOME</envar>/.kde</filename></para></listitem>
55 <listitem><para><filename
56 class="directory">/opt/kde3</filename>. (This is
57 &SuSE;-specific; other distributions may use
58 <filename class="directory">/usr</filename> or <filename
59 class="directory">/usr/kde3</filename>)</para></listitem>
60 <listitem><para><filename
61 class="directory">/etc/opt/kde3</filename>. (This was added by
62 &SuSE;).</para></listitem>
63 </itemizedlist>
65 <para>If you have the KIOSK Admin tool v0.7 or later installed you can
66 check which directory trees are used with the following command:
67 <userinput><command>kiosktool-kdedirs</command>
68 <option>--check</option></userinput></para>
69 </informalexample>
71 <para>&kde; and &kde; applications look up files by scanning all the
72 &kde; directory trees.  The directory trees are checked in order of
73 precedence. When a file is present in multiple directory trees, the
74 file from the last tree takes precedence.  Normally, the tree
75 located in the user's home directory has the highest precedence. This
76 is also the directory tree to which changes are written.</para>
78 <informalexample>
79 <para>For information about the <literal>text/plain</literal> &MIME; type
80 the following files are searched:</para>
82 <itemizedlist>
83 <listitem><para><filename
84 class="directory">$<envar>HOME</envar>/.kde/share/mimelnk/text/plain.desktop</filename></para></listitem>
85 <listitem><para><filename
86 class="directory">/opt/kde3/share/mimelnk/text/plain.desktop</filename></para></listitem>
87 <listitem><para><filename
88 class="directory">/etc/opt/kde3/share/mimelnk/text/plain.desktop</filename></para></listitem>
89 </itemizedlist>
91 <para>If a user makes a change, the change is written to <filename
92 class="directory">$<envar>HOME</envar>/.kde/share/mimelnk/text/plain.desktop</filename></para>
93 </informalexample>
95 <para>For configuration files the story is slightly different. If
96 there are multiple configuration files found in the directory trees
97 with the same name, their content is combined. The precedence order of
98 the directory trees plays a role here. When two files define the same
99 configuration key, the file with the highest precedence determines
100 which value is used for the key.</para>
102 <informalexample><para>
103 For example, if the following two files exist, with these contents:</para>
104 <variablelist>
105 <varlistentry><term><filename>$<envar>HOME</envar>/.kde/share/config/foobar</filename></term>
106 <listitem><programlisting>
107 Color=red
108 Shape=circle
109 </programlisting>
110 </listitem>
111 </varlistentry>
113 <varlistentry>
114 <term><filename>/etc/opt/kde3/share/config/foobar</filename></term>
115 <listitem><programlisting>
116 Color=blue
117 Position=10,10
118 </programlisting>
119 </listitem>
120 </varlistentry>
121 </variablelist>
123 <para>The files will be merged to result in:</para>
125 <programlisting>
126 Color=red
127 Shape=circle
128 Position=10,10
129 </programlisting>
131 </informalexample>
132 </sect1>
134 <sect1 id="specifying-directories">
135 <title>Specifying Directories</title>
137 <para>
139 <segmentedlist>
140 <segtitle>Environment Variable</segtitle>
141 <segtitle>Example Setting(s)</segtitle>
142 <segtitle>Comment</segtitle>
144 <seglistitem>
145 <seg><envar>KDEHOME</envar></seg>
146 <seg><filename class="directory">~/.kde</filename></seg>
147 <seg></seg>
148 </seglistitem>
150 <seglistitem>
151 <seg><envar>KDEROOTHOME</envar></seg>
152 <seg><filename class="directory">/root/.kde</filename></seg>
153 <seg>Different variable to prevent
154 root writing to $KDEHOME of the user after running
155 <command>su</command>.</seg>
156 </seglistitem>
158 <seglistitem>
159 <seg><envar>KDEDIR</envar></seg>
160 <seg><filename class="directory">/opt/kde3</filename>, <filename
161 class="directory">/usr</filename>, <filename
162 class="directory">/usr/kde3</filename></seg>
163 <seg>Vendor dependent. Used by &kde; 2. If not set, falls back to
164 compiled-in default.</seg>
165 </seglistitem>
167 <seglistitem>
168 <seg><envar>KDEDIRS</envar></seg>
169 <seg><filename class="directory">/opt/kde3</filename>, <filename
170 class="directory">/usr</filename>, <filename
171 class="directory">/usr/kde3</filename></seg>
172 <seg>New in &kde;3. Can list multiple locations separated by a
173 colon. If not set, falls back to $<envar>KDEDIR</envar></seg>
174 </seglistitem>
176 </segmentedlist>
177 </para>
178 <para>Don't <emphasis>need</emphasis> to be set, defaults work just fine.</para>
179 <para>Running &kde;2 next to &kde;3? Point $<envar>KDEDIR</envar> to
180 &kde; 2 and $<envar>KDEDIRS</envar> to &kde; 3.</para>
182 <informalexample>
183 <para>A staff member at a university could have the following
184 settings:</para>
185 <programlisting>
186 KDEHOME='~/.kde3'
187 KDEROOTHOME='/root/.kde3'
188 KDEDIRS='/opt/kde_staff:/opt/kde3'
189 </programlisting>
191 </informalexample>
193 </sect1>
195 <sect1 id="user-profiles">
196 <title>User Profiles</title>
198 <para>In the previous example <filename
199 class="directory">/opt/kde_staff</filename> contained additional settings
200 and applications for staff members. <quote>User Profiles</quote> allow you
201 to add this directory only for certain users and not for others.  Add the
202 following to <filename>/etc/kderc</filename>:</para>
204 <programlisting>
205 [Directories-staff]
206 prefixes=/opt/kde_staff
207 </programlisting>
209 <para>This creates a profile named <quote>staff</quote> that adds the
210 <filename class="directory">/opt/kde_staff</filename> directory
211 tree. (Note that &SuSE; &Linux; uses
212 <filename>/etc/kde3rc</filename> instead of
213 <filename>/etc/kderc</filename>. Now that we have a named profile it
214 can be assigned to users.</para>
216 <para>To map profiles to users a mapping file needs to be specified in
217 <filename>/etc/kderc</filename>:</para>
219 <programlisting>
220 [Directories]
221 userProfileMapFile=/etc/kde-user-profile
222 </programlisting>
224 <para>It is now possible to assign a profile based on either the user name
225 or based on the &UNIX; group the user is part of.</para> 
227 <para>To assign the staff profile to all users that are a member of the
228 &UNIX; group staff_members add the following to
229 <filename>/etc/kde-user-profile</filename>:</para>
231 <programlisting>
232 [General]
233 groups=staff_members
234 [Groups]
235 staff_members=staff
236 </programlisting>
238 <para>It is also possible to assign a profile to a single user:</para>
240 <programlisting>
241 [Users]
242 bastian=staff
243 </programlisting>
245 </sect1>
247 <sect1 id="directory-layout-revisited">
248 <title>Directory Layout Revisited</title>
250 <para>Each directory tree used by &kde; has a fixed directory structure.
251 Directories that are not relevant for a certain tree, or simply not used can
252 be left out though. For example, directories used for temporary files are
253 usually only found under <filename
254 class="directory">$<envar>KDEHOME</envar></filename> but not in any other
255 directory tree.</para>
257 </sect1>
259 <sect1 id="architecture-specific-directories">
260 <title>Architecture-specific Directories</title>
262 <para>Architecture (OS and CPU type) specific directories:</para>
264 <variablelist>
265 <varlistentry>
266 <term><filename class="directory">bin</filename></term>
267 <listitem><para>Used for &kde; executables.</para></listitem>
268 </varlistentry>
270 <varlistentry>
271 <term><filename class="directory">lib</filename></term>
272 <listitem><para>Used for &kde; libraries.</para>
273 </listitem>
274 </varlistentry>
276 <varlistentry>
277 <term><filename class="directory">lib/kde3</filename></term>
278 <listitem><para>This directory contains components, plugins, and other
279 runtime loadable objects for use by &kde; 3.<replaceable>x</replaceable>
280 applications.</para></listitem> 
281 </varlistentry>
282 </variablelist>
284 </sect1>
286 <sect1 id="shared-directories">
287 <title>Shared Directories</title>
289 <para>Shared: Not architecture specific, can be shared between different
290 archs.</para>
292 <variablelist>
293 <varlistentry>
294 <term><filename class="directory">share/applnk</filename></term>
295 <listitem><para><literal role="extension">.desktop</literal> files for
296 &kde;-menu (old)</para></listitem>
297 </varlistentry>
299 <varlistentry>
300 <term><filename class="directory">share/applications</filename></term>
301 <listitem><para><literal role="extension">.desktop</literal> files for
302 &kde;-menu (since &kde; 3.2)</para>
303 </listitem>
304 </varlistentry>
306 <varlistentry>
307 <term><filename class="directory">share/apps</filename></term>
308 <listitem><para>Contains application-specific data files. Each
309 application has a sub-directory here for storing additional data
310 files.</para></listitem>
311 </varlistentry>
313 <varlistentry>
314 <term><filename class="directory">share/config</filename></term>
315 <listitem><para>Configuration files. Configuration files are normally
316 named after the application they belong to plus the letters
317 <quote>rc</quote>. A special case is <filename>kdeglobals</filename>. 
318 This file is read by all &kde; applications.</para></listitem>
319 </varlistentry>
321 <varlistentry>
322 <term><filename
323 class="directory">share/config/session</filename></term>
324 <listitem><para>This directory is used by session management and is
325 normally only available under <filename
326 class="directory">$<envar>KDEHOME</envar></filename>. At the end of a
327 session &kde; applications store their state here. The file names
328 consist of the name of the application followed by a number. The
329 session manager <command>ksmserver</command> stores references to
330 these numbers when saving a session in
331 <filename>ksmserverrc</filename>.</para></listitem>
332 </varlistentry>
334 <varlistentry>
335 <term><filename class="directory">share/doc/HTML</filename></term>
336 <listitem><para>This directory contains documentation for &kde;
337 applications. Documentation is categorized by language and the
338 application it belongs to. Normally at least two files can be found in
339 a directory: <filename>index.docbook</filename>, which contains the
340 documentation in the unformatted DocBook format, and
341 <filename>index.cache.bz2</filename>, which contains the same
342 documentation formatted as <command>bzip2</command>-compressed
343 &HTML;. The &HTML; version is used by &khelpcenter;. If the &HTML;
344 version is missing, &khelpcenter; will regenerate it from the DocBook
345 version but this is a time-consuming process.</para>
346 </listitem>
347 </varlistentry>
349 <varlistentry>
350 <term><filename class="directory">share/icons</filename></term>
351 <listitem><para>Under this directory icons are stored. Icons are
352 categorized by theme, dimension and usage category.</para></listitem>
353 </varlistentry>
355 <varlistentry>
356 <term><filename class="directory">share/mimelnk</filename></term>
357 <listitem><para>In this directory,<literal
358 role="extension">.desktop</literal> files that describe &MIME; types
359 are stored. &kde; uses &MIME; types to identify the type of a
360 file.</para>
361 </listitem>
362 </varlistentry>
364 <varlistentry>
365 <term><filename class="directory">share/services</filename></term>
366 <listitem><para>This directory contains <literal
367 role="extension">.desktop</literal> files that describe services. Services
368 are like applications but are usually launched by other applications instead
369 of the user. Services do not appear in the &kde; menu.</para>
370 </listitem>
371 </varlistentry>
373 <varlistentry>
374 <term><filename class="directory">share/servicetypes</filename></term>
375 <listitem><para>This directory contains <literal
376 role="extension">.desktop</literal> files that describe
377 servicetypes. A servicetype usually represents a certain programming
378 interface. Applications and Services include in their <literal
379 role="extension">>.desktop</literal> files the servicetypes that they
380 provide.</para> </listitem></varlistentry>
382 <varlistentry>
383 <term><filename class="directory">share/sounds</filename></term>
384 <listitem><para>This directory contains sound files.</para></listitem>
385 </varlistentry>
387 <varlistentry>
388 <term><filename class="directory">share/templates</filename></term>
389 <listitem><para>This directory contains templates for creating files
390 of various types. A template consists of a <literal
391 role="extension">.desktop</literal> file that describes the file and
392 that includes a reference to a file in the <filename
393 class="directory">.source</filename> sub-directory. The templates in
394 this directory appear in the <guimenu>Create New</guimenu> menu
395 available on the desktop and in the file browser. When a user selects
396 a template from the menu its source file is copied.</para>
397 </listitem>
398 </varlistentry>
400 <varlistentry>
401 <term><filename class="directory">share/wallpapers</filename></term>
402 <listitem><para>This directory contains images that can be used as
403 background picture</para></listitem>
404 </varlistentry>
406 </variablelist>
408 </sect1>
410 <sect1 id="host-specific-directories">
411 <title>Host-specific Directories</title> 
413 <para>There are three host-specific directories that are usually
414 symlinked to other locations. If the directories do not already exist,
415 the following symlinks and directories will be created using the
416 <command>lnusertemp</command> utility:</para>
418 <variablelist>
420 <varlistentry>
421 <term><filename>$<envar>KDEHOME</envar>/socket-$<envar>HOSTNAME</envar></filename></term>
422 <listitem><para>Usually <filename
423 class="directory">/tmp/ksocket-$<envar>USER</envar>/</filename>, this
424 is used for various &UNIX; sockets.</para>
425 </listitem>
426 </varlistentry>
428 <varlistentry>
429 <term><filename>$<envar>KDEHOME</envar>/tmp-$<envar>HOSTNAME</envar></filename></term>
430 <listitem><para>Usually <filename
431 class="directory">/tmp/kde-$<envar>USER</envar>/</filename>, this is used for temporary files.</para>
432 </listitem>
433 </varlistentry>
435 <varlistentry>
436 <term><filename>$<envar>KDEHOME</envar>/cache-$<envar>HOSTNAME</envar></filename></term>
437 <listitem><para>Usually <filename
438 class="directory">/var/tmp/kdecache-$<envar>USER</envar>/</filename>,
439 this is used for cached files.</para>
440 </listitem>
441 </varlistentry>
442 </variablelist>
444 <para>Since both <filename class="directory">/tmp</filename> and
445 <filename class="directory">/var/tmp</filename> are world writable,
446 there is a possibility that one of the above directories already
447 exists but is owned by another user. In that case the
448 <command>lnusertemp</command> utility will create a new directory with
449 an alternative name and link to that instead.</para>
451 </sect1>
453 <sect1 id="configuration-files">
454 <title>Configuration Files</title> <para>&kde; uses a simple
455 text-based file format for all its configuration files. It consists of
456 key-value pairs that are placed in groups.  All &kde; configuration
457 files use <acronym>UTF</acronym>-8 encoding for text outside the
458 <acronym>ASCII</acronym> range.</para>
460 <para>The start of a group is indicated by a group name that is placed
461 in square brackets. All the key-value entries that follow belong to
462 the group. The group ends when either another group starts or when the
463 end of the file is reached. Entries at the top of the
464 file that are not preceded by a group name belong to the default
465 group.</para>
467 <informalexample><para>The following example shows a configuration
468 file that consists of two groups. The first group contains the keys
469 <varname>LargeCursor</varname> and <varname>SingleClick</varname>, the
470 second group contains the keys <varname>Show hidden files</varname>
471 and <varname>Sort by</varname>:</para>
473 <programlisting>
474 [KDE]
475 LargeCursor=false
476 SingleClick=true
477 </programlisting>
479 <programlisting>
480 [KFileDialog Settings]
481 Show hidden files=false
482 Sort by=Name
483 </programlisting>
484 </informalexample>
486 <para>Entries in a group consist of a key and value separated by an equals
487 sign. The key can contain spaces and may be followed by options placed in
488 square brackets.  The part after the equals sign is the value of the
489 entry. Any white space surrounding the equals sign is ignored, as is any
490 trailing white space. Put more concisely, the format is:</para>
492 <programlisting>
493 <replaceable>entry</replaceable>=<replaceable>value</replaceable>
494 </programlisting>
496 <para>If a value is supposed to include a space at the begin or end
497 then this can be achieved by using a backslash followed by an
498 <quote>s</quote>.</para>
500 <para>There are several other backslash codes; here is a complete
501 list:
502 <itemizedlist>
503 <listitem><para><token>\s</token> can be used as space</para>
504 </listitem>
505 <listitem><para><token>\t</token> can be used to include a tab</para>
506 </listitem>
507 <listitem><para><token>\r</token> for a carriage return character</para>
508 </listitem>
509 <listitem><para><token>\n</token> for a linefeed character (new line)</para>
510 </listitem>
511 <listitem><para><token>\\</token> to include the backslash itself</para>
512 </listitem>
513 </itemizedlist></para>
515 <informalexample><para>In the following example the value of the
516 <varname>Caption</varname> entry starts with two spaces while the
517 <varname>Description</varname> entry contains three lines of
518 text. Linefeeds in backslash notation are used to separate the
519 different lines.</para>
521 <programlisting>
522 [Preview Image]
523 Caption=\s My Caption
524 Description=This is\na very long\ndescription.
525 </programlisting>
526 </informalexample>
528 <para>Empty lines in configuration files are ignored, as are lines that
529 start with a hash mark (<quote>#</quote>). The hash mark can be used to add
530 comments to configuration files. It should be noted that when a &kde;
531 application updates a configuration file the comments are
532 <emphasis>not</emphasis> preserved.</para>
534 <para>There can be multiple configuration files with the same name in the
535 <filename class="directory">share/config</filename> sub-directory of the
536 various &kde; directory trees. In this case the information of all these
537 configuration files is combined on a key-by-key basis.  If the same key
538 within a certain group is defined in more than one place, the key value read
539 from the directory tree with the highest precedence will be used.
540 Configuration files under <filename
541 class="directory">$<envar>KDEHOME</envar></filename> always have the highest
542 precedence.  If a key in a certain group is defined multiple times in a
543 single file, the value of the last entry is used.</para>
545 <informalexample>
546 <para>If <filename>$<envar>HOME</envar>/.kde/share/config/foobar</filename>
547 contains:
548 <programlisting>
549 [MyGroup]
550 Color=red
551 Shape=circle
552 </programlisting>
553 and <filename>/etc/opt/kde3/share/config/foobar</filename> contains
554 <programlisting>
555 [MyGroup]
556 Color=blue
557 Position=10,10
558 </programlisting>
559 the result will be:
560 <programlisting>
561 [MyGroup]
562 Color=red
563 Shape=circle
564 Position=10,10
565 </programlisting>
566 </para>
567 </informalexample>
569 <informalexample>
570 <para>If
571         <filename>$<envar>HOME</envar>/.kde/share/config/foobar</filename>
572         contains
573 <programlisting>
574 [MyGroup]
575 Color=red
576 Shape=circle
577 [MyGroup]
578 Color=green
579 </programlisting>
580 and <filename>/opt/kde_staff/share/config/foobar</filename> contains
581 <programlisting>
582 [MyGroup]
583 Color=purple
584 Position=20,20
585 </programlisting>
586 and <filename>/etc/opt/kde3/share/config/foobar</filename> contains
587 <programlisting>
588 [MyGroup]
589 Color=blue
590 Position=10,10
591 </programlisting>
592 the result will be:
593 <programlisting>
594 [MyGroup]
595 Color=green
596 Shape=circle
597 Position=20,20
598 </programlisting>
599 </para>
600 </informalexample>
602 <para>To prevent users being able to override default settings,
603 settings can be marked immutable. Settings can be made immutable
604 individually, per group or per file. An individual entry can be locked
605 down by adding <userinput>[$i]</userinput> behind the key, &eg;:
606 <programlisting>
607 Color[$i]=blue
608 </programlisting>
609 </para>
610 <para>A group of entries can be locked down by placing
611 <userinput>[$i]</userinput> behind the group name, &eg;:
612 <programlisting>
613 [MyGroup][$i]
614 </programlisting>
615 </para>
616 <para>To lock down the entire file, start the file with
617 <userinput>[$i]</userinput> on a single line, &ie;:
618 <programlisting>
619 [$i]
620 </programlisting>
621 </para>
623 <informalexample>
624 <para>If
625         <filename>$<envar>HOME</envar>/.kde/share/config/foobar</filename>
626         contains:
627 <programlisting>
628 [MyGroup]
629 Color=red
630 Shape=circle
631 </programlisting>
632 and <filename>/etc/opt/kde3/share/config/foobar</filename> contains:
633 <programlisting>
634 [MyGroup][$i]
635 Color=blue
636 Position=10,10
637 </programlisting>
638 the result will be:
639 <programlisting>
640 [MyGroup]
641 Color=blue
642 Position=10,10
643 </programlisting>
644 </para>
645 </informalexample>
647 <informalexample><para>If
648         <filename>$<envar>HOME</envar>/.kde/share/config/foobar</filename>
649         contains:
650 <programlisting>
651 [MyGroup]
652 Color=red
653 Shape=circle
654 </programlisting>
655 and <filename>/opt/kde_staff/share/config/foobar</filename> contains
656 <programlisting>
657 [MyGroup]
658 Color=purple
659 Shape=rectangle
660 </programlisting>
661 and <filename>/etc/opt/kde3/share/config/foobar</filename> contains
662 <programlisting>
663 [MyGroup][$i]
664 Color=blue
665 Position=10,10
666 </programlisting>
667 the result will be
668 <programlisting>
669 [MyGroup]
670 Color=purple
671 Shape=rectangle
672 Position=10,10
673 </programlisting>
674 </para>
675 </informalexample>
678 <para>So-called <quote>Shell Expansion</quote> can be used to provide more
679 dynamic default values. With shell expansion the value of a configuration
680 key can be constructed from the value of an environment variable or from the
681 output of a shell command.  To enable shell expansion for a configuration
682 entry, the key must be followed by <token>[$e]</token>.  Normally the
683 expanded form is written into the user's configuration file after first use.
684 To prevent that, it is recommend to lock the configuration entry down by
685 using <token>[$ie]</token>.  The user can't change it then of course.</para>
687 <informalexample>
688 <para>In the following example the value for the <varname>Host</varname>
689 entry is determined by the output of the <command>hostname</command>
690 program. This setting is also locked down to ensure that the value is always
691 determined dynamically.</para>
693 <para>The value for the <varname>Email</varname> entry is determined by
694 filling in the values of the $<envar>USER</envar> and $<envar>HOST</envar>
695 environment variables. When <systemitem class="username">joe</systemitem> is
696 logged in on <systemitem class="systemname">joes_host</systemitem> this will
697 result in a value equal to <literal>joe@joes_host</literal>. The setting is
698 not locked down.</para>
700 <programlisting>
701 [Mail Settings] 
702 Host[$ie]=$(hostname)
703 Email[$e]=${USER}@${HOST}
704 </programlisting>
705 </informalexample>
707 <para>Most configuration entries can be indexed with a language code. In
708 this case, the language that the user has selected for use on the desktop is
709 used to look up the key value. If the default language (American English)
710 has been selected or if there is no index that corresponds to the selected
711 language, the key entry without index is used.</para>
713 <informalexample>
714 <para>In the following example the value of the <varname>Caption</varname>
715 entry depends on the language. If the user has selected French as language
716 (language code <literal>fr</literal>) the value of the entry will be
717 <quote>Ma L&eacute;gende</quote>. In all other cases the value <quote>My
718 Caption</quote> will be used.</para>
720 <programlisting>
721 [Preview Image]
722 Caption=My Caption
723 Caption[fr]=Ma L&eacute;gende
724 </programlisting>
725 </informalexample>
727 <informalexample>
728 <para>In this example the value of the <varname>Caption</varname> entry
729 depends on the language. If the user has selected French as language
730 (language code <literal>fr</literal>) the value of the entry will be
731 <quote>Ma L&eacute;gende.</quote> In all other cases the value <quote>My
732 Caption</quote> will be used.</para>
734 <programlisting>
735 [Preview Image]
736 Caption=My Caption
737 Caption[fr]=Ma L&eacute;gende
738 </programlisting>
739 </informalexample>
741 <para>In general the entries that can appear in a configuration file are not
742 documented.  With &kde; 3.2 a start has been made to change this. In
743 <filename
744 class="directory">$<envar>KDEDIR</envar>/share/config.kcfg</filename>, files
745 can be found that provide a formal description of the possible entries in a
746 configuration file. These are used by the new &kde; Configuration Editor
747 when available.</para>
749 <informalexample>
750 <para>Here is an example &XML; configuration file:
751 <programlisting>
752 <markup>
753 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
754 &lt;!DOCTYPE kcfg SYSTEM "http://www.kde.org/standards/kcfg/1.0/kcfg.dtd"&gt;
755 &lt;kcfg&gt;
756     &lt;kcfgfile name="korganizerrc"/&gt;
757     &lt;group name="General"&gt;
758          &lt;entry type="Bool" key="Auto Save"&gt;
759              &lt;label&gt;Enable automatic saving of calendar&lt;/label&gt;
760              &lt;default&gt;true&lt;/default&gt;
761          &lt;/entry&gt;
762          &lt;entry type="Int" key="Auto Save Interval"&gt;
763              &lt;default&gt;10&lt;/default&gt;
764          &lt;/entry&gt;
765     &lt;/group&gt;
766 &lt;/kcfg&gt;
767 </markup>
768 </programlisting>
769 </para>
770 <para>It has the same effect as:
771 <programlisting>
772 [General]
773 Auto Save=false
774 Auto Save Interval=25
775 </programlisting>
776 </para>
777 </informalexample>
779 </sect1>
781 <sect1 id="kde-startup-sequence">
782 <title>&kde; Startup Sequence</title>
784 <sect2 id="kdm">
785 <title>&kdm;</title>
787 <para>Always runs as <systemitem class="username">root</systemitem>! Uses
788 <filename>$<envar>KDEDIR</envar>/share/config/kdmrc</filename> and
789 <filename>/etc/X11/xdm/Xservers</filename>. The latter contains entries
790 like:</para>
792 <programlisting>
793 :0 local /usr/X11R6/bin/X :0 vt07
794 </programlisting>
796 <para>Relevant startup files are also: </para>
797 <simplelist>
798 <member>
799 [X-*-Core] section in <filename>kdmrc</filename>
800 </member>
801 <member>
802 Setup - <filename>/etc/X11/xdm/Xsetup</filename>
803 </member>
804 <member>
805 User enters username &amp; password
806 </member>
807 <member>
808 Startup - <filename>/etc/X11/xdm/Xstartup</filename> - prepare as root
809 </member>
810 <member>
811 Session - <filename>/etc/X11/xdm/Xsession</filename> - starts session as user
812 </member>
813 <member>
814 = For a KDE session: <command>kde</command> or <command>startkde</command>
815 </member>
816 <member>
817 = If present <filename>~/.xsession</filename> or <filename>~/.xinitrc</filename>
818 </member>
819 <member>
820 Reset - <filename>/etc/X11/xdm/Xreset</filename> - after session finished
821 </member>
822 </simplelist>
824 </sect2>
826 <sect2 id="startkde">
827 <title>The &kde; Startup Script: <command>startkde</command></title>
829 <para>The &kde; startup sequence starts with the
830 <filename>startkde</filename> script. In most cases this script gets called
831 from the display manager (&kdm;) once the user has been authenticated. Their
832 are two very important lines in the <filename>startkde</filename>
833 script:</para>
835 <programlisting>
836 LD_BIND_NOW=true kdeinit4 +kcminit_startup and kwrapper4 ksmserver $KDEWM
837 </programlisting>
839 <para>The first line starts the <command>kdeinit4</command> master process.
840 The <command>kdeinit4</command> master process is used to start all other
841 &kde; processes.  It show up in the output of <command>ps
842 <option>aux</option></command> as <computeroutput>kdeinit4:
843 Running...</computeroutput>. The arguments after <command>kdeinit4</command>
844 are the names of additional processes to be started.  The <token>+</token>
845 indicates that <command>kdeinit4</command> needs to wait till the process has
846 finished.  <command>kdeinit4</command> also starts
847 <command>klauncher</command> and <command>kded</command>.</para>
849 <para>The second of the two lines asks <command>kdeinit4</command> to start
850 the <command>ksmserver</command> session manager process.  The session
851 manager determines the lifetime of the session. When this process exits, the
852 user is logged out.</para>
854 </sect2>
855 </sect1>
857 <sect1 id="background-processes">
858 <title>Background Processes</title>
860 <para>All &kde; background services are user-specific: unlike system daemons
861 they are not shared between users. As well as being unique per user they are
862 also unique per X-server display. The processes are:</para>
864 <variablelist>
865 <varlistentry>
866 <term><command>dcopserver</command></term>
867 <listitem><para>Desktop communication</para>
868 </listitem>
869 </varlistentry>
871 <varlistentry>
872 <term><command>kded</command></term>
873 <listitem><para>Generic service daemon.</para>
874 <para>Triggers <link linkend="ksycoca">Sycoca</link> database updates when
875 needed</para>
876 </listitem>
877 </varlistentry>
879 <varlistentry>
880 <term><command>kcminit</command></term>
881 <listitem><para>Initialization service</para>
882 <para>See <xref linkend="kcminit"/> for more information.</para>
883 </listitem>
884 </varlistentry>
886 <varlistentry>
887 <term><command>klauncher</command></term>
888 <listitem><para>Program launch (this is <emphasis>not</emphasis> the
889 <keycombo action="simul">&Alt;<keycap>F2</keycap>
890 </keycombo>dialog!)</para>
891 <para>See <xref linkend="klauncher"/> for more information.</para>
892 </listitem>
893 </varlistentry>
895 <varlistentry>
896 <term><command>knotify</command></term>
897 <listitem><para>User notifications.</para>
898 <para>See <xref linkend="knotify"/> for more information.</para>
899 </listitem>
900 </varlistentry>
902 <varlistentry>
903 <term><command>ksmserver</command></term>
904 <listitem><para>Session management</para>
905 <para>See <xref linkend="ksmserver"/> for more information.</para>
906 </listitem>
907 </varlistentry>
909 </variablelist>
911 <sect2 id="kdeinit">
912 <title><command>kdeinit</command></title>
913 <para><command>kdeinit</command> is used to start all other &kde;
914 programs. <command>kdeinit</command> can start normal binary program files
915 as well as <command>kdeinit</command> loadable modules
916 (<acronym>KLM</acronym>s).  <acronym>KLM</acronym>s work just like binary
917 program files but can be started more efficiently.  <acronym>KLM</acronym>s
918 live in <filename
919 class="directory">$<envar>KDEDIR</envar>/lib/kde3</filename></para>
921 <para>The drawback is that programs started this way appear as
922 <computeroutput><command>kdeinit</command></computeroutput> in the output of
923 <command>top</command> and <command>ps</command>. Use <command>top
924 <option>-c</option></command> or <command>ps <option>aux</option></command>
925 to see the actual program name:</para>
927 <screen>
928 <prompt>%</prompt><userinput><command>ps <option>aux</option></command></userinput>
929 <computeroutput>
930 waba     23184  0.2  2.1 23428 11124 ?  S    21:41   0:00 kdeinit4: Running...
931 waba     23189  0.2  2.4 25136 12496 ?  S    21:41   0:00 kdeinit4: klauncher
932 waba     23192  0.7  2.8 25596 14772 ?  S    21:41   0:00 kdeinit4: kded
933 waba     23203  0.8  3.4 31516 17892 ?  S    21:41   0:00 kdeinit4: knotify
934 </computeroutput>
935 </screen>
937 <para><computeroutput>kdeinit: Running...</computeroutput> indicates the
938 master <command>kdeinit</command> process. The other processes listed are
939 programs started as <acronym>KLM</acronym>s.</para>
941 <para>When <command>kdeinit</command> starts for the first time it will
942 launch <command>klauncher</command>, and
943 <command>kded</command>, as well as any additional programs specified on its
944 command line in the <command>startkde</command> script, normally
945 <command>kcminit_startup</command>.</para>
947 </sect2>
949 <sect2 id="kcminit">
950 <title>kcminit</title>
952 <para><command>kcminit</command> executes initialization services during
953 startup. Initialization services are specified in the .desktop files of
954 applications or services via the <varname>X-KDE-Init</varname> line:</para>
956 <programlisting>
957 [Desktop Entry]
958 Encoding=UTF-8
959 Exec=kcmshell4 energy
960 Icon=energy_star
961 Type=Application
962 X-KDE-Library=energy
963 X-KDE-Init=energy
964 </programlisting>
966 <para>Initialization services are typically used for initializing
967 hardware based on user-specified settings.</para>
969 <para><userinput><command>kcminit
970 <option>--list</option></command></userinput> can be used to show all
971 initialization services and <userinput><command>kcminit
972 <replaceable>service</replaceable></command></userinput> can be used to
973 execute a single service explicitly. This can be useful when investigating
974 startup problems.</para>
976 </sect2>
978 <sect2 id="klauncher">
979 <title><command>klauncher</command></title>
981 <para><command>klauncher</command> is a daemon which is responsible for
982 service activation within &kde;. It operates in close connection with the
983 <command>kdeinit</command> master process to start new processes. &kde;
984 applications communicate with <command>klauncher</command> over &DCOP; in
985 order to start new applications or services.</para>
987 <para>Best known from the error message: <computeroutput><errortext>
988 KLauncher could not be reached via DBus </errortext></computeroutput> which
989 either indicates a serious problem with the <command>dcopserver</command> or
990 that <command>klauncher</command> crashed.</para>
992 <para><command>klauncher</command> can be restarted by restarting
993 <command>kdeinit</command> from a console window. Make sure that
994 $<envar>HOME</envar>, $<envar>DISPLAY</envar> and the various
995 $<envar>KDEDIR(S)</envar> are set correctly when doing so!</para>
997 </sect2>
999 <sect2 id="knotify">
1000 <title><command>knotify</command></title>
1002 <para>The primary task of <command>knotify</command> is to relay sound
1003 notifications to the sound server, it also provides alternative notification
1004 methods.</para>
1006 </sect2>
1009 </sect1>
1011 <sect1 id="ksmserver">
1012 <title>KSMServer</title>
1014 <para><command>ksmserver</command> is &kde;'s session manager. On startup
1015 the session manager launches auto-start applications and restores
1016 applications from the previous session.  The applications to auto-start are
1017 indicated by <literal role="extension">.desktop</literal> files in the
1018 <filename
1019 class="directory">$<envar>KDEDIR</envar>/share/autostart</filename>
1020 directory.  Whether or not to auto-start an application can be made
1021 conditional upon some configuration entry determined by the
1022 <varname>X-KDE-autostart-condition</varname> entry in the <literal
1023 role="extension">.desktop</literal> file.</para>
1025 <informalexample>
1026 <para>The <filename>ktip.desktop</filename> file for example
1027 contains:</para>
1029 <programlisting>
1030 X-KDE-autostart-condition=ktiprc:TipOfDay:RunOnStart:true
1031 </programlisting>
1033 <para>This means that the <filename>ktiprc</filename> configuration
1034 file is checked for a <varname>RunOnStart</varname> entry in the
1035 <varname>[TipOfDay]</varname> section. If no such entry is found,
1036 <literal>true</literal> is assumed, which means that
1037 <application>ktip</application> is one of the applications that is
1038 auto-started by default.</para>
1039 </informalexample>
1041 <para>Some of the applications auto-started by <command>ksmserver</command>
1042 are:</para>
1044 <variablelist>
1046 <varlistentry>
1047 <term><command>kdesktop</command></term>
1048 <listitem><para>The &kde; desktop</para>
1049 </listitem>
1050 </varlistentry>
1052 <varlistentry>
1053 <term><command>&kicker;</command></term>
1054 <listitem><para>The &kde; panel</para>
1055 </listitem>
1056 </varlistentry>
1058 <varlistentry>
1059 <term><command>ktip</command></term>
1060 <listitem><para>A tip of the day program</para>
1061 </listitem>
1062 </varlistentry>
1064 <varlistentry>
1065 <term><command>kwrited</command></term>
1066 <listitem><para>A utility to receive system messages sent to the user</para>
1067 </listitem>
1068 </varlistentry>
1070 <varlistentry>
1071 <term>&klipper;</term>
1072 <listitem><para>A clipboard utility that docks in the panel</para>
1073 </listitem>
1074 </varlistentry>
1076 <varlistentry>
1077 <term><command>kalarm</command></term>
1078 <listitem><para>A utility that warns about upcoming events and appointments</para>
1079 </listitem>
1081 </varlistentry>
1082 </variablelist>
1084 <para><command>kdesktop</command> in its turn automatically starts
1085 applications stored in <filename
1086 class="directory">$<envar>KDEHOME</envar>/Autostart</filename>. <command>kdesktop</command>
1087 will automatically open any files stored in this directory including
1088 documents, binary files or applications in the form of <literal
1089 role="extension">.desktop</literal> files.</para>
1091 <para>The &kde; session manager also restores one of the previous
1092 sessions. A session contains a collection of applications as well as
1093 application-specific information that reflects the state of the applications
1094 at the time the session was saved.  Sessions are stored in the
1095 <filename>ksmserverrc</filename> configuration file which contains
1096 references to application-specific state information. The
1097 application-specific state information is saved in <filename
1098 class="directory">$<envar>KDEHOME</envar>/share/config/session</filename>.
1099 The state information of &kwin; contains the location of the application
1100 windows of all the other applications in the session.
1101 </para>
1103 </sect1>
1105 <sect1 id="environment-variables">
1106 <title>Environment variables</title>
1108 <para>Some important environment variables used by &kde;:</para>
1110 <variablelist>
1112 <varlistentry>
1113 <term>$<envar>KDEDIR</envar></term>
1114 <listitem><para>Has to be set if
1115 <envar>KDEDIRS</envar> is not set and has to point to the root of the
1116 &kde; installation tree. Allows &kde; to find its data like icons,
1117 menus and libraries.</para>
1118 </listitem>
1119 </varlistentry>
1121 <varlistentry><term>$<envar>KDEDIRS</envar></term>
1122 <listitem><para>Overrides <envar>KDEDIR</envar> and allows you to specify
1123 multiple directories where &kde; searches for its data. Useful if you want
1124 or have to install some programs to a different prefix than the rest of
1125 &kde;.</para> 
1126 </listitem>
1127 </varlistentry>
1129 <varlistentry><term><envar>$KDEHOME</envar></term><listitem><para>If
1130 not set, &kde; uses <filename class="directory">~/.kde</filename> as
1131 the directory where personal data is stored.</para>
1132 </listitem>
1133 </varlistentry>
1135 <varlistentry><term>$<envar>KDEROOTHOME</envar></term><listitem><para>If
1136 not set, &kde; uses <filename class="directory">~root/.kde</filename>
1137 as the directory for <systemitem class="username">root</systemitem>'s
1138 personal data. Was introduced to prevent &kde; from accidently
1139 overwriting user data with root permissions when the user runs a &kde;
1140 program after switching with <command>su</command> to <systemitem
1141 class="username">root</systemitem>.</para>
1142 </listitem>
1143 </varlistentry>
1145 <varlistentry><term>$<envar>KDEWM</envar></term><listitem><para>If the
1146 <envar>KDEWM</envar> environment variable has been set, then it will
1147 be used as &kde;'s window manager within the
1148 <command>startkde</command> script instead of &kwin;.</para>
1149 </listitem>
1150 </varlistentry>
1152 <varlistentry><term>$<envar>KDE_LANG</envar></term><listitem><para>Overrides
1153 the &kde; language configuration, &eg; <userinput>KDE_LANG=fr kprogram
1154 &amp;</userinput> starts a program with French translation if the
1155 necessary files are installed.</para>
1156 </listitem>
1157 </varlistentry>
1159 <varlistentry><term>$<envar>KDE_MULTIHEAD</envar></term><listitem><para>Set
1160 this variable to <literal>true</literal> to indicate that &kde; is running
1161 on a multi-head system.</para>
1162 </listitem>
1163 </varlistentry>
1165 <varlistentry><term>$<envar>KDE_FORK_SLAVES</envar></term>
1166 <listitem><para>(Since &kde; 3.2.3) Set this variable to spawn
1167 <acronym>KIO</acronym>-slaves directly from the application process
1168 itself. By default <acronym>KIO</acronym>-slaves are spawned using
1169 <command>klauncher</command>/<command>kdeinit</command>. This option is
1170 useful if the <acronym>KIO</acronym>-slave should run in the same
1171 environment as the application. This can be the case with
1172 <application>Clearcase</application>.</para>
1173 </listitem>
1174 </varlistentry>
1176 <varlistentry><term>$<envar>KDE_HOME_READONLY</envar></term>
1177 <listitem><para>Set this variable to indicate that your home directory is
1178 mounted as read-only.</para>
1179 </listitem>
1180 </varlistentry>
1182 <varlistentry><term>$<envar>KDE_NO_IPV6</envar></term><listitem><para>
1183 (Since &kde; 3.2.3) - Set this variable to disable <acronym>IPv6</acronym>
1184 support and <acronym>IPv6</acronym> <acronym>DNS</acronym>
1185 lookups.</para>
1186 </listitem>
1187 </varlistentry>
1189 <varlistentry><term>$<envar>KDE_IS_PRELINKED</envar></term><listitem><para>
1190 (Since &kde; 3.2) - Set this variable to indicate that you have prelinked
1191 your &kde; binaries and libraries. This will turn off
1192 <command>kdeinit</command>.</para>
1193 </listitem>
1194 </varlistentry>
1196 <varlistentry><term>$<envar>KDE_UTF8_FILENAMES</envar></term><listitem><para>If
1197 this environment variable is set, &kde; assumes all filenames are in
1198 <acronym>UTF-8</acronym> encoding regardless of the current C
1199 locale.</para>
1200 </listitem>
1201 </varlistentry>
1203 <varlistentry><term>$<envar>KDE_FULL_SESSION</envar></term><listitem><para>
1204 (Since &kde; 3.2)  Automatically set to true by &kde; startup, it is used
1205 by &eg; &konqueror; to know if it should consider remaining in memory
1206 for future re-use when being closed. If not set, &konqueror; will exit
1207 after being closed (&eg; &kdesu; does that, it's also useful for
1208 debugging).</para>
1209 </listitem>
1210 </varlistentry>
1212 <varlistentry><term>$<envar>KDESYCOCA</envar></term><listitem><para>Allows
1213 you to specify the path and the name of the generated &kde; system
1214 configuration cache file.</para>
1215 </listitem>
1216 </varlistentry>
1218 <varlistentry><term>$<envar>KDETMP</envar></term><listitem><para>Allows
1219 to specify another path than <filename
1220 class="directory">/tmp</filename> where &kde; stores its temporary
1221 files.</para>
1222 </listitem>
1223 </varlistentry>
1225 <varlistentry><term>$<envar>KDEVARTMP</envar></term><listitem><para>Allows
1226 to specify another path than <filename
1227 class="directory">/var/tmp</filename> where &kde; stores its variable
1228 files.</para>
1229 </listitem>
1230 </varlistentry>
1232 <varlistentry><term>$<envar>XDG_DATA_HOME</envar></term><listitem><para>
1233 (Since &kde; 3.2) Defines the base directory relative to which user-specific
1234 data files should be stored. Default is <filename
1235 class="directory">$<envar>HOME</envar>/.local/share</filename></para>
1236 </listitem>
1237 </varlistentry>
1239 <varlistentry><term>$<envar>XDG_DATA_DIRS</envar></term><listitem><para>
1240 (Since &kde; 3.2) Defines the preference-ordered set of base directories to
1241 search for data files in addition to the <filename
1242 class="directory">$<envar>XDG_DATA_HOME</envar></filename> base
1243 directory. Default is
1244 <literal>/usr/local/share/:/usr/share/</literal></para>
1246 <para>&kde; adds locations from $<envar>KDEDIRS</envar> and profiles
1247 as well.  Used for <literal role="extension">.desktop</literal> and
1248 <literal role="extension">.directory</literal> menu files. <literal
1249 role="extension">.desktop</literal> files under <filename
1250 class="directory">$<envar>XDG_DATA_DIRS</envar>/applications</filename>. 
1251 <literal
1252 role="extension">.directory</literal> files under
1253 $XDG_DATA_DIRS/desktop-directories
1254 </para>
1255 </listitem>
1256 </varlistentry>
1258 <varlistentry><term>$<envar>XDG_CONFIG_HOME</envar></term><listitem><para>
1259 (&kde; 3.2) - Defines the base directory relative to which user
1260 specific configuration files should be stored. Default is
1261 <filename class="directory">$<envar>HOME</envar>/.config</filename>.</para>
1262 </listitem>
1263 </varlistentry>
1265 <varlistentry><term>$<envar>XDG_CONFIG_DIRS</envar></term><listitem><para>
1266 (&kde; 3.2) - Defines the preference-ordered set of base directories
1267 to search for configuration files in addition to the $<envar>XDG_CONFIG_HOME</envar>
1268 base directory. The default is <filename class="directory">/etc/xdg</filename> &kde; adds locations from
1269 $<envar>KDEDIRS</envar> and profiles as well. Used by <literal role="extension">.menu</literal> descriptions in
1270 <filename class="directory">$<envar>XDG_CONFIG_DIRS</envar>/menus</filename>.
1271 </para>
1272 </listitem>
1273 </varlistentry>
1274 </variablelist>
1276 </sect1>
1278 <sect1 id="the-kdeinit-mystery">
1279 <title>The kdeinit Mystery</title>
1281 <!-- FIXME: Add more words. Fix markup -->
1283 <para><command>kdeinit</command> is used to start all other &kde;
1284 programs. <command>kdeinit</command> can start normal binary program f iles
1285 as well as <command>kdeinit</command> loadable modules
1286 (<acronym>KLM</acronym>s).  <acronym>KLM</acronym>s work just like binary
1287 program files but can be started more efficiently.  <acronym>KLM</acronym>s
1288 live in <filename
1289 class="directory">$<envar>KDEDIR</envar>/lib/kde3</filename></para>
1291 <para>The drawback is that programs started this way appear as
1292 <computeroutput><command>kdeinit</command></computeroutput> in the
1293 output of <command>top</command> and <command>ps</command>. Use
1294 <command>top <option>-c</option></command> or <command>ps
1295 <option>aux</option></command> to see the actual program name:</para>
1297 <screen>
1298 <prompt>%</prompt> <userinput><command>ps aux | grep bastian</command></userinput>
1299 <computeroutput>
1300 bastian  26061  0.0  2.2 24284 11492 ?       S    21:27   0:00 kdeinit: Running...
1301 bastian  26064  0.0  2.2 24036 11524 ?       S    21:27   0:00 kdeinit: dcopserver
1302 bastian  26066  0.1  2.5 26056 12988 ?       S    21:27   0:00 kdeinit: klauncher
1303 bastian  26069  0.4  3.2 27356 16744 ?       S    21:27   0:00 kdeinit: kded
1304 bastian  26161  0.2  2.7 25344 14096 ?       S    21:27   0:00 kdeinit: ksmserver
1305 bastian  26179  1.1  3.4 29716 17812 ?       S    21:27   0:00 kdeinit: kicker
1306 bastian  26192  0.4  3.0 26776 15452 ?       S    21:27   0:00 kdeinit: klipper
1307 bastian  26195  1.0  3.5 29200 18368 ?       S    21:27   0:00 kdeinit: kdesktop
1308 </computeroutput>
1309 </screen>
1310 <para>As you might have noticed, this has another side effect, making it
1311 difficult to kill a process that is causing trouble:</para>
1313 <screen><prompt>%</prompt> <userinput><command>killall kdesktop</command></userinput>
1314 <computeroutput>kdesktop: no process killed</computeroutput></screen>
1316 <para>You might be tempted to try <userinput><command>killall
1317 kdeinit</command></userinput>, but killing all kdeinit processes will have
1318 the effect of shutting down all of &kde;. In effect, total
1319 destruction!</para>
1321 <para>There are two simple solutions to this:</para>
1323 <screen><prompt>%</prompt> <userinput><command>kdekillall kdesktop</command></userinput>
1324 or good old
1325 <prompt>%</prompt> <userinput><command>kill 26195</command></userinput></screen>
1326 <para><command>kdekillall</command> is part of the &kde; <acronym>SDK</acronym>
1327 package.</para>
1329 </sect1>
1331 </chapter>
1333 <chapter id="customizing-kde">
1334 <title>Customizing &kde;</title>
1337 <sect1 id="desktop-icons">
1338 <title>Desktop Icons</title>
1340 <para>&kde; uses several types of icons:</para>
1341 <itemizedlist>
1342 <listitem><para>Documents</para>
1343 </listitem>
1344 <listitem><para>Links to Websites (using <literal role="extension">.desktop</literal> file)</para>
1345 </listitem>
1346 <listitem><para>Links to Applications (using <literal role="extension">.desktop</literal> file)</para>
1347 </listitem>
1348 <listitem><para>Devices - Disks, Partitions &amp; Peripherals:
1349 <itemizedlist>
1350 <listitem><para>Explicit using <literal role="extension">.desktop</literal> file</para>
1351 </listitem>
1352 <listitem><para>Automatic via devices:// io-slave</para>
1353 </listitem>
1354 </itemizedlist>
1355 </para>
1356 </listitem>
1357 <listitem><para>Vendor-specific (&eg; &SuSE;'s My Computer)</para>
1358 </listitem>
1359 </itemizedlist>
1361 <sect2 id="desktop-icons-websites">
1362 <title>Websites</title>
1363 <para>
1364 Links to Websites using <literal role="extension">.desktop</literal>
1365 file: <menuchoice><guimenu>Create
1366 New</guimenu><guisubmenu>File</guisubmenu><guimenuitem>Link to
1367 Location (URL)</guimenuitem></menuchoice>. Change Icon using
1368 <guilabel>Properties</guilabel> dialogs.  The resulting <literal
1369 role="extension">.desktop</literal> file:
1370 <programlisting>
1371 [Desktop Entry]
1372 Encoding=UTF-8
1373 Icon=/opt/kde3/share/apps/kdesktop/pics/ksslogo.png
1374 Type=Link
1375 URL=http://www.kde.org/
1376 </programlisting>
1377 </para>
1378 </sect2>
1380 <sect2 id="desktop-icons-applications">
1381 <title>Applications</title>
1383 <para>Links to Applications using <literal
1384 role="extension">.desktop</literal> file: <menuchoice><guimenu>Create
1385 New</guimenu><guisubmenu>File</guisubmenu><guimenuitem>Link to
1386 Application</guimenuitem></menuchoice>. You must provide details
1387 yourself. Drag from &kde; Menu: Either copy or link (creates symlink),
1388 much easier</para>
1390 <!-- Perhaps legacy and translated should be the other way around, but -->
1391 <!-- this is how it appears in Waldo's presentation. Need to check -->
1392 <!-- this -->
1394 <programlisting>
1395 [Desktop Entry]<co id="boilerplate"/>
1396 Encoding=UTF-8
1397 GenericName=IRC Client<co id="generic-desc"/>
1398 GenericName[af]=Irc Kli&euml;t
1399 GenericName[de]=IRC Programm
1401 GenericName[zu]=Umthengi we IRC<co id="legacy"/>
1402 SwallowExec=<co id="translated"/>
1403 Name=KSirc
1404 Name[af]=Ksirc
1405 Name[de]=KSirc
1407 </programlisting>
1409 <calloutlist>
1410 <callout arearefs="boilerplate"><para>Boiler plate</para>
1411 </callout>
1412 <callout arearefs="generic-desc"><para>Translated generic description, not used on desktop</para>
1413 </callout>
1414 <callout arearefs="legacy"><para>Legacy, can be removed</para>
1415 </callout>
1416 <callout arearefs="translated"><para>Translated name as it appears on desktop</para>
1417 </callout>
1418 </calloutlist>
1420 <para>Desktop Icons</para>
1421 <programlisting>
1423 Name[zu]=Ksirc
1424 MimeType=<co id="co-mimetype"/>
1425 Exec=ksirc %i %m<co id="co-exec"/>
1426 Icon=ksirc<co id="co-icon"/>
1427 TerminalOptions=<co id="co-terminaloptions"/>
1428 Path=<co id="co-path"/>
1429 Type=Application<co id="co-type"/>
1430 Terminal=0<co id="co-terminal"/>
1431 X-KDE-StartupNotify=true<co id="co-x-kde-startupnotify"/>
1432 X-DCOP-ServiceType=Multi<co id="co-x-dcop-servicetype"/>
1433 Categories=Qt;KDE;Network<co id="co-categories"/>
1434 </programlisting>
1436 <calloutlist>
1437 <callout arearefs="co-mimetype"><para>Supported &MIME; types, not used on
1438 desktop</para>
1439 </callout>
1440 <callout arearefs="co-exec"><para>The command line to execute</para>
1441 </callout>
1442 <callout arearefs="co-icon"><para>The icon, from icon theme or full path</para>
1443 </callout>
1444 <callout arearefs="co-terminaloptions"><para>Only used if terminal is
1445 needed</para>
1446 </callout>
1447 <callout arearefs="co-path"><para>Working directory for command</para>
1448 </callout>
1449 <callout arearefs="co-type"><para>More boiler plate</para>
1450 </callout>
1451 <callout arearefs="co-terminal"><para>Use true if terminal is needed,
1452 text application</para>
1453 </callout>
1454 <callout arearefs="co-x-kde-startupnotify"><para>Show bouncy cursor,
1455 disable if it doesn't work.</para>
1456 </callout>
1457 <callout arearefs="co-x-dcop-servicetype"><para>Has app started ok?
1458 Remove if it doesn't work</para>
1459 </callout>
1460 <callout arearefs="co-categories"><para>Categories for &kde; Menu, not
1461 used on desktop</para>
1462 </callout>
1463 </calloutlist>
1467 </sect2>
1469 <sect2 id="desktop-icons-exec">
1470 <title>The <varname>Exec</varname> option in <literal
1471 role="extension">.desktop</literal> files</title>
1473 <para>Following the command, you can have several place holders which will
1474 be replaced with the actual values when the actual program is run:
1475 <variablelist>
1476 <varlistentry>
1477 <term>%f</term> <listitem><para>A single file name; used when dropping
1478 file on icon, or with file associations.</para>
1479 </listitem>
1480 </varlistentry>
1482 <varlistentry>
1483 <term>%F</term>
1484 <listitem><para>A list of files; use for applications that can
1485 open several local files at once.</para>
1486 </listitem>
1487 </varlistentry>
1489 <varlistentry>
1490 <term>%u</term>
1491 <listitem><para>A single &URL;: if the app can
1492 handle &eg; &FTP; or &HTTP; &URL;s itself, otherwise &kde;.</para>
1493 </listitem>
1494 </varlistentry>
1496 <varlistentry>
1497 <term>%U</term>
1498 <listitem><para>A list of
1499 &URL;s; will download the file first and pass a local file to the app
1500 (!!)</para>
1501 </listitem>
1502 </varlistentry>
1504 <varlistentry>
1505 <term>%d</term>
1506 <listitem><para>The folder of the file to open; useful if app needs to
1507 have file in current working directory.</para>
1508 </listitem>
1509 </varlistentry>
1511 <varlistentry>
1512 <term>%D</term>
1513 <listitem><para>A list of folders, not very practical.</para>
1514 </listitem>
1515 </varlistentry>
1517 <varlistentry>
1518 <term>%i</term> 
1519 <listitem><para>The icon; <option>--icon</option> option; &kde; app
1520 will use icon from <varname>Icon</varname>= line in taskbar.</para>
1521 </listitem>
1522 </varlistentry>
1524 <varlistentry>
1525 <term>%m</term>
1526 <listitem><para>The mini-icon; legacy.</para>
1527 </listitem>
1528 </varlistentry>
1530 <varlistentry>
1531 <term>%c</term> 
1532 <listitem><para>The caption; <option>--caption</option> option; &kde;
1533 app will use name from <varname>Name</varname>= line in
1534 taskbar.</para>
1535 </listitem>
1536 </varlistentry>
1538 </variablelist>
1539 </para>
1541 <informalexample>
1542 <para>Examples:
1543 <segmentedlist>
1544 <segtitle><varname>Exec</varname> line</segtitle>
1545 <segtitle>Command executed</segtitle>
1546 <seglistitem><seg>ksirc %i</seg><seg><command>ksirc --icon ksirc</command></seg>
1547 </seglistitem>
1548 <seglistitem><seg>cd %d; kedit $(basename %f)</seg><seg><command>cd /tmp; kedit file.txt</command></seg>
1549 </seglistitem>
1550 </segmentedlist>
1551 </para>
1552 </informalexample>
1554 <!--Dont' know what this refers to: -->
1555 <!--See What's This (Shift-F1) in Properties Dialog-->
1557 </sect2>
1559 <sect2 id="desktop-icons-devices">
1560 <title>Devices</title>
1561 <para>
1562 Links to Devices using <literal role="extension">.desktop</literal> file:
1563 o Create New -> Device
1565 </para>
1566 </sect2>
1568 <sect2 id="where-to-define">
1569 <title>Where to Define</title>
1571 <para>Many places to define Desktop Icons:
1572 <itemizedlist>
1574 <listitem><para><filename class="directory">~/Desktop</filename>:
1575 copied from <filename
1576 class="directory">/etc/skel/Desktop</filename></para></listitem>
1578 <listitem><para><filename
1579 class="directory">$<envar>KDEDIR</envar>/apps/kdesktop/Desktop</filename>
1580 (merged)</para></listitem>
1582 <listitem><para><filename
1583 class="directory">$<envar>KDEDIR</envar>/apps/kdesktop/DesktopLinks</filename>
1584 (copied)</para></listitem>
1586 <listitem><para>Device Icons (dynamically
1587 merged)</para></listitem>
1589 <listitem><para>Distribution Specific SUSE Linux copies certain icons
1590 in startkde.theme from <filename
1591 class="directory">/opt/kde3/share/config/SuSE/default/</filename></para></listitem>
1593 </itemizedlist>
1594 </para>
1595 </sect2>
1596 </sect1>
1598 <sect1 id="kde-menu">
1599 <title>&kde; Menu</title>
1601 <sect2 id="how-it-works">
1602 <title>How it Works</title>
1604 <para>In &kde; 3.2 a common menu format is introduced at
1605 <ulink
1606 url="http://freedesktop.org/Standards/menu-spec/">http://freedesktop.org/Standards/menu-spec/</ulink></para>
1607 <para>Before &kde; 3.2:
1608 <itemizedlist>
1610 <listitem><para>Directory structure under <filename
1611 class="directory">share/applnk</filename></para></listitem>
1613 <listitem><para>Directory structure represents menu
1614 structure</para></listitem>
1616 <listitem><para>Each <literal role="extension">.desktop</literal> file
1617 represents a single application</para></listitem>
1619 </itemizedlist>
1620 </para>
1622 <para>It was difficult to rearrange the structure in &kde; 3.2 so the
1623 new menu format:
1624 <itemizedlist>
1625 <listitem><para>Defines structure in a single .menu file</para></listitem>
1626 <listitem><para>Is based on categories</para></listitem>
1627 <listitem><para>is shared between <acronym>GNOME</acronym> and &kde;</para></listitem>
1628 <listitem><para>Supports applnk style menus as well</para></listitem>
1629 </itemizedlist>
1630 </para>
1632 <informalexample>
1633 <para>Example from <filename>applications.menu</filename>:
1634 <programlisting>
1635 <markup>
1636         &lt;Menu&gt;
1637             &lt;Name&gt;Office&lt;/Name&gt;
1638             &lt;Directory&gt;suse-office.directory&lt;/Directory&gt;
1639             &lt;Include&gt;
1640                 &lt;Filename&gt;Acrobat Reader.desktop&lt;/Filename&gt;
1641                 &lt;Filename&gt;kde-kpresenter.desktop&lt;/Filename&gt;
1642                 &lt;Filename&gt;kde-kword.desktop&lt;/Filename&gt;
1643             &lt;/Include&gt;
1644         &lt;Menu&gt;
1645 </markup>
1646 </programlisting>
1647 </para>
1648 <para>Menu entry with 3 applications:
1649 <itemizedlist>
1651 <listitem><para><filename>/usr/share/applications/Acrobat
1652 Reader.desktop</filename></para></listitem>
1654 <listitem><para><filename>/opt/kde3/share/applications/kde/kpresenter.desktop</filename></para></listitem>
1656 <listitem><para><filename>/opt/kde3/share/applications/kde/kword.desktop</filename></para></listitem>
1658 </itemizedlist>
1659 </para>
1660 </informalexample>
1661 </sect2>
1663 <sect2 id="stored-where">
1664 <title>Stored Where?</title>
1666 <para><literal role="extension">.menu</literal> files describing the
1667 menu structure. The files are stored in <filename
1668 class="directory">$<envar>KDEDIR</envar>/etc/xdg/menus</filename> and
1669 <filename class="directory">/etc/xdg/menus</filename>. These store the
1670 system-wide menu structure and are controlled by
1671 $<envar>XDG_CONFIG_DIRS</envar>. <filename
1672 class="directory">$<envar>HOME</envar>/.config/menus</filename> stores
1673 user-specific changes to the menu structure and is controlled by
1674 $<envar>XDG_CONFIG_HOME</envar>. For more information, see <ulink
1675 url="http://www.freedesktop.org/Standards/basedir-spec">http://www.freedesktop.org/Standards/basedir-spec</ulink>.</para>
1677 <para><literal role="extension">.desktop</literal> files describe the
1678 applications and are stored in: <filename
1679 class="directory">$<envar>KDEDIR</envar>/share/applications</filename>,
1680 <filename class="directory">/usr/share/applications</filename>,
1681 <filename
1682 class="directory">/usr/local/share/applications</filename>. These are
1683 the system-wide application <literal
1684 role="extension">.desktop</literal> files which are controlled by
1685 $<envar>XDG_DATA_DIRS</envar>.</para>
1687 <para><filename
1688 class="directory">$<envar>HOME</envar>/.local/applications</filename>
1689 contains user-specific <literal role="extension">.desktop</literal>
1690 files and user-specific changes. It is controlled by
1691 $<envar>XDG_DATA_HOME</envar>. For more information, see <ulink
1692 url="http://www.freedesktop.org/Standards/basedir-spec">http://www.freedesktop.org/Standards/basedir-spec</ulink></para>
1695 <para><literal role="extension">.directory</literal> files describing
1696 the sub-menus are stored in: <filename
1697 class="directory">$<envar>KDEDIR</envar>/share/desktop-directories</filename>,
1698 <filename class="directory">/usr/share/desktop-directories</filename>, <filename
1699 class="directory">/usr/local/share/desktop-directories</filename>.
1700 These are the system-wide menu <literal
1701 role="extension">.directory</literal> files, controlled by
1702 $<envar>XDG_DATA_DIRS</envar>. The user-specific changes are stored in <filename class="directory">$<envar>HOME</envar>/.local/desktop-directories</filename>.
1703 These are controlled by $<envar>XDG_DATA_HOME</envar>. For more
1704 information, see <ulink url="http://www.freedesktop.org/Standards/basedir-spec">http://www.freedesktop.org/Standards/basedir-spec</ulink></para>
1706 <informalexample>
1707 <para>Example from <filename>applications.menu</filename>:
1708 <programlisting>
1709 <markup>
1710              &lt;Menu&gt;
1711                         &lt;Name&gt;Art&lt;/Name&gt;
1712                         &lt;Directory&gt;suse-edutainment-art.directory&lt;/Directory&gt;
1713                         &lt;Include&gt;
1714                                 &lt;Category&gt;X-SuSE-Art&lt;/Category&gt;
1715                         &lt;/Include&gt;
1716                 &lt;/Menu&gt;
1717 </markup>
1718 </programlisting>
1719 </para>
1721 <para><literal>Art</literal> is the internal name for this
1722 menu. <filename>suse-edutainment-art.directory</filename> defines the
1723 name and icon for this menu, and the menu includes all applications
1724 that have <literal>X-SuSE-Art</literal> listed as a category, &eg;:
1725 <programlisting>
1726 Categories=Qt;KDE;Education;X-SuSE-Art
1727 </programlisting></para>
1729 <para><filename>suse-edutainment-art.directory</filename> defines the
1730 name and icon for this menu:
1731 <programlisting>
1732 [Desktop Entry]
1733 Name=Art and Culture
1734 Icon=kcmsystem
1735 </programlisting>
1736 </para>
1737 </informalexample>
1738 </sect2>
1740 <sect2 id="common-pitfalls">
1741 <title>Common Pitfalls</title>
1743 <para>Applications <emphasis>not</emphasis> in the menu do
1744 <emphasis>not</emphasis> exist with regard to other applications or
1745 file associations: If you remove an application from the menu, &kde; assumes you don't want to use it.</para>
1747 <para>When applications are unwanted in the menu, either place them in
1748 <filename>.hidden</filename> menu or a dedicated menu with 
1749 <programlisting>
1750 NoDisplay=true
1751 </programlisting> in the <literal
1752 role="extension">.directory</literal> file</para>
1753 </sect2>
1755 <sect2 id="essential-menus">
1756 <title>Essential Menus</title>
1758 <para><filename
1759 class="directory">$<envar>KDEDIR</envar>/etc/xdg/menus/applications-merged/</filename>
1760 contains <filename>kde-essential.menu</filename> which includes some
1761 essential menus that are normally not shown in the &kde; menu itself:
1762 <itemizedlist>
1763 <listitem><para>Control Center has a hidden Settings menu whose
1764 contents are defined by <filename>kde-settings.menu</filename> and
1765 whose icon and name are defined by <filename>kde-settings.directory</filename></para>
1766 </listitem>
1767 <listitem><para>Info Center has a hidden Information menu whose
1768 contents are defined by <filename>kde-information.menu</filename> and
1769 whose icon and  name are  defined by <filename>kde-information.directory</filename>.</para>
1770 </listitem>
1772 <listitem><para>Screensavers contains a hidden System/Screensavers menu,
1773 whose contents are defined by
1774 <filename>kde-screensavers.menu</filename> and whose icon and  name
1775 are defined by
1776 <filename>kde-system-screensavers.directory</filename>.
1777 <filename>$<envar>KDEDIR</envar>/share/desktop-directories/kde-system-screensavers.directory</filename>
1778 contains:
1779 <programlisting>
1780 NoDisplay=true
1781 </programlisting>
1782 </para>
1783 </listitem>
1784 </itemizedlist></para>
1785 </sect2>
1787 <sect2 id="old-style-menus">
1788 <title>Old-Style Menus</title>
1790 <para>&kde; continues to support old-style menus that are defined by
1791 the directory structures in <filename
1792 class="directory">$<envar>KDEDIR</envar>/share/applnk</filename>
1793 (system wide) and <filename
1794 class="directory">$<envar>HOME</envar>/.kde/share/applnk</filename>
1795 (user specific). This is observed unless the <literal role="extension">.desktop</literal> file has a  <varname>Categories</varname>= line. In that case the categories determine the location in the menu.</para>
1796 </sect2>
1798 <sect2 id="ksycoca">
1799 <title><application>KSycoca</application></title>
1800 <para><application>KSycoca</application> caches menu structure and
1801 information about all available applications. You can rebuild the
1802 database with
1803 <userinput><command>kbuildsycoca4</command></userinput>. The database
1804 which is built lives in <filename
1805 class="directory">/var/tmp/kdecache-${<envar>USER</envar>}/ksycoca</filename>.
1806 It is automatically updated by <application>KDED</application>,
1807 checked during &kde; login, and <application>KDED</application>
1808 watches for changes while logged in.</para>
1810 <para>To disable watching for changes (since it may hurt over NFS) add
1811 the following to <filename>kdedrc</filename>:
1812 <programlisting>
1813 [General]
1814 CheckSycoca=false
1815 </programlisting>
1816 </para>
1818 <para>To force regeneration, run <userinput><command>touch $<envar>KDEDIR</envar>/share/services/update_ksycoca</command></userinput>.</para>
1820 </sect2>
1822 <sect2 id="kmenuedit">
1823 <title>&kmenuedit;</title>
1825 <para>&kmenuedit; is aimed at a single user setup. Changes to menu
1826 structure are saved to
1827 <filename>~/.config/menus/applications-kmenuedit.menu</filename>,
1828 changes to applications are saved in <filename
1829 class="directory">~/.local/share/applications/</filename> and changes
1830 to sub-menus (icon, name) are saved in <filename
1831 class="directory">~/.local/share/desktop-directories/</filename>. The
1832 KIOSK Admin Tool uses &kmenuedit; and copies the above changes to
1833 profile- or system-wide locations.
1834 </para>
1836 </sect2>
1838 </sect1>
1840 <!-- This section might be redundant. If it isn't, it needs some screenies -->
1841 <sect1 id="kde-panel">
1842 <title>&kde; Panel</title>
1844 <para>The &kde; panel is also known as &kicker;. It is modular and
1845 consists of the following components:
1846 <itemizedlist>
1847 <listitem><para>Applets</para></listitem>
1848 <listitem><para>Application buttons</para></listitem>
1849 <listitem><para>Special Buttons</para></listitem>
1850 </itemizedlist>
1851 </para>
1853 <para>By default, the panel contains the following applets:
1854 <itemizedlist>
1855 <listitem><para>Pager - shows the virtual desktops</para></listitem>
1856 <listitem><para>Taskbar</para></listitem>
1857 <listitem><para>System Tray</para></listitem>
1858 <listitem><para>Clock</para></listitem>
1859 </itemizedlist>
1860 and the following special buttons:
1861 <itemizedlist>
1862 <listitem><para>&kde; menu</para></listitem>
1863 <listitem><para>Desktop Button</para></listitem>
1864 </itemizedlist>
1865 </para>
1867 <para>Various application buttons are also added, space permitting:
1868 <itemizedlist>
1869 <listitem><para>Home Button</para></listitem>
1870 <listitem><para>Browser Button</para></listitem>
1871 <listitem><para>KMail Button</para></listitem>
1872 </itemizedlist>
1873 </para>
1874 </sect1>
1876 <sect1 id="file-associations">
1877 <title>File Associations</title>
1879 <para>File associations associate a file type with an application or
1880 applications. The type of a file is established by determining its
1881 &MIME; type. &MIME; types known by &kde; are stored in <filename
1882 class="directory">$<envar>KDEDIR</envar>/share/mimelnk</filename> and
1883 each application's <literal role="extension">.desktop</literal> file
1884 contains a list of &MIME; types supported by that application.</para>
1886 <informalexample>
1887 <para><filename>kview.desktop</filename>:
1888 <programlisting>
1889 MimeType=image/gif;image/x-xpm;image/x-xbm;image/jpeg;
1890 image/x-bmp;image/png;image/x-ico;image/x-portable-bitmap;
1891 image/x-portable-pixmap;image/x-portable-greymap;
1892 image/tiff;image/jp2
1893 </programlisting>
1894 </para>
1896 <para><filename>kuickshow.desktop</filename>:
1897 <programlisting>
1898 MimeType=image/gif;image/x-xpm;image/x-xbm;image/jpeg;
1899 image/png;image/tiff;image/x-bmp;image/x-psd;image/x-eim;
1900 image/x-portable-bitmap;image/x-portable-pixmap;
1901 image/x-portable-greymap
1902 </programlisting>
1903 </para>
1905 <para>Both can open image/gif Which one is used to open a <literal role="extension">.gif</literal> file?</para>
1907 <para>The application with highest
1908 preference!. <filename>kview.desktop</filename> contains
1909 <programlisting>
1910 InitialPreference=3
1911 </programlisting>
1912 whereas <filename>kuickshow.desktop</filename> contains
1913 <programlisting>
1914 InitialPreference=6
1915 </programlisting>
1916 Therefore, &kuickshow; will be used to open <literal
1917 role="extension">.gif</literal> files.
1918 </para>
1920 <para>How can we make &kview;  default?</para>
1922 <para>A user can change file association in the
1923 &kcontrolcenter;. These changes are stored in
1924 <filename>$<envar>HOME</envar>/.kde/share/config/profilerc</filename>.
1925 To use the same settings for multiple users, store these settings in
1926 user profile directory or the global &kde; config directory to use as
1927 default for multiple users.</para>
1929 </informalexample>
1931 </sect1>
1933 </chapter>
1935 <chapter id="locking-down-kde">
1936 <title>Locking Down &kde;</title>
1938 <sect1 id="how-it-works-the-basics">
1939 <title>How It Works - The Basics</title>
1941 <para>&kde;'s lock down features are centered around the following
1942 options:</para>
1944 <itemizedlist>
1945 <listitem><para><link linkend="immutable-configuration-options">Make
1946 configuration options immutable</link></para></listitem>
1947 <listitem><para><link linkend="action-restrictions">Restriction of specific
1948 actions</link></para></listitem>
1949 <listitem><para><link linkend="url-restrictions">Restrict access to certain
1950 &URL;s</link></para></listitem>
1951 <listitem><para><link linkend="configuration-modules">Restrict access to
1952 certain configuration modules</link></para></listitem>
1953 </itemizedlist>
1955 </sect1>
1957 <sect1 id="immutable-configuration-options">
1958 <title>Immutable Configuration Options</title>
1959 <subtitle>Locking Down &kde;</subtitle>
1961 <para>Immutable options allow system administrator to provide default
1962 settings that can not be changed by the user.</para>
1964 <para>Pre-existing configuration options of the user will be ignored once a
1965 configuration option is made immutable.</para>
1967 <para>Options can be controlled either on a per entry basis, per group of
1968 entries or on a file by file basis.</para>
1970 <para>If a file or group is immutable, all configuration options for that
1971 file or group are immutable, even those options for which the system
1972 administrator has no default provided.</para>
1974 <note><para>The support in applications for immutable options may vary from
1975 application to application. Although the user will not be able to make
1976 permanent changes to immutable configuration options, the user may still be
1977 presented with an user interface option to make such change.</para></note>
1979 </sect1>
1981 <sect1 id="action-restrictions">
1982 <title>Action Restrictions</title>
1984 <para>&kde; applications are built around the action-concept. Actions can be
1985 activated in various ways, typically via the menu-bar, one of the toolbars
1986 or a keyboard shortcut. <action>Save Document</action> is an example of an
1987 action.  If you know the internal action name it is possible to restrict an
1988 action. When an action is restricted it will no longer appear in the
1989 menu-bar or toolbar. The internal name for the <action>Save
1990 Document</action> action is <option>action/file_save</option>.  The lock
1991 down framework also provides a set of more abstract restrictions which can
1992 be used to disable functionality not covered by a single action. An example
1993 is the <option>shell_access</option> restriction which disables all
1994 functionality that would offer the user access to a &UNIX; shell.</para>
1996 <example>
1997 <title>Restrict User Access to Shells</title>
1999 <para>In order to prevent the user access to a command shell we can restrict
2000 the <option>shell_access</option> action by adding the following to
2001 <filename>kdeglobals</filename>:
2002 </para> 
2004 <screen>[KDE Action Restrictions]
2005 shell_access=false</screen>
2007 <para>Since this affects the &kde; menu and the available applications, we
2008 must force an update of the sycoca database:</para>
2010 <screen><userinput><command>touch</command> <filename>$<envar>KDEDIR</envar>/share/services/update_ksycoca</filename></userinput></screen>
2012 <para>Now re-login to &kde; and check the following points:</para>
2014 <itemizedlist>
2015 <listitem><para>The &kmenu;</para></listitem>
2016 <listitem><para>In &konqueror;,
2017 <menuchoice><guimenu>Tools</guimenu><guimenuitem>Open
2018 Terminal</guimenuitem></menuchoice></para></listitem>
2019 <listitem><para>The <keycombo
2020 action="simul">&Alt;<keycap>F2</keycap></keycombo> run
2021 command</para></listitem>
2022 </itemizedlist>
2023 </example>
2024 <para>Full documentation about available actions can be found on <ulink
2025 url="http://www.kde.org/areas/sysadmin/">http://www.kde.org/areas/sysadmin/</ulink>.</para>
2027 <para>A few of the more interesting actions are listed below:</para>
2029 <variablelist>
2030 <varlistentry>
2031 <term><option>action/options_configure</option></term>
2032 <listitem><para>The <guimenuitem>Configure</guimenuitem> option form the
2033 <guimenu>Settings</guimenu> menu</para></listitem>
2034 </varlistentry>
2035 <varlistentry>
2036 <term><option>action/help_report_bug</option></term>
2037 <listitem><para>The <guimenuitem>Report Bug</guimenuitem> option from the
2038 <guimenu>Help</guimenu> menu.</para></listitem>
2039 </varlistentry>
2040 <varlistentry>
2041 <term><option>action/kdesktop_rmb</option></term>
2042 <listitem><para>&RMB; mouse button menu on the desktop.</para></listitem>
2043 </varlistentry>
2044 <varlistentry>
2045 <term><option>action/kicker_rmb</option></term>
2046 <listitem><para>&RMB; mouse button menu on the panel.</para></listitem>
2047 </varlistentry>
2048 <varlistentry>
2049 <term><option>user/root</option></term>
2050 <listitem><para>Hide all actions or applications that require <systemitem
2051 class="username">root</systemitem> access.</para></listitem>
2052 </varlistentry>
2053 <varlistentry>
2054 <term><option>shell_access</option></term>
2055 <listitem><para>Hides all actions or applications that provide shell
2056 access.</para></listitem>
2057 </varlistentry>
2058 <varlistentry>
2059 <term><option>print/system</option></term>
2060 <listitem><para>Disables the option to select the printing system
2061 (backend).</para></listitem>
2062 </varlistentry>
2063 <varlistentry>
2064 <term><option>lock_screen</option></term>
2065 <listitem><para>Whether the user will be able to lock the
2066 screen</para></listitem>
2067 </varlistentry>
2068 <varlistentry>
2069 <term><option>start_new_session</option></term>
2070 <listitem><para>Whether the user may start a second X session (see also
2071 &kdm;)</para></listitem>
2072 </varlistentry>
2073 <varlistentry>
2074 <term><option>opengl_screensavers</option></term>
2075 <listitem><para>Whether OpenGL screensavers are allowed to be
2076 used.</para></listitem>
2077 </varlistentry>
2078 <varlistentry>
2079 <term><option>manipulatescreen_screensavers</option></term>
2080 <listitem><para>Permit screensavers that do not hide the entire
2081 screen</para></listitem>
2082 </varlistentry>
2083 </variablelist>
2085 </sect1>
2087 <sect1 id="url-restrictions">
2088 <title>&URL; Restrictions</title>
2090 <para>There are three types of restrictions that can be applied to
2091 &URL;s:</para>
2093 <variablelist>
2094 <varlistentry>
2095 <term>list</term>
2096 <listitem><para>To control whether a directory listing is
2097 allowed.</para></listitem>
2098 </varlistentry>
2099 <varlistentry>
2100 <term>open</term>
2101 <listitem><para>To control whether certain &URL;s can be
2102 opened</para></listitem>
2103 </varlistentry>
2104 <varlistentry>
2105 <term>Redirect</term>
2106 <listitem><para>To control whether one &URL; can open another &URL;, either
2107 automatically or via a hyperlink.</para></listitem>
2108 </varlistentry>
2109 </variablelist>
2111 <para>Rules are checked in the order in which they are defined.  The last
2112 rule that is applicable to a &URL; defines whether the &URL; may be
2113 accessed.</para>
2115 <para>The following rules disable opening http and https &URL;s outside
2116 <systemitem class="domainname">.ourcompany.com</systemitem>:</para>
2118 <screenco><areaspec>
2119 <area id="url_commas" coords="3"/>
2120 <area id="url_rule1" coords="3"/>
2121 <area id="url_rule2" coords="4"/>
2122 </areaspec>
2123 <screen>[KDE URL Restrictions]
2124 rule_count=2
2125 rule_1=open,,,,http,,,false
2126 rule_2=open,,,,http,*.ourcompany.com,,true</screen></screenco>
2128 <calloutlist>
2129 <callout arearefs="url_commas">
2130 <para>The first four commas skip over the selection criteria with respect to
2131 the originating &URL;. This part is only needed with redirect type
2132 rules.</para> 
2133 </callout>
2134 <callout arearefs="url_rule1"><para><option>rule_1</option> forbids the
2135 opening of any http or https &URL;</para></callout>
2136 <callout arearefs="url_rule2"><para><option>rule_2</option> allows the
2137 opening of any http and https &URL; in the <systemitem
2138 class="domainname">.ourcompany.com</systemitem> domain.  Note the wildcard
2139 <token>*</token> is only allowed at the start of a domain.</para></callout>
2140 </calloutlist>
2142 <para>The following rules makes that the user can no longer browse
2143 directories on the local file system that are outside his
2144 $<envar>HOME</envar> directory:</para>
2146 <screenco><areaspec>
2147 <area id="home_rule1" coords="3"/>
2148 <area id="home_rule2" coords="4"/>
2149 </areaspec>
2150 <screen>[KDE URL Restrictions]
2151 rule_count=2
2152 rule_1=list,,,,file,,,false
2153 rule_2=list,,,,file,,$HOME,true</screen></screenco>
2155 <calloutlist>
2156 <callout arearefs="home_rule1"><para><option>rule_1</option> forbids the
2157 listing of any local directory</para></callout>
2158 <callout arearefs="home_rule2"><para><option>rule_2</option> allows listing
2159 directories under the users own $<envar>HOME</envar>
2160 directory.</para></callout>
2161 </calloutlist>
2163 <para>$<envar>HOME</envar> and $<envar>TMP</envar> are special values to
2164 indicate the users home directory and the &kde; temporary directory of the
2165 user, &eg; <filename class="directory">/tmp/kde-bastian</filename></para>
2167 <para>The following rules makes that the user can no longer open local files
2168 that are outside his $<envar>HOME</envar> directory:</para>
2170 <screenco><areaspec>
2171 <area id="local_rule1" coords="3"/>
2172 <area id="local_rule2" coords="4"/>
2173 <area id="local_rule3" coords="5"/>
2174 </areaspec>
2175 <screen>[KDE URL Restrictions]
2176 rule_count=3
2177 rule_1=open,,,,file,,,false
2178 rule_2=open,,,,file,,$HOME,true
2179 rule_3=open,,,,file,,$TMP,true</screen></screenco>
2181 <calloutlist>
2182 <callout arearefs="local_rule1"><para><option>rule_1</option> forbids the
2183 opening of any local file</para></callout>
2184 <callout arearefs="local_rule2"><para><option>rule_2</option> allows opening
2185 files under the users own $<envar>HOME</envar> directory.</para></callout>
2186 <callout arearefs="local_rule3"><para><option>rule_3</option> allows opening
2187 files in the &kde; temporary directory of the user.  This is needed by
2188 certain &kde; applications that first download a file or document to the
2189 temporary directory and then open it in an application.</para></callout>
2190 </calloutlist>
2193 <para>The redirection option controls whether documents from a certain
2194 location can refer, either automatically or manually via a hyperlink, to a
2195 certain other location.  A set of default rules is present as a general
2196 security measure. For example documents located on the Internet may not
2197 refer to locally stored documents.</para>
2199 <para>For example, if we want to give the intranet-server <systemitem
2200 class="systemname">www.mycompany.com</systemitem> the possibility to refer
2201 to local files we could add the following rule:</para>
2203 <screen>[KDE URL Restrictions]
2204 rule_count=1
2205 rule_1=redirect,http,www.mycompany.com,,file,,,true</screen>
2207 <para>Instead of listing a protocol by name, it is also possible to specify
2208 a whole group of protocols. For that the following groups have been
2209 defined:</para>
2211 <variablelist>
2212 <varlistentry>
2213 <term>:local</term>
2214 <listitem><para>Protocols that access locally stored information, examples
2215 are file:/, man:/, fonts:/, floppy:/</para></listitem>
2216 </varlistentry>
2217 <varlistentry>
2218 <term>:internet</term>
2219 <listitem><para>Common internet protocols such as http and
2220 ftp</para></listitem>
2221 </varlistentry>
2222 </variablelist>
2224 <para>Information about protocols is stored in <literal
2225 role="extension">*.protocol</literal> files stored in
2226 <filename
2227 class="directory">$<envar>KDEDIR</envar>/share/services</filename>.</para>
2229 <para>The <option>Class</option>= entry defines the group a protocol is part
2231 <userinput><command>grep</command> <option>Class=</option>
2232 <filename>$<envar>KDEDIR</envar>/share/services/*.protocol</filename></userinput></para>
2234 <para>General rules:</para>
2236 <itemizedlist>
2237 <listitem><para>The :local protocols may refer to any other
2238 protocol</para></listitem>
2239 <listitem><para>It's always allowed to refer to an :internet
2240 protocol</para></listitem>
2241 <listitem><para>Not all protocols are part of a group, fish:/ for
2242 example.</para></listitem>
2243 </itemizedlist>
2245 </sect1>
2247 <sect1 id="configuration-modules">
2248 <title>Configuration Modules</title>
2250 <para>&kde; has configuration modules to configure various aspects of the
2251 &kde; environment. Configuration modules appear in the Control Center, in the
2252 Configuration dialog of an application or in both.</para>
2254 <informalexample>
2255 <para>The proxy configuration module appears in the Control Center but also
2256 as part of the <guilabel>Configure Konqueror</guilabel> dialog in
2257 &konqueror;</para>
2259 <para>Individual configuration modules can be started with
2260 <command>kcmshell4</command> <replaceable>module</replaceable></para>
2262 <para>To start the Proxy module use:</para>
2263 <itemizedlist>
2264 <listitem><para><command>kcmshell4</command>
2265 <filename>kde-proxy.desktop</filename></para></listitem>
2266 <listitem><para><command>kcmshell4</command> proxy</para></listitem>
2267 </itemizedlist>
2269 <para><note><para>Not all applications use configuration modules, often the
2270 configuration dialog is an integral part of the application
2271 itself.</para></note></para>
2272 </informalexample>
2274 <para>All configuration modules are strictly speaking part of the &kde;
2275 menu.</para>
2277 <itemizedlist>
2278 <listitem>
2279 <para>The modules that are visible in the Control Center normally
2280 have a <literal role="extension">.desktop</literal> file in <filename
2281 class="directory">$<envar>KDEDIR</envar>/share/applications/kde</filename>
2282 and are sorted under the hidden <guimenu>Settings-Modules</guimenu> menu by
2283 the <filename>kde-settings.menu</filename>, included from 
2284 <filename>kde-essential.menu</filename></para>
2285 <screen><userinput><command>kbuildsycoca4</command> <option>--menutest</option> 2&gt; /dev/null | <command>grep</command> Settings-Modules</userinput></screen>
2286 </listitem>
2287 <listitem>
2288 <para>Application specific modules normally have a <literal role="extension">.desktop</literal> file under
2289 <filename>$<envar>KDEDIR</envar>/share/applnk/.hidden</filename> which
2290 corresponds to the hidden .hidden menu, included as a result of
2291 <markup>&lt;KDELegacyDirs/&gt;</markup></para>
2292 <screen><userinput><command>kbuildsycoca4</command> <option>--menutest</option> 2&gt; /dev/null | <command>grep</command> .hidden</userinput></screen>
2293 </listitem>
2294 <listitem><para>In &kde; 3.3 it is possible to edit the Control Center with
2295 <application>kcontroledit</application>.
2296 <application>kcontroledit</application> works just like
2297 <application>kmenuedit</application>, changes for current user only. Use
2298 <application>kiosktool</application> to make changes for
2299 everyone.</para></listitem> 
2300 </itemizedlist>
2302 <para>Individual configuration modules can be disables by adding the
2303 following to <filename>kdeglobals</filename>:</para>
2305 <screen>[KDE Control Module Restrictions]
2306 <replaceable>module-id</replaceable>=false</screen>
2307 <para>For example, to disable the proxy module use</para>
2308 <screen>[KDE Control Module Restrictions]
2309 kde-proxy.desktop=false</screen>
2310 <para>Check the Control Center and the <guilabel>Configure
2311 Konqueror</guilabel> dialog if the proxy configuration is still
2312 there.</para>
2314 </sect1>
2315 <!-- 
2316 <sect1 id="making-it-work">
2317 <title>Making it Work</title>
2319 Making It Work
2320 KDE 3.2: Set $KDEDIRS from startkde script
2321 Distribute profiles to all clients
2323 </para>
2324 </sect1>
2326 </chapter>
2328 <chapter id="the-lazy-admin">
2329 <title>The Lazy Admin</title>
2331 <!-- This section appears to need quite a lot of additional words to -->
2332 <!-- make sense. Perhaps it would be better to comment it out if it -->
2333 <!-- can't be updated before the next release (Phil) -->
2334 <!-- FIXME: Commented it out until it's got some more content fleshing it -->
2335 <!-- out (Lauri)
2337 <sect1 id="lazy-admin-overview">
2338 <title>Overview</title>
2340 <para>
2341 The Lazy Admin
2342 Overview
2343 Deployment
2344         How to get &kde; available on many clients
2345 Remote Desktop Sharing
2346 Take a look at someone else desktop
2347 DCOP
2348         The DCOP command line tool makes it possible to control &kde; applications from the command line
2349 KDialog
2350         A versatile tool to use standard &kde; dialogs in your own scripts
2354 Deployment
2355 Thin Clients
2356 Installing Software
2357 = AutoYaST
2358 = KickStart
2359 Maintaining Settings
2360 = /etc/kderc, other settings
2361 = Use rsync to copy files around
2362 = Shared filesystem such as NFS
2363 o store profiles themselves on NFS
2367 http://www.suse.de/~nashif/autoinstall/index.html
2369 </para>
2370 </sect1>
2372 <sect1 id="remote-desktop-sharing">
2373 <title>Remote Desktop Sharing</title>
2375 <para>Remote desktop sharing allows remote users to view and optionally
2376 control the desktop of the current user.  The remote user needs to be sent
2377 an invitation, and it is possible to create a password protected standing
2378 invitation. This is ideal for tech support teams or administrators to gain
2379 access to users desktops in order to troubleshoot or remedy a problem or
2380 guide a user through a procedure.</para>
2382 <para>Remote desktop sharing involves two applications: &krfb; (&kde; remote
2383 frame buffer, a VNC server) and &krdc; (&kde; remote desktop connection; a
2384 VNC client.)</para>
2386 <para>&krfb; can be used by any user to create and manage invitations.
2387 Invitations create a one time password that allows the recipient to connect
2388 to your desktop.  By default it is valid for only one successful connection,
2389 and expires after one hour if not used.</para>
2391 <para>Incoming connections are handled by the kinetd kded module.  You can
2392 use the command <userinput><command>dcop</command> kded kinetd
2393 services</userinput> to see if it is running. &krfb; waits for connections
2394 on port 5900 by default.  When an incoming connection is made, a dialog will
2395 appear to ask for confirmation by the current user.</para>
2397 <!-- TODO: Write a bit more here, with a walk through maybe? -->
2399 </sect1>
2401 <sect1 id="kde-diy">
2402 <title>&kde; DIY - Building Your Own Tools</title>
2404 <sect2 id="dcop">
2405 <title>DCOP</title>
2407 <para>
2408 Desktop COmmunication Protocol, <acronym>DCOP</acronym>, is a lightweight mechanism for inter-process communication.  
2409 <acronym>DCOP</acronym> allows the user to interact with programs that are currently running.
2410 &kde; supplies two programs to utilitize <acronym>DCOP</acronym>: 
2411 <application>dcop</application>, a command-line program, and 
2412 <application>kdcop</application>, a <acronym>GUI</acronym> program.
2413 </para>
2414 <para>
2415 A few notes about using <command>dcop</command>:
2416 </para>
2418 <para>
2419 <itemizedlist>
2420 <listitem>
2421 <para>
2422 <command>dcop</command> [options] [application [object [function [arg1] [arg2] ... ] ] ]
2423 </para>
2424 </listitem>
2425 <listitem>
2426 <para>
2427 Applications that can open more than one window at a time will be listed as 
2428 &lt;application&gt;-<acronym>PID</acronym>
2429 </para>
2430 </listitem>
2431 <listitem>
2432 <para>
2433 All the arguments are case-sensitve.  setFullScreen and setfullscreen are two different functions.
2434 </para>
2435 </listitem>
2436 <listitem>
2437 <para>
2438 The regular expression token * can be used in the application and object arguments.
2439 <screen><prompt>&percnt; </prompt><userinput><command>dcop</command><option> kon*</option></userinput>
2440 konqueror-16006
2441 konsole-8954
2442 </screen>
2443 </para>
2444 </listitem>
2446 </itemizedlist>
2448 </para>
2450 <para>Some example commands and their output are below:
2451 </para>
2453 <informalexample>
2454 <screen><prompt>&percnt; </prompt><userinput><command>dcop</command><option> konsole*</option></userinput>
2455 konsole-8954
2456 </screen>
2457 <para>One &konsole; is running with a <acronym>PID</acronym> of 8954.</para>
2459 <screen><prompt>&percnt; </prompt><userinput><command>dcop</command><option> konsole-8954</option></userinput>
2460 KBookmarkManager-.../share/apps/kfile/bookmarks.xml
2461 KBookmarkManager-.../share/apps/konqueror/bookmarks.xml
2462 KBookmarkNotifier
2463 KDebug
2464 MainApplication-Interface
2465 konsole (default)
2466 konsole-mainwindow#1
2467 ksycoca
2468 session-1
2469 session-2
2470 session-3
2471 session-4
2472 </screen>
2473 <para>Here you see that there are four sessions running.</para>
2475 <screen><prompt>&percnt; </prompt><userinput><command>dcop</command><option> konsole-8954</option><option> konsole</option></userinput>
2476 QCStringList interfaces()
2477 QCStringList functions()
2478 int sessionCount()
2479 QString currentSession()
2480 QString newSession()
2481 QString newSession(QString type)
2482 QString sessionId(int position)
2483 void activateSession(QString sessionId)
2484 void nextSession()
2485 void prevSession()
2486 void moveSessionLeft()
2487 void moveSessionRight()
2488 bool fullScreen()
2489 void setFullScreen(bool on)
2490 ASYNC reparseConfiguration()
2491 </screen>
2492 <para>Here are the options for the main &konsole; program.
2493 </para>
2495 <screen><prompt>&percnt; </prompt><userinput><command>dcop</command><option> konsole-8954</option><option> session-1</option></userinput>
2496 QCStringList interfaces()
2497 QCStringList functions()
2498 bool closeSession()
2499 bool sendSignal(int signal)
2500 void clearHistory()
2501 void renameSession(QString name)
2502 QString sessionName()
2503 int sessionPID()
2504 QString schema()
2505 void setSchema(QString schema)
2506 QString encoding()
2507 void setEncoding(QString encoding)
2508 QString keytab()
2509 void setKeytab(QString keyboard)
2510 QSize size()
2511 void setSize(QSize size)
2512 </screen>
2513 <para>Here are the options for the first session, session-1.</para>
2515 <screen><prompt>&percnt; </prompt><userinput><command>dcop</command><option> konsole-8954</option><option> konsole</option><option> setFullScreen</option><parameter> true</parameter></userinput>
2516 </screen>
2517 <para>This sets &konsole; to full screen.</para>
2519 </informalexample>
2521 <para>
2522 When there is more than one application/object, which one should you use?
2523  Got a reference?
2524 </para>
2525 <screen><prompt>&percnt; </prompt><userinput><command>echo</command><option> $KONSOLE_DCOP</option></userinput>
2526 DCOPRef(konsole-7547,konsole)
2528 <prompt>&percnt; </prompt><userinput><command>dcop</command><option> $KONSOLE_DCOP</option><option> newSession</option></userinput>
2529 session-6
2531 <prompt>&percnt; </prompt><userinput><command>dcopstart</command><option> konsole</option></userinput>
2532 konsole-9058
2535 #!/bin/sh
2536 konsole=$(dcopstart konsole-script)
2537 session=$(dcop $konsole konsole currentSession)
2538 dcop $konsole $session renameSession Local
2540 session=$(dcop $konsole konsole newSession)
2541 dcop $konsole $session renameSession Remote
2543 session=$(dcop $konsole konsole newSession)
2544 dcop $konsole $session renameSession Code
2545 dcop $konsole $session sendSession 'cd /my/work/directory'
2547 </screen>
2549 </sect2>
2551 <sect2 id="kdialog">
2552 <title>KDialog</title>
2553 <subtitle>&kde; DIY - Building Your Own Tools</subtitle>
2555 <para>You can use &kde; dialogs from your own scripts, to combine the power
2556 of &UNIX; shell scripting with the ease of use of &kde;.</para>
2558 <screen><userinput><command>kdialog</command> <option>--msgbox 'You have new mail!'</option></userinput></screen>
2560 <screen><userinput><command>kdialog</command> <option>--title 'New Mail'</option> <option>--msgbox 'You have new mail!'</option></userinput></screen>
2562 <para>The <application>KDialog</application> part can be replaced via
2563 <option>--caption</option> option</para>
2565 <screen><userinput><command>kdialog</command> <option>--title 'New Mail'</option> <option>--msgbox 'You have new mail!'</option> <option>--dontagain myfile:mykey</option></userinput></screen>
2567 <para>Saves whether to show again in
2568 <filename>$<envar>KDEHOME</envar>/share/config/myfile</filename> (by writing
2569 into this file the following lines:</para>
2571 <screen>[Notification Messages]
2572 mykey=false</screen>
2574 <para>Instead of <option>--msgbox</option> you can also use
2575 <option>--sorry</option> and <option>--error</option>, as appropriate.  For
2576 instance, you might use <command>kdialog</command> <option>--sorry 'The
2577 network can not be reached'</option> or <command>kdialog</command>
2578 <option>--error 'Mail box can not be opened'</option>.</para>
2580 <para>It is also possible to create message boxes that accept a yes or no
2581 answer.</para>
2583 <screen><command>kdialog</command> <option>--yesno 'Do you want to connect
2584 to the Internet?'</option> <command>echo</command> <returnvalue>$?</returnvalue></screen>
2586 <informaltable>
2587 <tgroup cols="2">
2588 <thead>
2589 <row>
2590 <entry>Return Value</entry>
2591 <entry>Meaning</entry>
2592 </row>
2593 </thead>
2594 <tbody>
2595 <row><entry>0</entry><entry>Yes, OK, Continue</entry></row>
2596 <row><entry>1</entry><entry>No</entry></row>
2597 <row><entry>2</entry><entry>Cancel</entry></row>
2598 </tbody>
2599 </tgroup>
2600 </informaltable>
2602 <para>Make sure to store the result in a variable if you do not use it
2603 directly, the next command will fill $? with a new value You can use
2604 <option>--dontagain</option> here as well, it will remember the users choice
2605 and returns it the next times without showing the dialog any more.</para>
2607 <para>Further variations are:</para>
2609 <variablelist>
2610 <varlistentry>
2611 <term><option>--warningyesno</option></term>
2612 <listitem>
2613 <para>like <option>--yesno</option> but with a different
2614 icon</para>
2615 </listitem>
2616 </varlistentry>
2617 <varlistentry>
2618 <term><option>--warningcontinuecancel</option></term>
2619 <listitem><para>With <guibutton>Continue</guibutton> and
2620 <guibutton>Cancel</guibutton> buttons.</para>
2621 </listitem>
2622 </varlistentry>
2623 <varlistentry>
2624 <term><option>--warningyesnocancel</option></term>
2625 <listitem><para>With <guibutton>Yes</guibutton>, <guibutton>No</guibutton>
2626 and <guibutton>Cancel</guibutton> button.  For example:</para>
2627 <screen><command>kdialog</command> <option>--warningyesnocancel 'Do you want
2628 to save the changes?'</option></screen>
2629 </listitem>
2630 </varlistentry>
2631 </variablelist>
2633 <screen><command>kdialog</command> <option>--inputbox "Enter your name:" "YourName"</option></screen>
2635 <para>The result is printed to stdout, to put it in a variable you can use
2636 <userinput>name=$(kdialog --inputbox "Enter your name:"
2637 "YourName")</userinput>.  The last argument is optional, it is used to
2638 pre-fill the dialog.</para>
2640 <screen><userinput><varname>password</varname>=$(<command>kdialog</command> <option>--password "Enter your password:"</option>)</userinput></screen>
2642 <para>The <option>--dontagain</option> option does not work with
2643 <option>--inputbox</option> or <option>--password</option></para>
2645 <para>There are two dialogs that let the user make a choice from a
2646 list:</para>
2648 <variablelist>
2649 <varlistentry>
2650 <term><option>--menu</option></term>
2651 <listitem>
2652 <para>Lets the user select a single item from a list.</para>
2653 </listitem>
2654 </varlistentry>
2655 <varlistentry>
2656 <term><option>--checklist</option></term>
2657 <listitem>
2658 <para>Lets the user select one or more items from a list.</para>
2659 </listitem>
2660 </varlistentry>
2661 </variablelist>
2663 <screen><userinput><varname>city</varname>=$(<command>kdialog</command> <option>--menu "Select a city" a London b Madrid c Paris d Berlin</option>)</userinput></screen>
2665 <para><varname>$city</varname> will <returnvalue>a</returnvalue>, <returnvalue>b</returnvalue>, <returnvalue>c</returnvalue> or <returnvalue>d</returnvalue>.</para>
2667 <screen><userinput><varname>city</varname>=$(<command>kdialog</command> <option>--checklist "Select cities" a London off b Madrid on c Paris on d Berlin off</option>)</userinput></screen>
2669 <para>Madrid and Paris will be pre-selected.  The result with Madrid and
2670 Paris selected will be <returnvalue>"b"</returnvalue>
2671 <returnvalue>"c"</returnvalue>.</para>
2673 <para>If you add the <option>--separate-output</option> option, it will put
2674 <returnvalue>b</returnvalue> and <returnvalue>c</returnvalue> each on a line
2675 of its own, making the result easier to process.</para>
2677 <screen>file=$(kdialog --getopenfilename $HOME)
2678 file=$(kdialog --getopenfilename $HOME "*.png *.jpg|Image Files")
2679 file=$(kdialog --getsavefilename $HOME/SaveMe.png)
2680 file=$(kdialog --getexistingdirectory $HOME)</screen>
2682 </sect2>
2684 </sect1>
2686 </chapter>
2688 &groupware-with-kontact;
2690 </part>
2692 <!-- Keep this comment at the end of the file
2693 Local variables:
2694 mode: xml
2695 sgml-omittag:nil
2696 sgml-shorttag:nil
2697 sgml-namecase-general:nil
2698 sgml-general-insert-case:lower
2699 sgml-minimize-attributes:nil
2700 sgml-always-quote-attributes:t
2701 sgml-indent-step:0
2702 sgml-indent-data:true
2703 sgml-parent-document:("index.docbook" "book" "part")
2704 sgml-exposed-tags:nil
2705 sgml-local-catalogs:nil
2706 sgml-local-ecat-files:nil
2707 End: