Difference between pages "KDE3 Filesystem Hierarchy" and "KDE3 Tutorials"

From Trinity Desktop Project Wiki
(Difference between pages)
Jump to navigation Jump to search
imported>Eliddell
 
imported>Eliddell
 
Line 1: Line 1:
  +
[[Category:Developers]]
(Originally found at http://techbase.kde.org/KDE_System_Administration/KDE_Filesystem_Hierarchy . That page bears the following license: Creative Commons License SA 3.0 as well as the GNU Free Documentation License 1.2.)
 
  +
[[Category:KDE3]]
  +
[[Category:Tutorials]]
   
  +
====Getting Started====
==Introduction==
 
   
  +
[[Qt Designer and KDevelop 3.0 for Beginners]] [http://women.kde.org/articles/tutorials/kdevelop3/index.html (Original Link)]: Qt is the toolkit used by the KDE project for developing graphical applications. Currently, translations are available through the original link. This paper, written by Anne-Marie Mahfouf, shows a beginner how to create a simple application using Qt Designer 3 and KDevelop 3. This tutorial is based on an application written by Jono Bacon and has been reviewed by Daniel Molkentin (for the KDevelop 2 version) and Thomas Nagy. Translations to German, Russian, French, Italian, and Romanian available at the original site. Brought to you by KDE-Women.
KDE defines a filesystem hierarchy that is used by the KDE environment itself as well as all KDE applications. In general, KDE stores all its files in a fixed directory tree.
 
   
  +
[[KDE 3.0 Tutorial]]: An excellent tutorial by KDE developer Antonio Larrosa Jiménez leading you from nothing to a fairly full featured web browser. Highly recommended for KDE 3.0 developers.
By default, there are two such directory trees: one at the system level and one at the user level in the user's home directory. However, as a system administrator you can create additional trees.
 
   
  +
[[Programming Tutorial for KDE 3]]
KDE and KDE applications look up files by scanning the directory trees in order of precedence. When a file is present in multiple directory trees, the file from the first-listed tree takes precedence. Normally, the tree located in the user's home directory has the highest precedence. This is also the directory tree that changes are written to.
 
   
  +
[[Makefile.am HOWTO]]: Make the KDE 3 build system work for you. This HOWTO shows you how to do most anything you would need to do to get your application to compile and install
For configuration files, the story is slightly different. If multiple configuration files with the same name are found in the directory trees, their content is combined. The precedence order of the directory trees plays a role here: when two files define the same configuration key, the file with the highest precedence determines which value is used for the key.
 
   
  +
====Components and Plugins====
==Location of the Directory Trees==
 
   
  +
[[KDE User Interface Tutorial (XML GUI)]]: Tutorial by KDE developer Kurt Granroth showing how to convert an existing KDE application to use the new XML based user interface builder.
The location of the KDE Directory Trees is determined by a number of environment variables, each of which is covered below.
 
   
  +
[[Creating KParts Component]]: Tutorial on IBM DeveloperWorks, by David Faure shows developers how to create KParts components, under KDE 2 and KDE 3.
===KDEHOME===
 
   
  +
[[Developing a Plugin Structure for a KDE Application]]: This tutorial will take you through all the steps needed to write a plugin structure, plus plugins for your KDE application.
The KDEHOME environment variable determines the location of the user-level directory tree and is used by KDE applications for creating and saving files. This directory tree has the highest precedence; files or settings found in this directory tree will take precedence over any files or settings found in other directory trees.
 
   
  +
[[Providing file meta-data support with KFile plugins]]: Tutorial by Brad Hards that describes how to write a meta-data plugin for your favourite file format. It is presented as an example based tutorial.
This directory tree is, as the name suggests, normally located in the user's home directory. If this environment variable is not defined, the default location $HOME/.kde4 is used.
 
   
  +
[[Embedded Components Tutorial]]: Tutorial by KDE developer Kurt Granroth showing how to convert an existing KDE application into a component suitable for embedding in Konqueror.
If the environment variable has a value that starts with a tilde (~), the tilde is replaced with the user's home directory at runtime. In order to use this, care must be taken to add proper quoting, otherwise the shell might do the expansion, resulting in undesired behavior in combination with su.
 
   
  +
[[How to write Kontact plugins]]
===KDEROOTHOME===
 
   
  +
[[KConfig Module HOWTO]]: A small tutorial about writing a module for the KDE Control Center.
In order to prevent problems with applications that run as root saving files with root access permissions in the user's home directory, the KDEROOTHOME environment variable has been introduced in the KDE 3.x series. Applications that run with uid 0 (root) will use this variable to determine the location of the user level directory and where to save their files. If this variable is not defined, the root user's home directory is looked up in the password file and .kde4 is appended. Usually that results in /root/.kde4 .
 
   
  +
[[Using the KDE dock widget]]: Tutorial for creating widgets that dock to other widgets.
===KDEDIRS===
 
   
  +
[[Introduction to Get Hot New Stuff]]: An introduction to the developer-friendly network update system that allows KDE applications to fetch new application data at runtime in a user friendly manner.
It is possible to specify multiple system-level directory trees. This allows groups of users to each dedicate a directory to their group. Such an additional directory tree can contain additional applications, specialized application resources or a specific set of default configurations suitable for the group. Specifying default configurations this way instead of using a /etc/skel construction has the advantage that changes in the default configuration can be made after the user's account has been created.
 
   
  +
====File Access with KIO====
The directories in $KDEDIRS should be separated with a colon (:). The directories are listed in order of precedence: the first directory has the highest precedence, the last one has the lowest precedence.
 
   
  +
[[KIO Tutorial (German version)]]: Tutorial by KDE developers Carsten Pfeiffer and Stephan Kulow for the c't Magazine, giving an introduction into the KDE IO Architecture and an example KIO Slave.
Since a group-level directory tree should normally override any settings present at the system level, one should list the group-level directory tree before the system level directory tree.
 
   
  +
[[Using IOSlaves]]: IOSlaves are the subprocesses KDE uses to fetch remote files without blocking the user interface. This document discusses how they work and how to use them. (Somewhat dated, but might still be useful).
In general communication, references to the directory trees are made in terms of $KDEHOME to indicate the applicable user-level directory tree, and in terms of $KDEDIRS to indicate any of the system-level directory trees.
 
   
  +
====Scripting and Application Automation====
'''Example'''
 
   
  +
[[Creating a DCOP Interface]]: This tutorial shows you how to create a DCOP interface to a KDE application.
A staff member at a university could have the following settings:
 
   
  +
[[Connect KDE applications using DCOP]]: IBM DeveloperWorks tutorial, shows how to use kdcop and dcop with several examples such as instantly messaging a contact in kopete when he comes online, and also how to create a simple DCOP-aware application.
KDEHOME='~/.kde3'
 
KDEROOTHOME='/root/.kde3'
 
KDEDIRS='/opt/kde_staff:/opt/kde3'
 
   
  +
====Misc.====
In this example the user settings are saved under the .kde3 directory in the user's home directory. Applications that run as root will save their settings to /root/.kde3. KDE 3 has been installed to /opt/kde3 but there is also an additional directory tree located at /opt/kde_staff. Configuration files under that directory will take precedence over the ones in the /opt/kde3 system directories. /opt/kde_staff could contain additional applications that should only be available to staff members.
 
   
  +
[[KWin decoration styles]]: Tutorial on creating decoration plugins for the KWin window manager (KDE 3.2 and later).
==Directory Tree==
 
   
  +
[[Creating Konqueror Service Menus]]: This tutorial shows you how to create mimetype-specific actions in Konqueror's context menu (aka "servicemenus").
Each directory tree used by KDE has a fixed directory structure. However, directories that are not relevant for a certain tree can be left out. For example, directories used for temporary files are usually only found under $KDEHOME but not in any other directory tree.
 
 
The KDE runtime environment combines the subdirectories found under the various directory trees and refers to them as a single KDE resource. The KDE resource name is listed in the tables below.
 
 
There are three broad categories: files that are CPU/architecture-specific, files that are host-specific and files that are not specific with regard to host, CPU or architecture.
 
 
CPU/architecture-specific directories:
 
{| class="wikitable"
 
|-
 
!Directory
 
!KDE resource
 
!Description
 
|-
 
|bin/
 
|exe
 
|Used for KDE executables.
 
|-
 
|cgi-bin/
 
|cgi
 
|CGI scipts that can be used by the KDE Help Center.
 
|-
 
|lib64/
 
|lib
 
|Used for KDE libraries.
 
|-
 
|lib64/kde3/
 
|module
 
|This directory contains components, plugins and other runtime loadable objects for use by KDE 3.x applications.
 
|}
 
 
The following are host-specific directories. They are only available under $KDEHOME and are normally symlinked to locations outside the $KDEHOME directory tree.
 
{| class="wikitable"
 
|-
 
!Directory
 
!KDE resource
 
!Description
 
|-
 
|socket-$HOSTNAME
 
|socket
 
|This directory contains communication sockets. The filesystem used by $KDEHOME may not be suitable for communication sockets. For that reason this directory is symlinked to another location by default.
 
|-
 
|tmp-$HOSTNAME
 
|tmp
 
|This directory is used for temporary files. The filesystem used by $KDEHOME may be on a network, so, for performance reasons, this directory is symlinked by default to a location more likely to be on a local filesystem.
 
|-
 
|cache-$HOSTNAME
 
|cache
 
|New in KDE 3.2. This directory is used for cached information such as HTTP objects, formatted help pages and the system configuration cache (ksycoca).
 
 
Since this is non-essential information, this directory is symlinked to a location outside $KDEHOME by default to make it easier to make backups of other information and reclaim diskspace.
 
|}
 
 
The majority of directories involves data that is not CPU-, architecture- or host-specific. All these directories are prefixed with share/:
 
 
{| class="wikitable"
 
|-
 
!Directory
 
!KDE resource
 
!Description
 
|-
 
|share/applnk/ share/applications/
 
|apps
 
|Contains .desktop files describing the KDE menu.
 
|-
 
|share/apps/
 
|data
 
|Contains application-specific data files. Each application has a subdirectory here for storing its files.
 
|-
 
|share/config/
 
|config
 
|Contains configuration files. Configuration files are normally named after the application they belong to, followed by "rc". There are also files that are specific to a component and as such referenced by all applications that use that component. A special case is "kdeglobals": this file is read by all KDE applications.
 
|-
 
|share/config/session/
 
| -
 
|This directory is used by session management and is normally only available under $KDEHOME. At the end of a session, KDE applications store their state here. The file names start with the name of the application followed by a number. The session manager "ksmserver" stores references to these numbers when saving a session in "ksmserverrc".
 
|-
 
|share/doc/HTML/ share/doc/kde/HTML/lang/package
 
|html
 
|Documentation of KDE applications is stored here. Documentation is categorized by language and the application it belongs to.
 
 
Normally, at least two files can be found in a directory: "index.docbook", which contains the documentation in the unformatted docbook format, and "index.cache.bz2", which contains the same documentation formatted as bzip2 compressed HTML. The HTML version is used by khelpcenter; if the HTML version is missing, it will regenerate it from the docbook version, but this is a time-consuming process.
 
|-
 
|share/icons/
 
|icon
 
|Icons are stored under this directory, categorized by theme, dimension and usage category.
 
|-
 
|share/mimelnk/
 
|mime
 
|.desktop files that describe MIME types were stored in this directory.
 
|-
 
|share/services/
 
|services
 
|This directory contains .desktop files that describe services. Services and Applications are very similar; the major difference is that a Service is usually used by other Services or Applications, while an Application is in general started by the user. Services do not appear in the KDE menu.
 
|-
 
|share/servicetypes/
 
|servicetypes
 
|This directory contains .desktop files that describe service types. A service type usually represents a certain programming interface. Applications and Services include the servicetypes that they provide in their .desktop files.
 
|-
 
|share/sounds/
 
|sound
 
|This directory contains sound files.
 
|-
 
|share/templates/
 
|templates
 
|This directory contains templates for creating files of various types. A template consists of a .desktop file that describes the file and includes a reference to a file in the .source subdirectory. The templates in this directory appear in the "Create New" menu available on the desktop and in the file browser. When a user selects a template from the menu, its source file is copied.
 
|-
 
|share/wallpapers/
 
|wallpaper
 
|This directory contains images that can be used as background pictures.
 
|}
 
 
==Outside the Directory Tree==
 
 
As mentioned in the description of the directory tree, there are three host-specific directories that are usually symlinked to other locations. If the directories do not already exist, the following symlinks and directories will be created using the lnusertemp utility. Since both /tmp and /var/tmp are world writable, there is a possibility that one of the mentioned directories already exists but is owned by another user. In that case, the lnusertemp utility will create a new directory with an alternative name and link to that instead.
 
 
===Sockets===
 
 
Symlink: $KDEHOME/socket-$HOSTNAME
 
 
Default destination: /tmp/ksocket-$USER/
 
 
The command lnusertemp socket creates a directory for local communication sockets and point a symlink to it. The combined length of the directory name and the name of any communication socket should not exceed 106 characters. By default this directory is created under /tmp, but other locations can be used by setting the KDETMP environment variable.
 
 
===Temporary Files===
 
 
Symlink: $KDEHOME/tmp-$HOSTNAME
 
 
Default destination: /tmp/kde-$USER/
 
 
The command lnusertemp tmp creates a directory for temporary files and points a symlink to it. For performance reasons it is recommended to have this directory on a local filesystem, but this is not strictly necessary.
 
 
===Cache Files===
 
 
Symlink: $KDEHOME/cache-$HOSTNAME
 
 
Default destination: /var/tmp/kdecache-$USER/
 
 
The command lnusertemp cache creates a directory for cache files and points a symlink to it. For performance reasons it is recommended to have this directory on a local filesystem, but this is not strictly necessary.
 
 
The system configuration cache (ksycoca and ksycocastamp) is located in here. It is recommended NOT to delete these files during boot since that will slow down the startup of KDE.
 
 
By default this directory is created under /var/tmp, other locations can be used by setting the KDEVARTMP environment variable.
 
 
==Adding Lookup Locations==
 
 
KDE applications look up data files using the resource names listed in the #Directory Tree section. The KDE runtime environment translates these names to actual directories by combining the locations of the directory trees with the directories listed in the tables.
 
 
===Defining Search Paths===
 
 
A user has the following directory tree settings:
 
 
KDEHOME='~/.kde3'
 
KDEDIRS='/opt/kde_staff:/opt/kde3'
 
 
When an application now looks for a "wallpaper" file, the directory share/wallpapers/ is added to each of the directory trees. All of the resulting directories are then searched for the file:
 
 
~/.kde3/share/wallpapers/
 
/opt/kde_staff/share/wallpapers/
 
/opt/kde3/share/wallpapers/
 
 
By adding more directory tree to the KDEDIRS environment variable it is possible to expand the number of directories that are being searched. Sometimes it is desirable to include only a single directory in a search but not a whole directory tree. Additional directories can be configured in the kdeglobals configuration file in the [Directories] section. To do so assign one or more directories to the key dir_ followed by the name of the resource. Multiple directories are separated by commas (,).
 
 
===Adding a Resource Directory===
 
 
To add the directory /data/photos to the wallpaper resource, put the following two lines in kdeglobals:
 
 
[Directories]
 
dir_wallpaper=/data/photos
 
 
When the application now looks for wallpaper files, it will look in the following locations:
 
 
/data/photos
 
~/.kde3/share/wallpapers/
 
/opt/kde_staff/share/wallpapers/
 
/opt/kde3/share/wallpapers/
 

Revision as of 11:13, 27 April 2014


Getting Started

Qt Designer and KDevelop 3.0 for Beginners (Original Link): Qt is the toolkit used by the KDE project for developing graphical applications. Currently, translations are available through the original link. This paper, written by Anne-Marie Mahfouf, shows a beginner how to create a simple application using Qt Designer 3 and KDevelop 3. This tutorial is based on an application written by Jono Bacon and has been reviewed by Daniel Molkentin (for the KDevelop 2 version) and Thomas Nagy. Translations to German, Russian, French, Italian, and Romanian available at the original site. Brought to you by KDE-Women.

KDE 3.0 Tutorial: An excellent tutorial by KDE developer Antonio Larrosa Jiménez leading you from nothing to a fairly full featured web browser. Highly recommended for KDE 3.0 developers.

Programming Tutorial for KDE 3

Makefile.am HOWTO: Make the KDE 3 build system work for you. This HOWTO shows you how to do most anything you would need to do to get your application to compile and install

Components and Plugins

KDE User Interface Tutorial (XML GUI): Tutorial by KDE developer Kurt Granroth showing how to convert an existing KDE application to use the new XML based user interface builder.

Creating KParts Component: Tutorial on IBM DeveloperWorks, by David Faure shows developers how to create KParts components, under KDE 2 and KDE 3.

Developing a Plugin Structure for a KDE Application: This tutorial will take you through all the steps needed to write a plugin structure, plus plugins for your KDE application.

Providing file meta-data support with KFile plugins: Tutorial by Brad Hards that describes how to write a meta-data plugin for your favourite file format. It is presented as an example based tutorial.

Embedded Components Tutorial: Tutorial by KDE developer Kurt Granroth showing how to convert an existing KDE application into a component suitable for embedding in Konqueror.

How to write Kontact plugins

KConfig Module HOWTO: A small tutorial about writing a module for the KDE Control Center.

Using the KDE dock widget: Tutorial for creating widgets that dock to other widgets.

Introduction to Get Hot New Stuff: An introduction to the developer-friendly network update system that allows KDE applications to fetch new application data at runtime in a user friendly manner.

File Access with KIO

KIO Tutorial (German version): Tutorial by KDE developers Carsten Pfeiffer and Stephan Kulow for the c't Magazine, giving an introduction into the KDE IO Architecture and an example KIO Slave.

Using IOSlaves: IOSlaves are the subprocesses KDE uses to fetch remote files without blocking the user interface. This document discusses how they work and how to use them. (Somewhat dated, but might still be useful).

Scripting and Application Automation

Creating a DCOP Interface: This tutorial shows you how to create a DCOP interface to a KDE application.

Connect KDE applications using DCOP: IBM DeveloperWorks tutorial, shows how to use kdcop and dcop with several examples such as instantly messaging a contact in kopete when he comes online, and also how to create a simple DCOP-aware application.

Misc.

KWin decoration styles: Tutorial on creating decoration plugins for the KWin window manager (KDE 3.2 and later).

Creating Konqueror Service Menus: This tutorial shows you how to create mimetype-specific actions in Konqueror's context menu (aka "servicemenus").