KDE Kiosk Mode HOWTO
Prev  

3. Implementation

3.1. Source Code Patches

Some files in kdebase-2.1.1 have to be patched:

  • appletop_mnu.cpp.patch: Applets on the panel can be moved and removed, but the Preferences dialog is disabled.

  • k_mnu.cpp.patch: Run Command... and Configure Panel entries are removed from the standard K Menu

  • khc_man.cc.patch: Online Help is completely disabled. This would open konqueror.

  • konq_popupmenu.cc.patch: right-mouse menu on icons on the desktop are reduced to Cut , Copy , Paste , Delete , ... but no Open With ... , no Edit File Type... and no Poperties... dialogs.

  • pagerapplet.cpp.patch: on minipager selection of type ( Preview , Number , Name ) is disabled. this caused trouble in multihead environment.

  • panel.cpp.patch: right mouse menu on Panel is disabled.

3.2. Global modifications

Instead of a dcop call, a program screensaver is executed, which must be found in the PATH . Just create a script called screensaver with the following contents:

#!/bin/bash

dcop kdesktop KScreensaverIface lock
    
make it executable and put it in $KDEDIR/bin .

Instead of the normal procedure, a program klogout is called, which must be found in the PATH . Create a script called klogout with the following contents:

#!/bin/bash

dcop kdesktop KDesktopIface logout
make it executable and put it in $KDEDIR/bin , where $KDEDIR is the install directory of KDE and $KDEDIR/bin is found in your PATH .

  • krootwm.cc.patch: klogout is executed instead of a dcop call

  • systemtrayapplet.cpp.patch: again call of klogout and screensaver instead of dcop calls.

  • workspace.cpp.patch: call of klogout instead of dcop call.

Everything else can be done with normal configuration, that is: (Configuration files can be found in $KDEDIR/share/config ) Remove Trash, Templates and Autostart Icons from the desktop and disable Alt + F2 by modifying kdeglobals . Make sure the following entries exist:

[Paths]

Trash=$HOME/.kde2/Trash/

Autostart=$HOME/.kde2/Autostart/

Templates=$HOME/.kde2/Templates/

Desktop=$HOME/.kde2/Desktop/


[Global Keys]

Execute command=
(it may be .kde instead of .kde2 )

disable Desktop menu and tips on start. Make sure the following entry exists in kdesktoprc :

[Mouse Buttons]

Right=

[General] 

TipsOnStart=false
You could also login as the special user, and configure it only for him, then the config files are found in $KDEHOME/share/config where $KDEHOME is normally $HOME/.kde .

3.3. How to set the variable KDE_MODE

To answer this, you must understand what happens after you successfully authorized yourself to the system: Depending on your distribution, some scripts are executed, from which one should be modified to set KDE_MODE . There is a script called Xsession under /etc/X11/xdm or /usr/X11R6/lib/xdm , which you could modify, or startkde , that is located under $KDEDIR/bin . Note however, that the variable must be set prior to calling the kde processes.

Since we had the need to make a setup for a big environment (now reaching 300 users) we wrote an application that enables us to administer. It also creates the KDE Menus. It writes a file called .env.sh in a user's home directory, that will be sourced in Xsession . That is what you could do. So you could put in .env.sh of that specific user's home directory:

#!/bin/sh

KDE_MODE="restricted"

export KDE_MODE

and add to Xsession, somewhere prior to calling startkde:

if [ -f $HOME/.env.sh ]; then

    . $HOME/.env.sh

fi

We also have two kdedirs that looks like to separate installations of KDE, this was neccessary so "normal" users could still have a full-featured KDE. So we have an original kdedir, and a restricted kdedir, in which we removed entries under share/applnk and set the variable KDEDIR (under KDE 2 the variable KDEDIRS was introduced but KDEDIR is still used). The files under share/applnk make up the menu. Caution, you cannot just remove all files there, because some are needed to initialize KDE.

You also set the Variable KDEDIR in Xsession , after sourcing .env.sh like this:

case "$KDE_MODE" in

    restricted)

        KDEDIR=/usr/local/kde/restricted_kdedir

        ;;

    *)

        KDEDIR=/usr/local/kde

esac

export KDEDIR

Replace /usr/local/kde with the install directory of your KDE. The contents of /usr/local/kde/restricted_kdedir looks like:


bin -> ../bin

cgi-bin -> ../cgi-bin

etc -> ../etc

lib -> ../lib

share

only share is a real directory, every other directory is a symbolic link pointing to original kdedir. /usr/local/kde/restricted_kdedir/share has the following contents:


aclocal -> ../../share/aclocal

applnk

apps -> ../../share/apps

autostart -> ../../share/autostart

config -> ../../share/config

doc -> ../../share/doc

fonts -> ../../share/fonts

icons -> ../../share/icons

locale -> ../../share/locale

mimelnk -> ../../share/mimelnk

services -> ../../share/services

servicetypes -> ../../share/servicetypes

sounds -> ../../share/sounds

templates -> ../../share/templates

wallpapers -> ../../share/wallpapers

only applnk is a real directory. As a minimal requirement remove everything except:


Settings/Peripherals/mouse.desktop

Settings/LookNFeel/background.desktop

                  /colors.desktop

                  /kwinoptions.desktop

                  /style.desktop

                  /virtualdesktops.desktop
under /usr/local/kde/restricted_kdedir/share/applnk


Prev Home  
Motivation