summaryrefslogtreecommitdiffstats
path: root/src/os-plugins/plugins/desktop
diff options
context:
space:
mode:
Diffstat (limited to 'src/os-plugins/plugins/desktop')
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Base.pm432
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Debian.pm63
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Fedora.pm30
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Gentoo.pm30
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Scilin.pm132
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Suse.pm162
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Suse_10_2.pm54
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu.pm169
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu_8.pm161
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu_9_04.pm161
-rw-r--r--src/os-plugins/plugins/desktop/OpenSLX/OSPlugin/desktop.pm712
-rw-r--r--src/os-plugins/plugins/desktop/XX_desktop.sh33
l---------src/os-plugins/plugins/desktop/themes/gdm/openslx-legacy1
-rwxr-xr-xsrc/os-plugins/plugins/desktop/themes/gdm/openslx/GdmGreeterTheme.desktop8
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/color.pngbin0 -> 177 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/environment.pngbin0 -> 4296 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/language-selector.pngbin0 -> 2253 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/language-selector_inactive.pngbin0 -> 2198 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/main-runner.pngbin0 -> 153 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/openslx-logo-main.pngbin0 -> 82050 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/openslx-logo.pngbin0 -> 9113 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/sessions.pngbin0 -> 4245 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/sessions_inactive.pngbin0 -> 4066 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/system.pngbin0 -> 4257 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/system_inactive.pngbin0 -> 4091 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/theme.xml224
-rw-r--r--src/os-plugins/plugins/desktop/themes/gdm/openslx/welcome-time-shadowed.pngbin0 -> 1580 bytes
-rwxr-xr-xsrc/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/GdmGreeterTheme.desktop8
-rwxr-xr-xsrc/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/KdmGreeterTheme.desktop8
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/color.pngbin0 -> 177 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/enter.pngbin0 -> 4260 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/enter_inactive.pngbin0 -> 4072 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/environment.pngbin0 -> 5076 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/main-runner.pngbin0 -> 143 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/openslx-logo-main.pngbin0 -> 82050 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/openslx-logo.pngbin0 -> 9113 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/sessions.pngbin0 -> 4245 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/sessions_inactive.pngbin0 -> 4066 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/system.pngbin0 -> 4257 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/system_inactive.pngbin0 -> 4091 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/theme.xml204
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/welcome-time-shadowed.pngbin0 -> 1580 bytes
-rwxr-xr-xsrc/os-plugins/plugins/desktop/themes/kdm/openslx/KdmGreeterTheme.desktop8
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/color.pngbin0 -> 177 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/enter.pngbin0 -> 4260 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/enter_inactive.pngbin0 -> 4072 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/environment.pngbin0 -> 5076 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/main-runner.pngbin0 -> 153 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/openslx-logo-main.pngbin0 -> 82050 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/openslx-logo.pngbin0 -> 9113 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/sessions.pngbin0 -> 4245 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/sessions_inactive.pngbin0 -> 4066 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/system.pngbin0 -> 4257 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/system_inactive.pngbin0 -> 4091 bytes
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/theme.xml232
-rw-r--r--src/os-plugins/plugins/desktop/themes/kdm/openslx/welcome-time-shadowed.pngbin0 -> 1580 bytes
56 files changed, 2832 insertions, 0 deletions
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Base.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Base.pm
new file mode 100644
index 00000000..316448bb
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Base.pm
@@ -0,0 +1,432 @@
+# Copyright (c) 2008 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Base.pm
+# - provides base implementation of the Distro API for the desktop plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Base;
+
+use strict;
+use warnings;
+
+our $VERSION = 1.01; # API-version . implementation-version
+
+use File::Basename;
+use Scalar::Util qw( weaken );
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+sub new
+{
+ my $class = shift;
+ my $self = {};
+ return bless $self, $class;
+}
+
+sub initialize
+{
+ my $self = shift;
+ $self->{engine} = shift;
+ weaken($self->{'engine'});
+ # avoid circular reference between distro and its engine
+
+ return 1;
+}
+
+sub getDefaultDesktopManager
+{
+ my $self = shift;
+
+ # the default implementation prefers KDM over GDM over XDM
+ return $self->isKDMInstalled() ? 'kdm'
+ : $self->isGDMInstalled() ? 'gdm'
+ : $self->isXDMInstalled() ? 'xdm' : undef;
+}
+
+sub getDefaultDesktopKind
+{
+ my $self = shift;
+
+ # the default implementation prefers GNOME over KDE over XFCE
+ return $self->isGNOMEInstalled() ? 'gnome'
+ : $self->isKDEInstalled() ? 'kde'
+ : $self->isXFCEInstalled() ? 'xfce' : undef;
+}
+
+sub isGNOMEInstalled
+{
+ my $self = shift;
+
+ return isInPath('gnome-session');
+}
+
+sub installGNOME
+{
+ my $self = shift;
+
+ $self->{engine}->installPackages(
+ $self->{engine}->getInstallablePackagesForSelection('gnome')
+ );
+
+ return 1;
+}
+
+sub isGDMInstalled
+{
+ my $self = shift;
+
+ return isInPath('gdm');
+}
+
+sub installGDM
+{
+ my $self = shift;
+
+ $self->{engine}->installPackages('gdm');
+
+ return 1;
+}
+
+sub GDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = {
+ config => '/etc/gdm/gdm.conf',
+ paths => [
+ '/var/lib/gdm',
+ '/var/log/gdm',
+ ],
+ };
+
+ return $pathInfo;
+}
+
+sub setupGDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $pathInfo = $self->GDMPathInfo();
+ my $configFile = $pathInfo->{config};
+
+ my $paths
+ = join(
+ ' ',
+ map { '/mnt' . $_ } ( dirname($configFile), @{$pathInfo->{paths}} )
+ );
+ my $script = unshiftHereDoc(<<" End-of-Here");
+ # written by OpenSLX-plugin 'desktop'
+
+ for i in $paths; do
+ testmkd \$i
+ done
+
+ cp /mnt$repoPath/gdm/\$desktop_mode/gdm.conf /mnt$configFile
+
+ # activate theme only if the corresponding xml file is found
+ # (otherwise fall back to default theme of vendor-OS)
+ if [ -n "\$desktop_theme" ]; then
+ thdir=/opt/openslx/plugin-repo/desktop/themes/gdm
+ theme=\$desktop_theme
+ if [ -e /mnt\$thdir/\$theme/*.xml ]; then
+ sed -i "s,\\[greeter\\],[greeter]\\nGraphicalThemedColor=," \\
+ /mnt$configFile
+ sed -i "s,\\[greeter\\],[greeter]\\nGraphicalThemeDir=\$thdir," \\
+ /mnt$configFile
+ sed -i "s,\\[greeter\\],[greeter]\\nGraphicalTheme=\$theme," \\
+ /mnt$configFile
+ fi
+ fi
+ case "\${desktop_allowshutdown}" in
+ none)
+ ;;
+ root)
+ sed "s|AllowShutdown.*|AllowShutdown=true|;\\
+ s|SecureShutdown.*|SecureShutdown=true|" \\
+ -i /mnt$configFile
+ ;;
+ users)
+ sed "s|AllowShutdown.*|AllowShutdown=true|;\\
+ s|SecureShutdown.*|SecureShutdown=false|" \\
+ -i /mnt$configFile
+ ;;
+ esac
+ [ "\${desktop_rootlogin}" -ne 0 ] && \\
+ sed "s|AllowRoot.*|AllowRoot=true|" -i /mnt$configFile
+ End-of-Here
+
+ return $script;
+}
+
+sub GDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ return {
+ 'chooser' => {
+ },
+ 'daemon' => {
+ AutomaticLoginEnable => 'false',
+ Group => 'gdm',
+ User => 'gdm',
+ DefaultSession => 'default.desktop',
+ },
+ 'debug' => {
+ Enable => 'false',
+ },
+ 'greeter' => {
+ AllowShutdown => 'false',
+ Browser => 'false',
+ MinimalUID => '500',
+ SecureShutdown => 'false',
+ ShowDomain => 'false',
+ DefaultWelcome => 'false',
+ Welcome => 'OpenSLX Workstation (%n)',
+ },
+ 'gui' => {
+ },
+ 'security' => {
+ AllowRoot => 'false',
+ AllowRemoteRoot => 'false',
+ DisallowTCP => 'true',
+ SupportAutomount => 'true',
+ },
+ 'server' => {
+ },
+ 'xdmcp' => {
+ Enable => 'false',
+ },
+ };
+}
+
+sub GDMConfigHashForKiosk
+{
+ my $self = shift;
+
+ my $configHash = $self->GDMConfigHashForWorkstation();
+ $configHash->{daemon}->{AutomaticLoginEnable} = 'true';
+ $configHash->{daemon}->{AutomaticLogin} = 'nobody';
+
+ return $configHash;
+}
+
+sub GDMConfigHashForChooser
+{
+ my $self = shift;
+
+ my $configHash = $self->GDMConfigHashForWorkstation();
+ $configHash->{xdmcp}->{Enable} = 'true';
+
+ return $configHash;
+}
+
+sub isKDEInstalled
+{
+ my $self = shift;
+
+ return isInPath('startkde');
+}
+
+sub installKDE
+{
+ my $self = shift;
+
+ $self->{engine}->installPackages(
+ $self->{engine}->getInstallablePackagesForSelection('kde')
+ );
+
+ return 1;
+}
+
+sub isKDMInstalled
+{
+ my $self = shift;
+
+ return isInPath('kdm');
+}
+
+sub installKDM
+{
+ my $self = shift;
+
+ $self->{engine}->installPackages('kdm');
+
+ return 1;
+}
+
+sub KDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = {
+ config => '/etc/opt/kdm/kdmrc',
+ paths => [
+ '/var/lib/kdm',
+ ],
+ };
+
+ return $pathInfo;
+}
+
+sub setupKDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $pathInfo = $self->KDMPathInfo();
+ my $configFile = $pathInfo->{config};
+
+ my $paths
+ = join(
+ ' ',
+ map { '/mnt' . $_ } ( dirname($configFile), @{$pathInfo->{paths}} )
+ );
+ my $script = unshiftHereDoc(<<" End-of-Here");
+ #!/bin/sh
+ # written by OpenSLX-plugin 'desktop'
+
+ for i in $paths; do
+ testmkd \$i
+ done
+
+ cp /mnt$repoPath/kdm/\$desktop_mode/kdmrc /mnt$configFile
+
+ # activate theme only if the corresponding xml file is found
+ # (otherwise fall back to default theme of vendor-OS)
+ if [ -n "\$desktop_theme" ]; then
+ theme=\$desktop_theme
+ thdir=/opt/openslx/plugin-repo/desktop/themes/kdm/\$theme
+ if [ -e /mnt\$thdir/*.xml ]; then
+ sed -i "s,\\[X-\\*-Greeter\\],[X-*-Greeter]\\nUseBackground=false," \\
+ /mnt$configFile
+ sed -i "s,\\[X-\\*-Greeter\\],[X-*-Greeter]\\nTheme=\$thdir," \\
+ /mnt$configFile
+ sed -i "s,\\[X-\\*-Greeter\\],[X-*-Greeter]\\nUseTheme=true," \\
+ /mnt$configFile
+ fi
+ fi
+ case "\${desktop_allowshutdown}" in
+ none)
+ sed "s|AllowShutdown.*|AllowShutdown=None|" \\
+ -i /mnt$configFile
+ ;;
+ root)
+ sed "s|AllowShutdown.*|AllowShutdown=Root|" \\
+ -i /mnt$configFile
+ ;;
+ users)
+ sed "s|AllowShutdown.*|AllowShutdown=All|" \\
+ -i /mnt$configFile
+ ;;
+ esac
+ [ "\${desktop_rootlogin}" -ne 0 ] && \\
+ sed "s|AllowRootLogin.*|AllowRootLogin=true|" -i /mnt$configFile
+ End-of-Here
+
+ return $script;
+}
+
+sub KDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ return {
+# 'General' => {
+# StaticServers => ':0',
+# ReserveServers => ':1,:2,:3',
+# ServerVTs => '-7',
+# ConsoleTTYs => 'tty1,tty2,tty3,tty4,tty5,tty6',
+# },
+ 'X-:0-Core' => {
+ AutoLoginEnable => 'false',
+ AllowRootLogin => 'false',
+ AllowShutdown => 'All',
+ },
+ 'X-*-Greeter' => {
+ GreetString => 'OpenSLX Workstation (%h)',
+ SelectedUsers => '',
+ UserList => 'false',
+ },
+ 'X-:*-Greeter' => {
+ AllowClose => 'false',
+ UseAdminSession => 'true',
+ },
+ 'X-:0-Greeter' => {
+ LogSource => '/dev/xconsole',
+ UseAdminSession => 'false',
+ PreselectUser => 'None',
+ },
+ 'xdmcp' => {
+ Enable => 'false',
+ },
+ };
+}
+
+sub KDMConfigHashForKiosk
+{
+ my $self = shift;
+
+ my $configHash = $self->KDMConfigHashForWorkstation();
+ $configHash->{'X-:0-Core'}->{AutoLoginEnable} = 'true';
+ $configHash->{'X-:0-Core'}->{AutoLoginUser} = 'nobody';
+
+ return $configHash;
+}
+
+sub KDMConfigHashForChooser
+{
+ my $self = shift;
+
+ my $configHash = $self->KDMConfigHashForWorkstation();
+ $configHash->{xdmcp}->{Enable} = 'true';
+
+ return $configHash;
+}
+
+sub isXFCEInstalled
+{
+ my $self = shift;
+
+ return isInPath('startxfce4');
+}
+
+sub installXFCE
+{
+ my $self = shift;
+
+ $self->{engine}->installPackages(
+ $self->{engine}->getInstallablePackagesForSelection('xfce')
+ );
+
+ return 1;
+}
+
+sub isXDMInstalled
+{
+ my $self = shift;
+
+ return isInPath('xdm');
+}
+
+sub installXDM
+{
+ my $self = shift;
+
+ $self->{engine}->installPackages('xdm');
+
+ return 1;
+}
+
+1;
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Debian.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Debian.pm
new file mode 100644
index 00000000..c212b3ef
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Debian.pm
@@ -0,0 +1,63 @@
+# Copyright (c) 2006..2009 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Debian.pm
+# - provides Debian-specific overrides of the Distro API for the desktop
+# plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Debian;
+
+use strict;
+use warnings;
+
+use base qw(desktop::OpenSLX::Distro::Base);
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+
+sub setupGDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $script = $self->SUPER::setupGDMScript($repoPath);
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ rllinker gdm 1 1
+ echo '/usr/bin/gdm' > /mnt/etc/X11/default-display-manager
+ # gdm does not like AUFS/UnionFS on its var directory
+ rm -rf /mnt/var/lib/gdm
+ mkdir -m 1770 /mnt/var/lib/gdm
+ chown root:gdm /mnt/var/lib/gdm
+ End-of-Here
+
+ return $script;
+}
+
+sub setupKDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $script = $self->SUPER::setupKDMScript($repoPath);
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ rllinker kdm 1 1
+ echo '/usr/bin/kdm' > /mnt/etc/X11/default-display-manager
+ End-of-Here
+
+ return $script;
+}
+
+1;
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Fedora.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Fedora.pm
new file mode 100644
index 00000000..f9428aab
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Fedora.pm
@@ -0,0 +1,30 @@
+# Copyright (c) 2006, 2007 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Fedora.pm
+# - provides Fedora-specific overrides of the Distro API for the desktop
+# plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Fedora;
+
+use strict;
+use warnings;
+
+use base qw(desktop::OpenSLX::Distro::Base);
+
+use OpenSLX::Basics;
+
+################################################################################
+### interface methods
+################################################################################
+
+# TODO: implement!
+
+1; \ No newline at end of file
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Gentoo.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Gentoo.pm
new file mode 100644
index 00000000..129f4d08
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Gentoo.pm
@@ -0,0 +1,30 @@
+# Copyright (c) 2006, 2007 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Gentoo.pm
+# - provides Gentoo-specific overrides of the Distro API for the desktop
+# plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Gentoo;
+
+use strict;
+use warnings;
+
+use base qw(desktop::OpenSLX::Distro::Base);
+
+use OpenSLX::Basics;
+
+################################################################################
+### interface methods
+################################################################################
+
+# TODO: implement!
+
+1;
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Scilin.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Scilin.pm
new file mode 100644
index 00000000..1dc0482c
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Scilin.pm
@@ -0,0 +1,132 @@
+# Copyright (c) 2006..2009 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Scilin.pm
+# - provides Scilin-specific overrides of the Distro API for the desktop
+# plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Scilin;
+
+use strict;
+use warnings;
+
+use base qw(desktop::OpenSLX::Distro::Base);
+
+use File::Path;
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+
+sub GDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = $self->SUPER::GDMPathInfo();
+
+ # create gdm.conf-custom instead of gdm.conf
+ $pathInfo->{config} = '/etc/gdm/custom.conf';
+
+ return $pathInfo;
+}
+
+sub setupGDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $script = $self->SUPER::setupGDMScript($repoPath);
+
+ my $configFile = $self->GDMPathInfo->{config};
+
+ # include common stuff (independent of display manager used)
+ $script = _setupCommonDmScript($script);
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ echo "DISPLAYMANAGER=GNOME" \
+ >/mnt/etc/sysconfig/desktop
+ # gdm does not like AUFS/UnionFS on its var directory
+ mkdir -m 1770 /mnt/var/lib/gdm
+ chown root:gdm /mnt/var/lib/gdm
+ End-of-Here
+
+ return $script;
+}
+
+sub GDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ my $configHash = $self->SUPER::GDMConfigHashForWorkstation();
+ $configHash->{'daemon'}->{SessionDesktopDir} =
+ '/etc/X11/session/:/usr/share/xsessions/:/usr/share/gdm/BuiltInSessions';
+ $configHash->{'daemon'}->{Greeter} =
+ '/usr/libexec/gdmgreeter';
+
+ return $configHash;
+}
+
+sub setupKDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ # SUSE reads /var/adm/kdm/kdmrc.sysconfig, so we link that to
+ # our config file
+ my $pathInfo = $self->KDMPathInfo();
+ my $configFile = $pathInfo->{config};
+ mkpath("/etc/opt/kdm");
+ mkpath("/var/adm/kdm");
+ # maybe backup kdmrc.sysconfig sometimes
+ unlink("/var/adm/kdm/kdmrc.sysconfig");
+ # the config file gets overwritten if this script is present
+ unlink("/opt/kde3/share/apps/kdm/read_sysconfig.sh");
+ symlink("/etc/opt/kdm/kdmrc", "/var/adm/kdm/kdmrc.sysconfig");
+
+ my $script = $self->SUPER::setupKDMScript($repoPath);
+
+ # include common stuff (independent of display manager used)
+ $script = _setupCommonDmScript($script);
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ echo "DISPLAYMANAGER=KDE" \
+ >/mnt/etc/sysconfig/desktop
+ End-of-Here
+
+ return $script;
+}
+
+sub _setupCommonDmScript
+{
+ my $script = shift;
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ # cleanup after users Xorg session
+ sed 's,^#!.*,,' /mnt/etc/X11/xdm/Xreset \
+ > /mnt/etc/X11/xdm/Xreset.system
+ echo -e '#!/bin/sh\n#\n# modified by desktop plugin in Stage3\n#\n
+ # remove safely any remaining files of the leaving user in /tmp
+ ( su -c "rm -rf /tmp/*" - $USER
+ echo "$USER files removed by $0" >/tmp/files.removed 2>/dev/null ) &
+ . /etc/X11/xdm/Xreset.system' >/mnt/etc/X11/xdm/Xreset
+ chmod a+x /mnt/etc/X11/xdm/Xreset*
+
+ # enable the inittab entry again (incomplete)
+ # sed -e "s,# line deleted.*,x:5:respawn:/etc/X11/prefdm -nodaemon," \
+ # -i /mnt/etc/inittab
+ End-of-Here
+
+ return $script;
+}
+
+1;
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Suse.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Suse.pm
new file mode 100644
index 00000000..433ed7e1
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Suse.pm
@@ -0,0 +1,162 @@
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Suse.pm
+# - provides SUSE-specific overrides of the Distro API for the desktop
+# plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Suse;
+
+use strict;
+use warnings;
+
+use base qw(desktop::OpenSLX::Distro::Base);
+
+use File::Path;
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+
+sub GDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = $self->SUPER::GDMPathInfo();
+
+ # create gdm.conf-custom instead of gdm.conf
+ $pathInfo->{config} = '/etc/gdm/custom.conf';
+
+ return $pathInfo;
+}
+
+sub setupGDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $script = $self->SUPER::setupGDMScript($repoPath);
+
+ my $configFile = $self->GDMPathInfo->{config};
+
+ # include common stuff (independent of display manager used)
+ $script = _setupCommonDmScript($script);
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ echo -e '# changed by $0 during stage3 setup\nDISPLAYMANAGER="gdm"' \
+ >/mnt/etc/sysconfig/displaymanager
+ sed -i "s/DEFAULT_WM=.*/DEFAULT_WM=\"$desktop_kind\"/" \
+ /mnt/etc/sysconfig/windowmanager
+ #sed "s|XSESSION|/etc/xdm/Xsession|" -i /mnt$configFile
+ # gdm does not like AUFS/UnionFS on its var directory
+ rm -rf /mnt/var/lib/gdm
+ mkdir -m 1770 /mnt/var/lib/gdm
+ chown root:gdm /mnt/var/lib/gdm
+ # no use for this configuration info file
+ rm /mnt/etc/gdm/gdm_sysconfig.* 2>/dev/null
+ End-of-Here
+
+ return $script;
+}
+
+sub GDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ my $configHash = $self->SUPER::GDMConfigHashForWorkstation();
+ $configHash->{'daemon'}->{SessionDesktopDir} =
+ '/etc/X11/session/:/usr/share/xsessions/';
+ $configHash->{'daemon'}->{DefaultSession} = 'default.desktop';
+ $configHash->{'daemon'}->{Greeter} =
+ '/usr/lib/gdm/gdmgreeter';
+
+ return $configHash;
+}
+
+sub setupKDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ # check for kdm version
+ my $kdmVer;
+ my $kdmPath;
+ if (-e "/usr/bin/kdm") {
+ $kdmVer = "4";
+ $kdmPath = "/usr/share/kde4";
+ }
+ else {
+ $kdmVer = "";
+ $kdmPath = "/opt/kde3/share";
+ # change default theme to openslx-legacy if kdm3
+ print " * Please change to openslx-legacy theme when using kdm3\n";
+ }
+
+ # SUSE reads /var/adm/kdm/kdmrc.sysconfig, so we link that to
+ # our config file
+ my $pathInfo = $self->KDMPathInfo();
+ my $configFile = $pathInfo->{config};
+ mkpath("/etc/opt/kdm");
+ mkpath("/var/adm/kdm");
+ # maybe backup kdmrc.sysconfig sometimes
+ unlink("/var/adm/kdm/kdmrc.sysconfig");
+ # the config file gets overwritten if this script is present
+ unlink("$kdmPath/apps/kdm/read_sysconfig.sh");
+ symlink("/etc/opt/kdm/kdmrc", "/var/adm/kdm/kdmrc.sysconfig");
+
+ my $script = $self->SUPER::setupKDMScript($repoPath);
+
+ # include common stuff (independent of display manager used)
+ $script = _setupCommonDmScript($script);
+
+ $script .= "kdmver=$kdmVer\n";
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ sed -i "s/DISPLAYMANAGER=.*/DISPLAYMANAGER=\"kdm$kdmver\"/" \
+ /mnt/etc/sysconfig/displaymanager
+ [ $(grep -q DISPLAYMANAGER /mnt/etc/sysconfig/displaymanager) ] && \
+ echo "DISPLAYMANAGER=\"kdm$kdmver\"" >>/mnt/etc/sysconfig/displaymanager
+ sed -i "s/DEFAULT_WM=.*/DEFAULT_WM=\"$desktop_kind\"/" \
+ /mnt/etc/sysconfig/windowmanager
+ # needed for compatibility X11/session(s)
+ ln -s /etc/X11/session /mnt/etc/X11/sessions
+ End-of-Here
+
+ return $script;
+}
+
+sub _setupCommonDmScript
+{
+ my $script = shift;
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ rllinker xdm 1 10
+ # cleanup after users Xorg session
+ sed 's,^#!.*,,' /mnt/etc/X11/xdm/Xreset \
+ > /mnt/etc/X11/xdm/Xreset.system
+ echo -e '#!/bin/sh\n#\n# modified by desktop plugin in Stage3\n#\n
+ # avoid annoying messages on removed sound devices
+ ( su -c "rm ~/.kde4/share/config/phonondevicesrc" - $USER ) &
+
+ # remove safely any remaining files of the leaving user in /tmp
+ ( su -c "rm -rf /tmp/*" - $USER
+ echo "$USER files removed by $0" >/tmp/files.removed 2>/dev/null
+ chmod 0400 /tmp/files.removed ) &
+ . /etc/X11/xdm/Xreset.system' >/mnt/etc/X11/xdm/Xreset
+ chmod a+x /mnt/etc/X11/xdm/Xreset*
+
+ End-of-Here
+
+ return $script;
+}
+
+1;
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Suse_10_2.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Suse_10_2.pm
new file mode 100644
index 00000000..ac14b2a5
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Suse_10_2.pm
@@ -0,0 +1,54 @@
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Suse_10_2.pm
+# - provides SUSE-10.2-specific overrides of the Distro API for the desktop
+# plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Suse_10_2;
+
+use strict;
+use warnings;
+
+use base qw(desktop::OpenSLX::Distro::Suse);
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+
+sub GDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = $self->SUPER::GDMPathInfo();
+
+ # link gdm.conf-custom instead of gdm.conf
+ $pathInfo->{config} = '/etc/opt/gnome/gdm/custom.conf';
+
+ return $pathInfo;
+}
+
+sub GDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ my $configHash = $self->SUPER::GDMConfigHashForWorkstation();
+ $configHash->{'daemon'}->{SessionDesktopDir} =
+ '/etc/X11/session/:/usr/share/xsessions/';
+ $configHash->{'daemon'}->{Greeter} =
+ '/opt/gnome/lib/gdm/gdmgreeter';
+
+ return $configHash;
+}
+
+1;
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu.pm
new file mode 100644
index 00000000..d222c102
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu.pm
@@ -0,0 +1,169 @@
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Ubuntu.pm
+# - provides Ubuntu-specific overrides of the distro API for the desktop
+# plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Ubuntu;
+
+use strict;
+use warnings;
+
+use base qw(desktop::OpenSLX::Distro::Base);
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+
+sub GDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = $self->SUPER::GDMPathInfo();
+
+ # link gdm.conf-custom instead of gdm.conf
+ $pathInfo->{config} = '/etc/gdm/custom.conf';
+
+ return $pathInfo;
+}
+
+sub setupGDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $script = $self->SUPER::setupGDMScript($repoPath);
+
+ my $configFile = $self->GDMPathInfo->{config};
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ # cleanup after users Xorg session
+ sed 's,^#!.*,,' /mnt/etc/gdm/PostSession/Default \
+ >/mnt/etc/gdm/PostSession/Default.system
+ echo -e '#! /bin/sh\n#\n# modified by desktop plugin in Stage3\n#\n
+ # remove safely any remaining files of the leaving user in /tmp
+ ( su -c "rm -rf /tmp/*"
+ echo "$USER files removed by $0" >/tmp/files.removed 2>/dev/null ) &
+ . /etc/gdm/PostSession/Default.system' >/mnt/etc/gdm/PostSession/Default
+ chmod a+x /mnt/etc/gdm/PostSession/Default*
+ # gdm should be started via upstart mechanism
+ mv /mnt/etc/init.inactive/gdm.conf /mnt/etc/init
+ echo '/usr/sbin/gdm' >/mnt/etc/X11/default-display-manager
+ # possible to do this directly?
+ chroot /mnt update-alternatives --set x-window-manager /usr/bin/metacity
+ chroot /mnt update-alternatives --set x-session-manager \
+ /usr/bin/gnome-session
+ # gdm does not like AUFS/UnionFS on its var directory
+ rm -rf /mnt/var/lib/gdm
+ mkdir -m 1770 /mnt/var/lib/gdm
+ chown root:gdm /mnt/var/lib/gdm
+ #sed '/^\\[daemon\\]/ a\\BaseXsession=/etc/gdm/Xsession' \
+ # -i /mnt$configFile
+ End-of-Here
+
+ return $script;
+}
+
+sub KDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = $self->SUPER::KDMPathInfo();
+
+ $pathInfo = {
+ config => "/etc/kde4/kdm/kdmrc",
+ paths => [
+ '/var/lib/kdm',
+ '/var/run/kdm',
+ ],
+ };
+
+ return $pathInfo;
+}
+
+sub GDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ return {
+ 'chooser' => {
+ Multicast => 'false',
+ },
+ 'daemon' => {
+ AutomaticLoginEnable => 'false',
+ Group => 'gdm',
+ User => 'gdm',
+ DefaultSession => 'default.desktop',
+ },
+ 'security' => {
+ DisallowTCP => 'true',
+ },
+ 'xdmcp' => {
+ Enable => 'false',
+ },
+ };
+}
+
+sub KDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ my $kdmVer = "4";
+ my $configHash = $self->SUPER::KDMConfigHashForWorkstation();
+ $configHash->{'General'}->{PidFile} = "/var/run/kdm.pid";
+ $configHash->{'General'}->{ServerVTs} = "-7";
+ $configHash->{'X-:0-Core'}->{Setup} = "/etc/kde$kdmVer/kdm/Xsetup";
+ $configHash->{'X-:0-Core'}->{Startup} = "/etc/kde$kdmVer/kdm/Xstartup";
+ $configHash->{'X-:0-Core'}->{Session} = "/etc/kde$kdmVer/kdm/Xsession";
+ $configHash->{'X-:0-Core'}->{Reset} = "/etc/kde$kdmVer/kdm/Xreset";
+ $configHash->{'X-:0-Core'}->{SessionsDirs} =
+ '/etc/X11/session,/usr/share/xsessions,/usr/share/apps/kdm/sessions';
+ $configHash->{'X-:0-Core'}->{ServerAttempts} = "2";
+
+ return $configHash;
+}
+
+sub setupKDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $kdmVer = "4";
+ my $script = $self->SUPER::setupKDMScript($repoPath);
+
+ $script .= "kdmver=$kdmVer\n";
+ $script .= unshiftHereDoc(<<' End-of-Here');
+
+ # cleanup after users Xorg session
+ sed 's,^#!.*,,' /mnt/etc/kde$kdmver/kdm/Xreset \
+ >/mnt/etc/kde$kdmver/kdm/Xreset.system
+ echo -e '#! /bin/sh\n#\n# modified by desktop plugin in Stage3\n#\n
+ # remove safely any remaining files of the leaving user in /tmp
+ ( su -c "rm -rf /tmp/*" - $USER
+ echo "$USER files removed by $0" >/tmp/files.removed 2>/dev/null
+ chmod 0400 /tmp/files.removed ) &
+ . /etc/kde$kdmver/kdm/Xreset.system' >/mnt/etc/kde$kdmver/kdm/Xreset
+ chmod a+x /mnt/etc/kde$kdmver/kdm/Xreset*
+
+ mv /mnt/etc/init.inactive/kdm.conf /mnt/etc/init
+ echo '/usr/bin/kdm' > /mnt/etc/X11/default-display-manager
+ chroot /mnt update-alternatives --set x-window-manager /usr/bin/kwin
+ chroot /mnt update-alternatives --set x-session-manager \
+ /usr/bin/startkde
+ End-of-Here
+
+ return $script;
+}
+
+1;
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu_8.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu_8.pm
new file mode 100644
index 00000000..6f00f181
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu_8.pm
@@ -0,0 +1,161 @@
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Ubuntu_8.pm
+# - provides Ubuntu-specific overrides of the distro API for the desktop
+# plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Ubuntu_8;
+
+use strict;
+use warnings;
+
+use base qw(desktop::OpenSLX::Distro::Base);
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+
+sub GDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = $self->SUPER::GDMPathInfo();
+
+ # link gdm.conf-custom instead of gdm.conf
+ $pathInfo->{config} = '/etc/gdm/gdm.conf-custom';
+
+ return $pathInfo;
+}
+
+sub setupGDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $script = $self->SUPER::setupGDMScript($repoPath);
+
+ my $configFile = $self->GDMPathInfo->{config};
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ # cleanup after users Xorg session
+ sed 's,^#!.*,,' /mnt/etc/gdm/PostSession/Default \
+ >/mnt/etc/gdm/PostSession/Default.system
+ echo -e '#! /bin/sh\n#\n# modified by desktop plugin in Stage3\n#\n
+ # remove safely any remaining files of the leaving user in /tmp
+ ( su -c "rm -rf /tmp/*"
+ echo "$USER files removed by $0" >/tmp/files.removed 2>/dev/null ) &
+ . /etc/gdm/PostSession/Default.system' >/mnt/etc/gdm/PostSession/Default
+ chmod a+x /mnt/etc/gdm/PostSession/Default*
+ # gdm should be started after dbus/hal
+ rllinker gdm 5 10
+ echo '/usr/sbin/gdm' >/mnt/etc/X11/default-display-manager
+ chroot /mnt update-alternatives --set x-window-manager /usr/bin/metacity
+ chroot /mnt update-alternatives --set x-session-manager \
+ /usr/bin/gnome-session
+ # gdm does not like AUFS/UnionFS on its var directory
+ rm -rf /mnt/var/lib/gdm
+ mkdir -m 1770 /mnt/var/lib/gdm
+ chown root:gdm /mnt/var/lib/gdm
+ sed '/^\\[daemon\\]/ a\\BaseXsession=/etc/gdm/Xsession' \
+ -i /mnt$configFile
+ End-of-Here
+
+ return $script;
+}
+
+sub KDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = $self->SUPER::KDMPathInfo();
+ my $kdmVer = "3";
+
+ $pathInfo = {
+ config => "/etc/kde$kdmVer/kdm/kdmrc",
+ paths => [
+ '/var/lib/kdm',
+ '/var/run/kdm',
+ ],
+ };
+
+ return $pathInfo;
+}
+
+sub GDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ my $configHash = $self->SUPER::GDMConfigHashForWorkstation();
+ $configHash->{'daemon'}->{SessionDesktopDir} =
+ '/etc/X11/session/:/usr/share/xsessions/:/usr/share/gdm/BuiltInSessions/';
+
+ return $configHash;
+}
+
+sub KDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ my $kdmVer = "4";
+ my $configHash = $self->SUPER::KDMConfigHashForWorkstation();
+ $configHash->{'General'}->{PidFile} = "/var/run/kdm.pid";
+ $configHash->{'X-:0-Core'}->{Setup} = "/etc/kde$kdmVer/kdm/Xsetup";
+ $configHash->{'X-:0-Core'}->{Startup} = "/etc/kde$kdmVer/kdm/Xstartup";
+ $configHash->{'X-:0-Core'}->{Session} = "/etc/kde$kdmVer/kdm/Xsession";
+ $configHash->{'X-:0-Core'}->{Reset} = "/etc/kde$kdmVer/kdm/Xreset";
+ $configHash->{'X-:0-Core'}->{SessionsDirs} =
+ '/etc/X11/session,/usr/share/xsessions,/usr/share/apps/kdm/sessions';
+ $configHash->{'X-:0-Core'}->{ServerAttempts} = "2";
+
+ return $configHash;
+}
+
+sub setupKDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $kdmVer = "4";
+ my $script = $self->SUPER::setupKDMScript($repoPath);
+
+ # change default theme to openslx-legacy if kdm3
+ if ( $kdmVer == "3" ) {
+ print " * Please change to openslx-legacy theme when using kdm3\n";
+ }
+
+ $script .= "kdmver=$kdmVer\n";
+ $script .= unshiftHereDoc(<<' End-of-Here');
+
+ # cleanup after users Xorg session
+ sed 's,^#!.*,,' /mnt/etc/kde$kdmver/kdm/Xreset \
+ >/mnt/etc/kde$kdmver/kdm/Xreset.system
+ echo -e '#! /bin/sh\n#\n# modified by desktop plugin in Stage3\n#\n
+ # remove safely any remaining files of the leaving user in /tmp
+ ( su -c "rm -rf /tmp/*" - $USER
+ echo "$USER files removed by $0" >/tmp/files.removed 2>/dev/null
+ chmod 0400 /tmp/files.removed ) &
+ . /etc/kde$kdmver/kdm/Xreset.system' >/mnt/etc/kde$kdmver/kdm/Xreset
+ chmod a+x /mnt/etc/kde$kdmver/kdm/Xreset*
+
+ rllinker kdm 1 10
+ echo '/usr/bin/kdm' > /mnt/etc/X11/default-display-manager
+ chroot /mnt update-alternatives --set x-window-manager /usr/bin/kwin
+ chroot /mnt update-alternatives --set x-session-manager \
+ /usr/bin/startkde
+ End-of-Here
+
+ return $script;
+}
+
+1;
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu_9_04.pm b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu_9_04.pm
new file mode 100644
index 00000000..1022d6e8
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/Distro/Ubuntu_9_04.pm
@@ -0,0 +1,161 @@
+# Copyright (c) 2006..2010 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop/OpenSLX/Distro/Ubuntu_9_04.pm
+# - provides Ubuntu-specific overrides of the distro API for the desktop
+# plugin.
+# -----------------------------------------------------------------------------
+package desktop::OpenSLX::Distro::Ubuntu_9_04;
+
+use strict;
+use warnings;
+
+use base qw(desktop::OpenSLX::Distro::Base);
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### interface methods
+################################################################################
+
+sub GDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = $self->SUPER::GDMPathInfo();
+
+ # link gdm.conf-custom instead of gdm.conf
+ $pathInfo->{config} = '/etc/gdm/gdm.conf-custom';
+
+ return $pathInfo;
+}
+
+sub setupGDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $script = $self->SUPER::setupGDMScript($repoPath);
+
+ my $configFile = $self->GDMPathInfo->{config};
+
+ $script .= unshiftHereDoc(<<' End-of-Here');
+ # cleanup after users Xorg session
+ sed 's,^#!.*,,' /mnt/etc/gdm/PostSession/Default \
+ >/mnt/etc/gdm/PostSession/Default.system
+ echo -e '#! /bin/sh\n#\n# modified by desktop plugin in Stage3\n#\n
+ # remove safely any remaining files of the leaving user in /tmp
+ ( su -c "rm -rf /tmp/*"
+ echo "$USER files removed by $0" >/tmp/files.removed 2>/dev/null ) &
+ . /etc/gdm/PostSession/Default.system' >/mnt/etc/gdm/PostSession/Default
+ chmod a+x /mnt/etc/gdm/PostSession/Default*
+ # gdm should be started after dbus/hal
+ rllinker gdm 5 10
+ echo '/usr/sbin/gdm' >/mnt/etc/X11/default-display-manager
+ chroot /mnt update-alternatives --set x-window-manager /usr/bin/metacity
+ chroot /mnt update-alternatives --set x-session-manager \
+ /usr/bin/gnome-session
+ # gdm does not like AUFS/UnionFS on its var directory
+ rm -rf /mnt/var/lib/gdm
+ mkdir -m 1770 /mnt/var/lib/gdm
+ chown root:gdm /mnt/var/lib/gdm
+ sed '/^\\[daemon\\]/ a\\BaseXsession=/etc/gdm/Xsession' \
+ -i /mnt$configFile
+ End-of-Here
+
+ return $script;
+}
+
+sub KDMPathInfo
+{
+ my $self = shift;
+
+ my $pathInfo = $self->SUPER::KDMPathInfo();
+ my $kdmVer = "4";
+
+ $pathInfo = {
+ config => "/etc/kde$kdmVer/kdm/kdmrc",
+ paths => [
+ '/var/lib/kdm',
+ '/var/run/kdm',
+ ],
+ };
+
+ return $pathInfo;
+}
+
+sub GDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ my $configHash = $self->SUPER::GDMConfigHashForWorkstation();
+ $configHash->{'daemon'}->{SessionDesktopDir} =
+ '/etc/X11/session/:/usr/share/xsessions/:/usr/share/gdm/BuiltInSessions/';
+
+ return $configHash;
+}
+
+sub KDMConfigHashForWorkstation
+{
+ my $self = shift;
+
+ my $kdmVer = "4";
+ my $configHash = $self->SUPER::KDMConfigHashForWorkstation();
+ $configHash->{'General'}->{PidFile} = "/var/run/kdm.pid";
+ $configHash->{'X-:0-Core'}->{Setup} = "/etc/kde$kdmVer/kdm/Xsetup";
+ $configHash->{'X-:0-Core'}->{Startup} = "/etc/kde$kdmVer/kdm/Xstartup";
+ $configHash->{'X-:0-Core'}->{Session} = "/etc/kde$kdmVer/kdm/Xsession";
+ $configHash->{'X-:0-Core'}->{Reset} = "/etc/kde$kdmVer/kdm/Xreset";
+ $configHash->{'X-:0-Core'}->{SessionsDirs} =
+ '/etc/X11/session,/usr/share/xsessions,/usr/share/apps/kdm/sessions';
+ $configHash->{'X-:0-Core'}->{ServerAttempts} = "2";
+
+ return $configHash;
+}
+
+sub setupKDMScript
+{
+ my $self = shift;
+ my $repoPath = shift;
+
+ my $kdmVer = "4";
+ my $script = $self->SUPER::setupKDMScript($repoPath);
+
+ # change default theme to openslx-legacy if kdm3
+ if ( $kdmVer == "3" ) {
+ print " * Please change to openslx-legacy theme when using kdm3\n";
+ }
+
+ $script .= "kdmver=$kdmVer\n";
+ $script .= unshiftHereDoc(<<' End-of-Here');
+
+ # cleanup after users Xorg session
+ sed 's,^#!.*,,' /mnt/etc/kde$kdmver/kdm/Xreset \
+ >/mnt/etc/kde$kdmver/kdm/Xreset.system
+ echo -e '#! /bin/sh\n#\n# modified by desktop plugin in Stage3\n#\n
+ # remove safely any remaining files of the leaving user in /tmp
+ ( su -c "rm -rf /tmp/*" - $USER
+ echo "$USER files removed by $0" >/tmp/files.removed 2>/dev/null
+ chmod 0400 /tmp/files.removed ) &
+ . /etc/kde$kdmver/kdm/Xreset.system' >/mnt/etc/kde$kdmver/kdm/Xreset
+ chmod a+x /mnt/etc/kde$kdmver/kdm/Xreset*
+
+ rllinker kdm 1 10
+ echo '/usr/bin/kdm' > /mnt/etc/X11/default-display-manager
+ chroot /mnt update-alternatives --set x-window-manager /usr/bin/kwin
+ chroot /mnt update-alternatives --set x-session-manager \
+ /usr/bin/startkde
+ End-of-Here
+
+ return $script;
+}
+
+1;
diff --git a/src/os-plugins/plugins/desktop/OpenSLX/OSPlugin/desktop.pm b/src/os-plugins/plugins/desktop/OpenSLX/OSPlugin/desktop.pm
new file mode 100644
index 00000000..7d496483
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/OpenSLX/OSPlugin/desktop.pm
@@ -0,0 +1,712 @@
+# Copyright (c) 2008..2010 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# desktop.pm
+# - implementation of the 'desktop' plugin, which installs
+# all needed information for a displaymanager and for the desktop.
+# -----------------------------------------------------------------------------
+package OpenSLX::OSPlugin::desktop;
+
+use strict;
+use warnings;
+
+use base qw(OpenSLX::OSPlugin::Base);
+
+use File::Basename;
+use File::Path;
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+sub new
+{
+ my $class = shift;
+
+ my $self = {
+ name => 'desktop',
+ };
+
+ my $localGDMThemesDir
+ = "$openslxConfig{'config-path'}/plugins/desktop/themes/gdm";
+ mkpath($localGDMThemesDir) unless -e $localGDMThemesDir;
+ my $localKDMThemesDir
+ = "$openslxConfig{'config-path'}/plugins/desktop/themes/kdm";
+ mkpath($localKDMThemesDir) unless -e $localKDMThemesDir;
+
+ return bless $self, $class;
+}
+
+sub getInfo
+{
+ my $self = shift;
+
+ return {
+ description => unshiftHereDoc(<<' End-of-Here'),
+ Sets a desktop and creates needed configs, theme can be set as well.
+ End-of-Here
+ precedence => 40,
+ # not really required e.g. for modern autoconfiguring systems like Ubuntu
+ # 10.04
+ # required => [ qw( xserver ) ],
+ };
+}
+
+sub getAttrInfo
+{
+ my $self = shift;
+
+ return {
+ # stage3
+ 'desktop::active' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ should the 'desktop'-plugin be executed during boot?
+ End-of-Here
+ content_regex => qr{^(0|1)$},
+ content_descr => '1 means active - 0 means inactive',
+ default => '1',
+ },
+ 'desktop::kind' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ which desktop environment shall be used: gnome, kde, or xfce?
+ End-of-Here
+ content_regex => qr{^(gnome|kde|xfce)$},
+ content_descr => '"gnome", "kde" or "xfce"',
+ default => undef,
+ },
+ 'desktop::manager' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ which display manager to start: gdm, kdm or xdm?
+ End-of-Here
+ content_regex => qr{^(gdm|kdm|xdm)$},
+ content_descr => '"gdm", "kdm" or "xdm"',
+ default => undef,
+ },
+ 'desktop::mode' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ which type of operation mode shall be activated:
+ workstattion, kiosk or chooser?
+ End-of-Here
+ content_regex => qr{^(workstation|kiosk|chooser)$},
+ content_descr => '"workstation", "kiosk" or "chooser"',
+ default => 'workstation',
+ },
+ 'desktop::theme' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ name of the theme to apply to the desktop (unset for no theme)
+ End-of-Here
+ content_descr => 'one of the entries in "supported_themes"',
+ default => 'openslx',
+ },
+ 'desktop::allowshutdown' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ allow shutdown of the SLX client via gdm/kdm. "none" disables
+ this functionality, "root" allows only the sysadmin and
+ "users" means free4all.
+ End-of-Here
+ content_regex => qr{^(none|root|users)$},
+ content_descr => 'possible entries "none", "root" or "users"',
+ default => 'users',
+ },
+ 'desktop::rootlogin' => {
+ applies_to_systems => 1,
+ applies_to_clients => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ allow the system administrator to logon to the graphical
+ user interface (1 allow, 0 disallow).
+ End-of-Here
+ content_descr => '1 means allowed - 0 means forbidden',
+ content_regex => qr{^(0|1)$},
+ default => '1',
+ },
+ # kiosk mode just has the option to logon user nobody
+ #'desktop::auto-login' => {
+ # applies_to_systems => 1,
+ # applies_to_clients => 1,
+ # description => unshiftHereDoc(<<' End-of-Here'),
+ # set an arbitrary user which is logged in automatically into
+ # the graphical user interface (none disables, default).
+ # End-of-Here
+ # content_descr => 'none disables - <user> logins in that userid',
+ # default => 'none',
+ #},
+
+ # stage1
+ 'desktop::gdm' => {
+ applies_to_vendor_os => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ should gdm be available (installed in vendor-OS)?
+ End-of-Here
+ content_regex => qr{^0|1$},
+ content_descr => '"0", "1" or "-" (for unset)',
+ default => undef,
+ },
+ 'desktop::gnome' => {
+ applies_to_vendor_os => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ should gnome be available (installed in vendor-OS)?
+ End-of-Here
+ content_regex => qr{^0|1$},
+ content_descr => '"0", "1" or "-" (for unset)',
+ default => undef,
+ },
+ 'desktop::kde' => {
+ applies_to_vendor_os => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ should kde be available (installed in vendor-OS)?
+ End-of-Here
+ content_regex => qr{^0|1$},
+ content_descr => '"0", "1" or "-" (for unset)',
+ default => undef,
+ },
+ 'desktop::kdm' => {
+ applies_to_vendor_os => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ should kdm be available (installed in vendor-OS)?
+ End-of-Here
+ content_regex => qr{^0|1$},
+ content_descr => '"0", "1" or "-" (for unset)',
+ default => undef,
+ },
+ 'desktop::supported_themes' => {
+ applies_to_vendor_os => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ name of all themes that shall be installed in vendor-OS (such
+ that they can be selected via 'desktop::theme' in stage 3).
+ End-of-Here
+ content_descr => 'a comma-separated list of theme names',
+ default => undef,
+ },
+ 'desktop::xdm' => {
+ applies_to_vendor_os => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ should xdm be available (installed in vendor-OS)?
+ End-of-Here
+ content_regex => qr{^0|1$},
+ content_descr => '"0", "1" or "-" (for unset)',
+ default => undef,
+ },
+ 'desktop::xfce' => {
+ applies_to_vendor_os => 1,
+ description => unshiftHereDoc(<<' End-of-Here'),
+ should xfce be available (installed in vendor-OS)?
+ End-of-Here
+ content_regex => qr{^0|1$},
+ content_descr => '"0", "1" or "-" (for unset)',
+ default => undef,
+ },
+ };
+}
+
+sub getDefaultAttrsForVendorOS
+{
+ my $self = shift;
+ my $vendorOSName = shift;
+
+ my $attrs = $self->getAttrInfo();
+
+ if ($vendorOSName =~ m{kde}) {
+ $attrs->{'desktop::manager'}->{default} = 'kdm';
+ $attrs->{'desktop::kind'}->{default} = 'kde';
+ }
+ elsif ($vendorOSName =~ m{gnome}) {
+ $attrs->{'desktop::manager'}->{default} = 'gdm';
+ $attrs->{'desktop::kind'}->{default} = 'gnome';
+ }
+ elsif ($vendorOSName =~ m{xfce}) {
+ $attrs->{'desktop::manager'}->{default} = 'xdm';
+ $attrs->{'desktop::kind'}->{default} = 'xcfe';
+ }
+ else {
+ $attrs->{'desktop::manager'}->{default}
+ = $self->{distro}->getDefaultDesktopManager();
+ $attrs->{'desktop::kind'}->{default}
+ = $self->{distro}->getDefaultDesktopKind();
+ }
+ return $attrs;
+}
+
+sub checkStage3AttrValues
+{
+ my $self = shift;
+ my $stage3Attrs = shift;
+ my $vendorOSAttrs = shift;
+
+ my @problems;
+
+ my $manager = $stage3Attrs->{'desktop::manager'} || '';
+ if ($manager eq 'kdm') {
+ if (!defined $vendorOSAttrs->{'desktop::kdm'}
+ || $vendorOSAttrs->{'desktop::kdm'} == 1) {
+ if (!$self->{distro}->isKDMInstalled()) {
+ push @problems, _tr(
+ "KDM is not installed in vendor-OS, so using it as desktop manager wouldn't work!"
+ );
+ }
+ }
+ elsif ($vendorOSAttrs->{'desktop::kdm'} == 0) {
+ push @problems, _tr(
+ "desktop::kdm is 0, so using KDM as desktop manager is not allowed for this vendor-OS!"
+ );
+ }
+ }
+ elsif ($manager eq 'gdm') {
+ if (!defined $vendorOSAttrs->{'desktop::gdm'}
+ || $vendorOSAttrs->{'desktop::gdm'} == 1) {
+ if (!$self->{distro}->isGDMInstalled()) {
+ push @problems, _tr(
+ "GDM is not installed in vendor-OS, so using it as desktop manager wouldn't work!"
+ );
+ }
+ }
+ elsif ($vendorOSAttrs->{'desktop::gdm'} == 0) {
+ push @problems, _tr(
+ "desktop::gdm is 0, so using GDM as desktop manager is not allowed for this vendor-OS!"
+ );
+ }
+ }
+ elsif ($manager eq 'xdm') {
+ if (!defined $vendorOSAttrs->{'desktop::xdm'}
+ || $vendorOSAttrs->{'desktop::xdm'} == 1) {
+ if (!$self->{distro}->isXDMInstalled()) {
+ push @problems, _tr(
+ "XDM is not installed in vendor-OS, so using it as desktop manager wouldn't work!"
+ );
+ }
+ }
+ elsif ($vendorOSAttrs->{'desktop::xdm'} == 0) {
+ push @problems, _tr(
+ "desktop::xdm is 0, so using XDM as desktop manager is not allowed for this vendor-OS!"
+ );
+ }
+ }
+
+ my $kind = $stage3Attrs->{'desktop::kind'} || '';
+ if ($kind eq 'kde') {
+ if (!defined $vendorOSAttrs->{'desktop::kde'}
+ || $vendorOSAttrs->{'desktop::kde'} == 1) {
+ if (!$self->{distro}->isKDEInstalled()) {
+ push @problems, _tr(
+ "KDE is not installed in vendor-OS, so using it as desktop kind wouldn't work!"
+ );
+ }
+ }
+ elsif ($vendorOSAttrs->{'desktop::kde'} == 0) {
+ push @problems, _tr(
+ "desktop::kde is 0, so using KDE as desktop kind is not allowed for this vendor-OS!"
+ );
+ }
+ }
+ elsif ($kind eq 'gnome') {
+ if (!defined $vendorOSAttrs->{'desktop::gnome'}
+ || $vendorOSAttrs->{'desktop::gnome'} == 1) {
+ if (!$self->{distro}->isGNOMEInstalled()) {
+ push @problems, _tr(
+ "GNOME is not installed in vendor-OS, so using it as desktop kind wouldn't work!"
+ );
+ }
+ }
+ elsif ($vendorOSAttrs->{'desktop::gnome'} == 0) {
+ push @problems, _tr(
+ "desktop::gnome is 0, so using GNOME as desktop kind is not allowed for this vendor-OS!"
+ );
+ }
+ }
+ elsif ($kind eq 'xfce') {
+ if (!defined $vendorOSAttrs->{'desktop::xfce'}
+ || $vendorOSAttrs->{'desktop::xfce'} == 1) {
+ if (!$self->{distro}->isXFCEInstalled()) {
+ push @problems, _tr(
+ "XFCE is not installed in vendor-OS, so using it as desktop kind wouldn't work!"
+ );
+ }
+ }
+ elsif ($vendorOSAttrs->{'desktop::xfce'} == 0) {
+ push @problems, _tr(
+ "desktop::xfce is 0, so using XFCE as desktop kind is not allowed for this vendor-OS!"
+ );
+ }
+ }
+
+ my @supportedThemes
+ = split ',', $vendorOSAttrs->{'desktop::supported_themes'} || '';
+ my $theme = $stage3Attrs->{'desktop::theme'};
+ if (defined $theme && !grep { $_ eq $theme } @supportedThemes) {
+ push @problems, _tr(
+ "desktop::theme '%s' does not refer to a supported theme!\nSupported themes are: %s",
+ $theme, $vendorOSAttrs->{'desktop::supported_themes'} || ''
+ );
+ }
+
+ return if !@problems;
+
+ return \@problems;
+}
+
+sub installationPhase
+{
+ my $self = shift;
+ my $info = shift;
+
+ $self->{pluginRepositoryPath} = $info->{'plugin-repo-path'};
+ $self->{pluginTempPath} = $info->{'plugin-temp-path'};
+ $self->{openslxBasePath} = $info->{'openslx-base-path'};
+ $self->{openslxConfigPath} = $info->{'openslx-config-path'};
+ $self->{attrs} = $info->{'plugin-attrs'};
+
+ # We are going to change some of the stage1 attributes during installation
+ # (basically we are filling the ones that are not defined). Since the result
+ # of these changes might change between invocations, we do not want to store
+ # the resulting values, but we want to store the original (undef).
+ # In order to do so, we copy all stage1 attributes directly into the
+ # object hash and change them there.
+ $self->{gdm} = $self->{attrs}->{'desktop::gdm'};
+ $self->{kdm} = $self->{attrs}->{'desktop::kdm'};
+ $self->{xdm} = $self->{attrs}->{'desktop::xdm'};
+ $self->{gnome} = $self->{attrs}->{'desktop::gnome'};
+ $self->{kde} = $self->{attrs}->{'desktop::kde'};
+ $self->{xcfe} = $self->{attrs}->{'desktop::xfce'};
+ $self->{supported_themes} = $self->{attrs}->{'desktop::supported_themes'};
+
+ $self->_installRequiredPackages();
+ $self->_fillUnsetStage1Attrs();
+ $self->_ensureSensibleStage3Attrs();
+
+ # start to actually do something - according to current stage1 attributes
+ if ($self->{gdm}) {
+ $self->_setupGDM();
+ }
+ if ($self->{kdm}) {
+ $self->_setupKDM();
+ }
+ if ($self->{xdm}) {
+ $self->_setupXDM();
+ }
+ $self->_setupSupportedThemes();
+
+ return;
+}
+
+sub removalPhase
+{
+ my $self = shift;
+ my $info = shift;
+
+ return;
+}
+
+sub copyRequiredFilesIntoInitramfs
+{
+ my $self = shift;
+ my $targetPath = shift;
+ my $attrs = shift;
+ my $makeInitRamFSEngine = shift;
+
+ my $desktopTheme = $attrs->{'desktop::theme'} || '<none>';
+
+ vlog(1, _tr("desktop-plugin: desktop=%s", $desktopTheme));
+
+ return;
+}
+
+sub _installRequiredPackages
+{
+ my $self = shift;
+
+ my $engine = $self->{'os-plugin-engine'};
+
+ if ($self->{'gnome'} && !$self->{distro}->isGNOMEInstalled()) {
+ $self->{distro}->installGNOME();
+ }
+ if ($self->{'gdm'} && !$self->{distro}->isGDMInstalled()) {
+ $self->{distro}->installGDM();
+ }
+ if ($self->{'kde'} && !$self->{distro}->isKDEInstalled()) {
+ $self->{distro}->installKDE();
+ }
+ if ($self->{'kdm'} && !$self->{distro}->isKDMInstalled()) {
+ $self->{distro}->installKDM();
+ }
+ if ($self->{'xfce'} && !$self->{distro}->isXFCEInstalled()) {
+ $self->{distro}->installXFCE();
+ }
+ if ($self->{'xdm'} && !$self->{distro}->isXDMInstalled()) {
+ $self->{distro}->installXDM();
+ }
+
+ return 1;
+}
+
+sub _fillUnsetStage1Attrs
+{
+ my $self = shift;
+
+ if (!defined $self->{'gnome'}) {
+ $self->{'gnome'} = $self->{distro}->isGNOMEInstalled();
+ }
+ if (!defined $self->{'gdm'}) {
+ $self->{'gdm'} = $self->{distro}->isGDMInstalled();
+ }
+ if (!defined $self->{'kde'}) {
+ $self->{'kde'} = $self->{distro}->isKDEInstalled();
+ }
+ if (!defined $self->{'kdm'}) {
+ $self->{'kdm'} = $self->{distro}->isKDMInstalled();
+ }
+ if (!defined $self->{'xfce'}) {
+ $self->{'xfce'} = $self->{distro}->isXFCEInstalled();
+ }
+ if (!defined $self->{'xdm'}) {
+ $self->{'xdm'} = $self->{distro}->isXDMInstalled();
+ }
+ if (!defined $self->{'supported_themes'}) {
+ $self->{attrs}->{'desktop::supported_themes'}
+ = $self->{'supported_themes'}
+ = join ",", $self->_getAvailableThemes();
+ }
+
+ return 1;
+}
+
+sub _ensureSensibleStage3Attrs
+{
+ my $self = shift;
+
+ # check if current desktop kind is enabled at all and select another
+ # one, if it isn't
+ my $kind = $self->{attrs}->{'desktop::kind'} || '';
+ if (!$self->{$kind}) {
+ my @desktops = map { $self->{$_} ? $_ : () } qw( gnome kde xfce );
+ if (!@desktops) {
+ die _tr(
+ "no desktop kind is possible, plugin 'desktop' wouldn't work!"
+ );
+ }
+ vlog(0, _tr("selecting %s as desktop kind\n", $desktops[0]));
+ $self->{attrs}->{'desktop::kind'} = $desktops[0];
+ }
+
+ # check if current desktop manager is enabled at all and select another
+ # one, if it isn't
+ my $manager = $self->{attrs}->{'desktop::manager'} || '';
+ if (!$self->{$manager}) {
+ my @managers = map { $self->{$_} ? $_ : () } qw( kdm gdm xdm );
+ if (!@managers) {
+ die _tr(
+ "no desktop manager is possible, plugin 'desktop' wouldn't work!"
+ );
+ }
+ vlog(0, _tr("selecting %s as desktop manager\n", $managers[0]));
+ $self->{attrs}->{'desktop::manager'} = $managers[0];
+ }
+
+ # check if current theme is supported at all and select another one, if it
+ # isn't
+ my $theme = $self->{attrs}->{'desktop::theme'} || '';
+ my @supportedThemes = split ",", $self->{'supported_themes'} || '';
+ if (!grep { $_ eq $theme } @supportedThemes) {
+ if (!@supportedThemes) {
+ vlog( 0, _tr("no themes are supported, using no theme!"));
+ $self->{attrs}->{'desktop::theme'} = undef;
+ }
+ else {
+ vlog(0, _tr("selecting %s as theme\n", $supportedThemes[0]));
+ $self->{attrs}->{'desktop::theme'} = $supportedThemes[0];
+ }
+ }
+
+ return 1;
+}
+
+sub _setupGDM
+{
+ my $self = shift;
+
+ my $repoPath = $self->{pluginRepositoryPath};
+ mkpath([
+ "$repoPath/gdm/workstation",
+ "$repoPath/gdm/kiosk",
+ "$repoPath/gdm/chooser",
+ ]);
+
+ $self->_setupGDMScript();
+
+ my $configHash = $self->{distro}->GDMConfigHashForWorkstation();
+ $self->_writeConfigHash($configHash, "$repoPath/gdm/workstation/gdm.conf");
+
+ $configHash = $self->{distro}->GDMConfigHashForKiosk();
+ $self->_writeConfigHash($configHash, "$repoPath/gdm/kiosk/gdm.conf");
+
+ $configHash = $self->{distro}->GDMConfigHashForChooser();
+ $self->_writeConfigHash($configHash, "$repoPath/gdm/chooser/gdm.conf");
+
+ return;
+}
+
+sub _setupGDMScript
+{
+ my $self = shift;
+
+ my $repoPath = $self->{pluginRepositoryPath};
+ my $script = $self->{distro}->setupGDMScript($repoPath);
+
+ spitFile("$repoPath/gdm/desktop.sh", $script);
+
+ return;
+}
+
+sub _setupKDM
+{
+ my $self = shift;
+
+ my $repoPath = $self->{pluginRepositoryPath};
+ mkpath([
+ "$repoPath/kdm/workstation",
+ "$repoPath/kdm/kiosk",
+ "$repoPath/kdm/chooser",
+ ]);
+
+ $self->_setupKDMScript();
+
+ my $configHash = $self->{distro}->KDMConfigHashForWorkstation();
+ $self->_writeConfigHash($configHash, "$repoPath/kdm/workstation/kdmrc");
+
+ $configHash = $self->{distro}->KDMConfigHashForKiosk();
+ $self->_writeConfigHash($configHash, "$repoPath/kdm/kiosk/kdmrc");
+
+ $configHash = $self->{distro}->KDMConfigHashForChooser();
+ $self->_writeConfigHash($configHash, "$repoPath/kdm/chooser/kdmrc");
+
+ return;
+}
+
+sub _setupKDMScript
+{
+ my $self = shift;
+
+ my $repoPath = $self->{pluginRepositoryPath};
+ my $script = $self->{distro}->setupKDMScript($repoPath);
+
+ spitFile("$repoPath/kdm/desktop.sh", $script);
+
+ return;
+}
+
+sub _setupXDM
+{
+ my $self = shift;
+}
+
+sub _writeConfigHash
+{
+ my $self = shift;
+ my $hash = shift || {};
+ my $file = shift;
+
+ my $content = '';
+ for my $domain (sort keys %$hash) {
+ $content .= "[$domain]\n";
+ for my $key (sort keys %{$hash->{$domain}}) {
+ my $value
+ = defined $hash->{$domain}->{$key}
+ ? $hash->{$domain}->{$key}
+ : '';
+ $content .= "$key=$value\n";
+ }
+ $content .= "\n";
+ }
+ spitFile($file, $content);
+
+ return;
+}
+
+sub _setupSupportedThemes
+{
+ my $self = shift;
+
+ my $supportedThemes = $self->{attrs}->{'desktop::supported_themes'} || '';
+ my @supportedThemes = split m{\s*,\s*}, $supportedThemes;
+ return if !@supportedThemes;
+
+ # Every theme is copied from the folder where it is found first, such that
+ # themes in the config folder will be preferred to a theme with the same
+ # name living in the base folder
+ my @themeBaseDirs = (
+ "$self->{openslxConfigPath}/plugins/desktop/themes",
+ "$self->{openslxBasePath}/lib/plugins/desktop/themes",
+ );
+ THEME:
+ for my $theme (@supportedThemes) {
+ THEME_DIR:
+ foreach my $themeBaseDir (@themeBaseDirs) {
+ my $gdmThemeDir = "$themeBaseDir/gdm/$theme";
+ my $kdmThemeDir = "$themeBaseDir/kdm/$theme";
+ next THEME_DIR if !-d $gdmThemeDir && !-d $kdmThemeDir;
+ # any of both dirs is enough
+
+ # copy theme into plugin-repo folder
+ vlog(1, "installing theme '$theme'...");
+ my $gdmThemeTargetPath = "$self->{pluginRepositoryPath}/themes/gdm";
+ mkpath($gdmThemeTargetPath);
+ slxsystem(
+ "cp -a $gdmThemeDir $gdmThemeTargetPath/$theme 2>/dev/null"
+ ) == 0
+ or die _tr('unable to copy GDM-theme %s (%s)', $theme, $!);
+ my $kdmThemeTargetPath = "$self->{pluginRepositoryPath}/themes/kdm";
+ mkpath($kdmThemeTargetPath);
+ slxsystem(
+ "cp -a $kdmThemeDir $kdmThemeTargetPath/$theme 2>/dev/null"
+ ) == 0
+ or die _tr('unable to copy KDM-theme %s (%s)', $theme, $!);
+ next THEME;
+ }
+ warn _tr('theme "%s" not found - skipped!', $theme);
+ }
+
+ return;
+}
+
+sub _getAvailableThemes
+{
+ my $self = shift;
+
+ my %availableThemes;
+
+ # return all themes found in any of these two folders
+ my @themeBaseDirs = (
+ "$self->{openslxConfigPath}/plugins/desktop/themes",
+ "$self->{openslxBasePath}/lib/plugins/desktop/themes",
+ );
+ for my $themeBaseDir (@themeBaseDirs) {
+ my @foundGDMThemes
+ = map { basename $_ } grep { -d $_ } glob("$themeBaseDir/gdm/*");
+ @availableThemes{@foundGDMThemes} = ();
+ my @foundKDMThemes
+ = map { basename $_ } grep { -d $_ } glob("$themeBaseDir/kdm/*");
+ @availableThemes{@foundKDMThemes} = ();
+ }
+
+ vlog(1, _tr("available themes: %s", join ",", keys %availableThemes));
+
+ return keys %availableThemes;
+}
+
+1;
diff --git a/src/os-plugins/plugins/desktop/XX_desktop.sh b/src/os-plugins/plugins/desktop/XX_desktop.sh
new file mode 100644
index 00000000..a8cc71fc
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/XX_desktop.sh
@@ -0,0 +1,33 @@
+# Copyright (c) 2007..2008 - RZ Uni Freiburg
+# Copyright (c) 2008 - OpenSLX GmbH
+#
+# This program/file is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your feedback to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org
+#
+# stage3 part of 'desktop' plugin - the runlevel script
+#
+# script is included from init via the "." load function - thus it has all
+# variables and functions available
+
+if [ -e /initramfs/plugin-conf/desktop.conf ]; then
+ . /initramfs/plugin-conf/desktop.conf
+ if [ $desktop_active -ne 0 ]; then
+ [ $DEBUGLEVEL -gt 0 ] && echo "executing the 'desktop' os-plugin ...";
+
+ # problem which occurs if exporting was forgotten (quick fix code)
+ if [ -e /mnt/opt/openslx/plugin-repo/desktop/${desktop_manager}/desktop.sh ]
+ then . /mnt/opt/openslx/plugin-repo/desktop/${desktop_manager}/desktop.sh
+ else
+ error "This shouldn't fail - you might have forgotten to export \
+your system." fatal
+ fi
+
+ [ $DEBUGLEVEL -gt 0 ] && echo "done with 'desktop' os-plugin ...";
+
+ fi
+fi
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx-legacy b/src/os-plugins/plugins/desktop/themes/gdm/openslx-legacy
new file mode 120000
index 00000000..d97839a5
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx-legacy
@@ -0,0 +1 @@
+openslx \ No newline at end of file
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/GdmGreeterTheme.desktop b/src/os-plugins/plugins/desktop/themes/gdm/openslx/GdmGreeterTheme.desktop
new file mode 100755
index 00000000..08e5efce
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/GdmGreeterTheme.desktop
@@ -0,0 +1,8 @@
+[GdmGreeterTheme]
+Encoding=UTF-8
+Greeter=theme.xml
+Name=OpenSLX GDM theme
+Description=GDM Port of Daemonic KDM theme for FreeBSD
+Author=MJanc / KDM by aceph <aceph@ventcore.net>
+Copyright=Creative Commons
+Screenshot=screenshot.png \ No newline at end of file
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/color.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/color.png
new file mode 100644
index 00000000..7a0feb03
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/color.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/environment.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/environment.png
new file mode 100644
index 00000000..7ad6783a
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/environment.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/language-selector.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/language-selector.png
new file mode 100644
index 00000000..da016473
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/language-selector.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/language-selector_inactive.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/language-selector_inactive.png
new file mode 100644
index 00000000..bb2c8f69
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/language-selector_inactive.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/main-runner.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/main-runner.png
new file mode 100644
index 00000000..dde10cc8
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/main-runner.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/openslx-logo-main.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/openslx-logo-main.png
new file mode 100644
index 00000000..f98e6517
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/openslx-logo-main.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/openslx-logo.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/openslx-logo.png
new file mode 100644
index 00000000..8cfaaf94
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/openslx-logo.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/sessions.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/sessions.png
new file mode 100644
index 00000000..00d05f29
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/sessions.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/sessions_inactive.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/sessions_inactive.png
new file mode 100644
index 00000000..86bbe642
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/sessions_inactive.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/system.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/system.png
new file mode 100644
index 00000000..f7b9e71f
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/system.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/system_inactive.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/system_inactive.png
new file mode 100644
index 00000000..c3e1719b
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/system_inactive.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/theme.xml b/src/os-plugins/plugins/desktop/themes/gdm/openslx/theme.xml
new file mode 100644
index 00000000..46ef334e
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/theme.xml
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE greeter SYSTEM "greeter.dtd">
+<!--
+GDM-OpenSLX-Theme
+-->
+<greeter id="theme">
+
+ <!-- background -->
+ <item type="pixmap" id="background" background="true">
+ <normal file="color.png"/>
+ <pos x="0" y="0" width="100%" height="100%"/>
+ </item>
+
+ <!-- top / welcome, clock and big logo -->
+ <item type="rect" id="top" background="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="n" x="50%" y="0" width="100%" height="40%"/>
+ <box orientation="vertical" homogeneous="true">
+
+ <item type="pixmap" background="true">
+ <normal file="welcome-time-shadowed.png"/>
+ <pos anchor="n" x="50%" y="0" width="80%" height="44"/>
+ <box orientation="horizontal" homogeneous="true">
+ <!-- Welcome on ... -->
+ <item type="label" background="true">
+ <pos anchor="w" x="10%" y="30%"/>
+ <normal color="#f0f0f0" font="Sans 11"/>
+ <stock type="welcome-label"/>
+ </item>
+ <!-- clock -->
+ <item type="label" id="clock">
+ <pos anchor="e" x="90%" y="30%"/>
+ <normal color="#f0f0f0" font="Sans 11"/>
+ <text>%c</text>
+ </item>
+ </box>
+ </item>
+
+ <item type="rect" id="logo">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="10%" width="100%" height="100%"/>
+ <box orientation="vertical" homogeneous="true">
+ <item type="pixmap">
+ <normal file="openslx-logo-main.png"/>
+ <pos anchor="c" x="50%" y="50%"/>
+ </item>
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ <!-- main part / login, session, menu, ... -->
+ <item type="pixmap" id="main-runner" background="true">
+ <normal file="main-runner.png"/>
+ <pos anchor="c" x="50%" y="50%" width="100%" height="160"/>
+ <box orientation="horizontal" homogeneous="true">
+
+ <item type="rect" background="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="w" x="0%" y="50%" width="100%" height="100%"/>
+ <box orientation="horizontal" homogeneous="true">
+
+ <!-- left part / login -->
+ <item type="rect" background="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="w" x="0" y="50%" width="100%" height="100%"/>
+ <box orientation="horizontal">
+
+ <!-- small logo -->
+ <item type="pixmap" background="true">
+ <normal file="openslx-logo.png"/>
+ <pos anchor="w" x="30" y="50%"/>
+ </item>
+
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="w" x="70" y="50%" width="box" height="box"/>
+ <box homogeneous="true" spacing="5">
+ <!-- username-label -->
+ <item type="label" id="pam-prompt">
+ <pos anchor="nw" x="0" y="0"/>
+ <normal color="#f0f0f0" font="Sans 11"/>
+ <stock type="username-label"/>
+ </item>
+ <!-- username-entry -->
+ <item type="entry" id="user-pw-entry">
+ <normal color="#0f0f0f" font="Sans 11"/>
+ <pos anchor="sw" x="0" y="100%" height="20" width="120"/>
+ </item>
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ <!-- middle part / errors, caps info, gdm logo -->
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="50%" width="90%" height="100%"/>
+ <box orientation="vertical">
+
+ <!-- Login-Error -->
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="n" x="50%" y="10" width="100%" height="30"/>
+ <box>
+ <item type="label" id="pam-error">
+ <normal color="#ff8b00" font="Sans 11"/>
+ <pos anchor="c" x="50%" y="15"/>
+ <text/>
+ </item>
+ </box>
+ </item>
+
+ <item type="pixmap">
+ <normal file="environment.png"/>
+ <pos anchor="c" x="50%" y="50%"/>
+ </item>
+
+ <!-- capslock-warning -->
+ <item type="rect" id="caps-lock-warning">
+ <normal color="#000000" alpha="0.4"/>
+ <pos anchor="s" x="50%" y="-10" width="100%" height="30"/>
+ <box>
+ <item type="label">
+ <normal color="#ff8b00" font="Sans 11"/>
+ <pos anchor="c" x="50%" y="15"/>
+ <stock type="caps-lock-warning"/>
+ </item>
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ <!-- right part / sessions, menu -->
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="e" x="100%" y="50%" width="100%" height="100%"/>
+ <box orientation="vertical" homogeneous="true" spacing="10">
+
+ <!-- session-button -->
+ <item type="rect" id="session_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="se" x="-50" y="100%" width="box" height="box"/>
+ <box orientation="horizontal">
+ <item type="label">
+ <normal color="#bbbbbb" font="Sans 11"/>
+ <prelight color="#f0f0f0" font="Sans 11"/>
+ <active color="#ff8b00" font="Sans 11"/>
+ <pos anchor="e" x="100%" y="-24"/>
+ <stock type="session"/>
+ </item>
+ <item type="rect" id="session_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="50%" width="10"/>
+ </item>
+ <item type="pixmap" id="session_button" button="true">
+ <normal file="sessions_inactive.png"/>
+ <prelight file="sessions.png"/>
+ <pos anchor="se" x="100%" y="100%"/>
+ </item>
+ </box>
+ </item>
+
+ <!-- menu-button -->
+ <item type="rect" id="system_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="ne" x="-50" y="0" width="box" height="box"/>
+ <box orientation="horizontal">
+ <item type="label">
+ <normal color="#bbbbbb" font="Sans 11"/>
+ <prelight color="#f0f0f0" font="Sans 11"/>
+ <active color="#ff8b00" font="Sans 11"/>
+ <pos anchor="e" x="100%" y="24"/>
+ <stock type="system"/>
+ </item>
+ <item type="rect" id="system_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="50%" width="10"/>
+ </item>
+ <item type="pixmap" id="system_button" button="true">
+ <normal file="system_inactive.png"/>
+ <prelight file="system.png"/>
+ <pos anchor="ne" x="100%" y="0%"/>
+ </item>
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ <!-- language-button -->
+ <item type="rect" id="language_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="se" x="-10" y="-10" width="box" height="box"/>
+ <box orientation="horizontal">
+ <item type="label">
+ <normal color="#3e5d72" font="Sans 11"/>
+ <prelight color="#557f9c" font="Sans 11"/>
+ <active color="#ff8b00" font="Sans 11"/>
+ <pos anchor="e" x="100%" y="16"/>
+ <stock type="language"/>
+ </item>
+ <item type="rect" id="language_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="50%" width="10"/>
+ </item>
+ <item type="pixmap" id="language_button" button="true">
+ <normal file="language-selector_inactive.png"/>
+ <prelight file="language-selector.png"/>
+ <pos anchor="ne" x="100%" y="0%"/>
+ </item>
+ </box>
+ </item>
+
+</greeter>
diff --git a/src/os-plugins/plugins/desktop/themes/gdm/openslx/welcome-time-shadowed.png b/src/os-plugins/plugins/desktop/themes/gdm/openslx/welcome-time-shadowed.png
new file mode 100644
index 00000000..79e872c3
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/gdm/openslx/welcome-time-shadowed.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/GdmGreeterTheme.desktop b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/GdmGreeterTheme.desktop
new file mode 100755
index 00000000..da63ec08
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/GdmGreeterTheme.desktop
@@ -0,0 +1,8 @@
+[GdmGreeterTheme]
+Encoding=UTF-8
+Greeter=theme.xml
+Name=OpenSLX KDM theme
+Description=KDM Port of Daemonic KDM theme for FreeBSD
+Author=MJanc / KDM by aceph <aceph@ventcore.net>
+Copyright=Creative Commons
+Screenshot=screenshot.png
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/KdmGreeterTheme.desktop b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/KdmGreeterTheme.desktop
new file mode 100755
index 00000000..3cb9069d
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/KdmGreeterTheme.desktop
@@ -0,0 +1,8 @@
+[KdmGreeterTheme]
+Encoding=UTF-8
+Greeter=theme.xml
+Name=OpenSLX KDM theme
+Description=KDM Port of Daemonic KDM theme for FreeBSD
+Author=MJanc / KDM by aceph <aceph@ventcore.net>
+Copyright=Creative Commons
+Screenshot=screenshot.png
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/color.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/color.png
new file mode 100644
index 00000000..7a0feb03
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/color.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/enter.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/enter.png
new file mode 100644
index 00000000..b646e851
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/enter.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/enter_inactive.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/enter_inactive.png
new file mode 100644
index 00000000..e12cfb8e
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/enter_inactive.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/environment.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/environment.png
new file mode 100644
index 00000000..b9682822
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/environment.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/main-runner.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/main-runner.png
new file mode 100644
index 00000000..5b3cf656
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/main-runner.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/openslx-logo-main.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/openslx-logo-main.png
new file mode 100644
index 00000000..f98e6517
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/openslx-logo-main.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/openslx-logo.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/openslx-logo.png
new file mode 100644
index 00000000..8cfaaf94
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/openslx-logo.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/sessions.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/sessions.png
new file mode 100644
index 00000000..00d05f29
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/sessions.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/sessions_inactive.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/sessions_inactive.png
new file mode 100644
index 00000000..86bbe642
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/sessions_inactive.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/system.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/system.png
new file mode 100644
index 00000000..f7b9e71f
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/system.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/system_inactive.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/system_inactive.png
new file mode 100644
index 00000000..c3e1719b
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/system_inactive.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/theme.xml b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/theme.xml
new file mode 100644
index 00000000..61ae6644
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/theme.xml
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE greeter SYSTEM "greeter.dtd">
+<!--
+KDM3-OpenSLX-Theme
+-->
+<greeter>
+ <!-- main pic, login pic -->
+ <item type="pixmap">
+ <normal file="color.png"/>
+ <pos x="0" y="0" width="100%" height="100%"/>
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="n" x="50%" y="0" width="100%" height="40%"/>
+
+ <item type="pixmap">
+ <normal file="welcome-time-shadowed.png"/>
+ <pos anchor="n" x="50%" y="0" width="80%" height="44"/>
+
+ <!-- Welcome on ... -->
+ <item type="label">
+ <pos anchor="w" x="5%" y="33%"/>
+ <normal color="#f0f0f0" font="Sans 12"/>
+ <!-- <stock type="welcome-label"/> -->
+ <text>OpenSLX Workstation (%h)</text>
+ </item>
+
+ <!-- clock -->
+ <item type="label" id="clock">
+ <normal color="#f0f0f0" font="Sans 12"/>
+ <pos anchor="e" x="95%" y="33%"/>
+ <text>%c</text>
+ </item>
+
+ </item>
+
+ <item type="pixmap">
+ <normal file="openslx-logo-main.png"/>
+ <pos anchor="n" x="50%" y="20%" height="70%"/>
+ </item>
+
+ </item>
+
+ <item type="pixmap">
+ <normal file="main-runner.png"/>
+ <pos anchor="c" x="50%" y="50%" width="100%" height="160"/>
+
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="w" x="0" y="50%" width="35%" height="100%"/>
+
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="w" x="0" y="50%" width="120" height="100%"/>
+ <item type="pixmap">
+ <normal file="openslx-logo.png"/>
+ <pos anchor="e" x="100%" y="50%"/>
+ </item>
+ </item>
+
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="e" x="-140" y="50%" width="100%" height="100%"/>
+
+ <!-- username-label -->
+ <item type="label">
+ <pos anchor="e" x="-5" y="40%"/>
+ <normal color="#f0f0f0" font="Sans 11"/>
+ <stock type="username-label"/>
+ </item>
+
+ <!-- password-label -->
+ <item type="label">
+ <pos anchor="e" x="-5" y="60%"/>
+ <normal color="#f0f0f0" font="Sans 11"/>
+ <stock type="password-label"/>
+ </item>
+
+ </item>
+
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="e" x="100%" y="50%" width="140" height="100%"/>
+
+ <!-- username-entry -->
+ <item type="entry" id="user-entry">
+ <pos anchor="w" x="0" y="40%" height="22" width="114"/>
+ </item>
+
+ <!-- password-entry -->
+ <item type="entry" id="pw-entry">
+ <pos anchor="w" x="0" y="60%" height="22" width="114"/>
+ </item>
+
+ <item type="pixmap" button="true" id="login_button">
+ <pos anchor="e" x="100%" y="60%" height="22" width="22"/>
+ <normal file="enter_inactive.png"/>
+ <prelight file="enter.png"/>
+ </item>
+
+ </item>
+
+ </item>
+
+ <item type="rect">
+ <normal color="#ff0000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="50%" width="30%" height="160"/>
+
+ <!-- capslock-warning -->
+ <item type="pixmap" id="caps-lock-warning">
+ <normal file="error.png"/>
+ <pos anchor="c" x="50%" y="22" width="100%" height="70"/>
+ <item type="rect" id="caps-lock-warning">
+ <normal color="#000000" alpha="0.4"/>
+ <pos anchor="c" x="50%" y="50%" width="100%" height="box"/>
+ <box orientation="vertical" xpadding="10" ypadding="5" spacing="0">
+ <item type="label">
+ <normal color="#ff8b00" font="Sans 11"/>
+ <pos x="50%" anchor="n"/>
+ <stock type="caps-lock-warning"/>
+ </item>
+ </box>
+ </item>
+ </item>
+
+ <item type="pixmap">
+ <normal file="environment.png"/>
+ <pos anchor="c" x="50%" y="50%" width="186" height="100"/>
+ </item>
+
+ <!-- Login-Error -->
+ <item type="pixmap" id="pam-error">
+ <normal file="error.png"/>
+ <pos anchor="c" x="50%" y="-22" width="100%" height="70"/>
+ <item type="rect">
+ <normal color="#000000" alpha="0.4"/>
+ <pos anchor="c" x="50%" y="50%" width="100%" height="box"/>
+ <box orientation="vertical" xpadding="10" ypadding="5" spacing="0">
+ <item type="label">
+ <normal color="#ff8b00" font="Sans 11"/>
+ <pos anchor="n" x="50%"/>
+ <text>Login failed!</text>
+ <text xml:lang="en">Login failed!</text>
+ <text xml:lang="de">Login fehlgeschlagen!</text>
+ </item>
+ </box>
+ </item>
+ </item>
+
+ </item>
+
+ <!-- icons and text on the left -->
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="e" x="100%" y="50%" width="35%" height="100%"/>
+
+ <!-- session-button -->
+ <item type="rect" id="session_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="se" x="80%" y="50%" width="160" height="50%"/>
+
+ <item type="pixmap" id="session_button" button="true">
+ <normal file="sessions_inactive.png"/>
+ <prelight file="sessions.png"/>
+ <pos anchor="se" x="94%" y="-8" width="48" height="48"/>
+ </item>
+
+ <item type="label">
+ <normal color="#bbbbbb" font="Sans 11"/>
+ <prelight color="#f0f0f0" font="Sans 11"/>
+ <active color="#ff8b00" font="Sans 11"/>
+ <pos anchor="e" x="-70" y="-32"/>
+ <text>Session</text>
+ <text xml:lang="en">Session</text>
+ <text xml:lang="de">Sitzung</text>
+ </item>
+
+ </item>
+
+ <!-- menu-button -->
+ <item type="rect" id="system_button" button="true">
+ <show modes="console" type="system"/>
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="ne" x="80%" y="50%" width="160" height="50%"/>
+ <item type="pixmap" id="system_button" button="true">
+ <normal file="system_inactive.png"/>
+ <prelight file="system.png"/>
+ <pos anchor="ne" x="94%" y="8" width="48" height="48"/>
+ </item>
+ <item type="label">
+ <normal color="#bbbbbb" font="Sans 11"/>
+ <prelight color="#f0f0f0" font="Sans 11"/>
+ <active color="#ff8b00" font="Sans 11"/>
+ <pos anchor="e" x="-70" y="32"/>
+ <text>System Menu</text>
+ <text xml:lang="en">System Menu</text>
+ <text xml:lang="de">System MenĂ¼</text>
+ </item>
+ </item>
+
+ </item>
+
+ </item>
+ </item>
+</greeter>
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/welcome-time-shadowed.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/welcome-time-shadowed.png
new file mode 100644
index 00000000..79e872c3
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx-legacy/welcome-time-shadowed.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/KdmGreeterTheme.desktop b/src/os-plugins/plugins/desktop/themes/kdm/openslx/KdmGreeterTheme.desktop
new file mode 100755
index 00000000..3cb9069d
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/KdmGreeterTheme.desktop
@@ -0,0 +1,8 @@
+[KdmGreeterTheme]
+Encoding=UTF-8
+Greeter=theme.xml
+Name=OpenSLX KDM theme
+Description=KDM Port of Daemonic KDM theme for FreeBSD
+Author=MJanc / KDM by aceph <aceph@ventcore.net>
+Copyright=Creative Commons
+Screenshot=screenshot.png
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/color.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/color.png
new file mode 100644
index 00000000..7a0feb03
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/color.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/enter.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/enter.png
new file mode 100644
index 00000000..b646e851
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/enter.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/enter_inactive.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/enter_inactive.png
new file mode 100644
index 00000000..e12cfb8e
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/enter_inactive.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/environment.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/environment.png
new file mode 100644
index 00000000..b9682822
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/environment.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/main-runner.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/main-runner.png
new file mode 100644
index 00000000..dde10cc8
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/main-runner.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/openslx-logo-main.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/openslx-logo-main.png
new file mode 100644
index 00000000..f98e6517
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/openslx-logo-main.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/openslx-logo.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/openslx-logo.png
new file mode 100644
index 00000000..8cfaaf94
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/openslx-logo.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/sessions.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/sessions.png
new file mode 100644
index 00000000..00d05f29
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/sessions.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/sessions_inactive.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/sessions_inactive.png
new file mode 100644
index 00000000..86bbe642
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/sessions_inactive.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/system.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/system.png
new file mode 100644
index 00000000..f7b9e71f
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/system.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/system_inactive.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/system_inactive.png
new file mode 100644
index 00000000..c3e1719b
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/system_inactive.png
Binary files differ
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/theme.xml b/src/os-plugins/plugins/desktop/themes/kdm/openslx/theme.xml
new file mode 100644
index 00000000..d748c776
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/theme.xml
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE greeter SYSTEM "greeter.dtd">
+<!--
+KDM-OpenSLX-Theme
+-->
+<greeter id="theme">
+ <style font="Sans 11" window-text-color="#f0f0f0" base-color="#f0f0f0" text-color="#000000"/>
+
+ <!-- background -->
+ <item type="pixmap" id="background" background="true">
+ <normal file="color.png"/>
+ <pos x="0" y="0" width="100%" height="100%"/>
+ </item>
+
+ <!-- top / welcome, clock and big logo -->
+ <item type="rect" id="top" background="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="n" x="50%" y="0" width="100%" height="40%"/>
+ <box orientation="vertical" homogeneous="true">
+
+ <item type="pixmap" background="true">
+ <normal file="welcome-time-shadowed.png"/>
+ <pos anchor="n" x="50%" y="0" width="80%" height="44"/>
+ <box orientation="horizontal" homogeneous="true">
+ <!-- Welcome on ... -->
+ <item type="label" background="true">
+ <pos anchor="w" x="10%" y="30%"/>
+ <normal color="#f0f0f0" font="Sans 11"/>
+ <stock type="welcome-label"/>
+ </item>
+ <!-- clock -->
+ <item type="label" id="clock">
+ <pos anchor="e" x="90%" y="30%"/>
+ <normal color="#f0f0f0" font="Sans 11"/>
+ <text>%c</text>
+ </item>
+ </box>
+ </item>
+
+ <item type="rect" id="logo">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="10%" width="100%" height="100%"/>
+ <box orientation="vertical" homogeneous="true">
+ <item type="pixmap">
+ <normal file="openslx-logo-main.png"/>
+ <pos anchor="c" x="50%" y="50%"/>
+ </item>
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ <!-- main part / login, session, menu, ... -->
+ <item type="pixmap" id="main-runner" background="true">
+ <normal file="main-runner.png"/>
+ <pos anchor="c" x="50%" y="50%" width="100%" height="160"/>
+ <box orientation="horizontal" homogeneous="true">
+
+ <item type="rect" background="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="w" x="0%" y="50%" width="100%" height="100%"/>
+ <box orientation="horizontal" homogeneous="true">
+
+ <!-- left part / login -->
+ <item type="rect" background="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="w" x="0" y="50%" width="100%" height="100%"/>
+ <box orientation="horizontal">
+
+ <!-- small logo -->
+ <item type="pixmap" background="true">
+ <normal file="openslx-logo.png"/>
+ <pos anchor="w" x="30" y="50%"/>
+ </item>
+
+ <!-- login -->
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="w" x="70" y="50%" width="box" height="box"/>
+ <box orientation="horizontal" spacing="10">
+
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="sw" x="0" y="100%" width="box" height="100%"/>
+ <box homogeneous="true" spacing="10">
+ <!-- username-label -->
+ <item type="label">
+ <pos anchor="nw" x="0" y="0"/>
+ <normal color="#f0f0f0" font="Sans 11"/>
+ <stock type="username-label"/>
+ </item>
+ <!-- password-label -->
+ <item type="label">
+ <pos anchor="sw" x="0" y="-0"/>
+ <normal color="#f0f0f0" font="Sans 11"/>
+ <stock type="password-label"/>
+ </item>
+ </box>
+ </item>
+
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="nw" x="0" y="0" width="box" height="box"/>
+ <box homogeneous="true" spacing="10">
+ <!-- username-entry -->
+ <item type="entry" id="user-entry">
+ <pos anchor="w" x="0" y="50%" height="20" width="100"/>
+ </item>
+ <!-- password-entry -->
+ <item type="entry" id="pw-entry">
+ <pos anchor="w" x="0" y="50%" height="20" width="100"/>
+ </item>
+ </box>
+ </item>
+
+ <item type="pixmap" button="true" id="login_button">
+ <pos anchor="sw" x="0" y="-0" height="20" width="20"/>
+ <normal file="enter_inactive.png"/>
+ <prelight file="enter.png"/>
+ </item>
+
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ <!-- middle part / errors, caps info, kdm logo -->
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="50%" width="90%" height="100%"/>
+ <box orientation="vertical">
+
+ <!-- Login-Error -->
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="n" x="50%" y="10" width="100%" height="30"/>
+ <box>
+ <item type="label" id="pam-error">
+ <normal color="#ff8b00" font="Sans 11"/>
+ <pos anchor="c" x="50%" y="15"/>
+ <text/>
+ </item>
+ </box>
+ </item>
+
+ <item type="pixmap">
+ <normal file="environment.png"/>
+ <pos anchor="c" x="50%" y="50%"/>
+ </item>
+
+ <!-- capslock-warning -->
+ <item type="rect" id="caps-lock-warning">
+ <normal color="#000000" alpha="0.4"/>
+ <pos anchor="s" x="50%" y="-10" width="100%" height="30"/>
+ <box>
+ <item type="label">
+ <normal color="#ff8b00" font="Sans 11"/>
+ <pos anchor="c" x="50%" y="15"/>
+ <stock type="caps-lock-warning"/>
+ </item>
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ <!-- right part / sessions, menu -->
+ <item type="rect">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="e" x="100%" y="50%" width="100%" height="100%"/>
+ <box orientation="vertical" homogeneous="true" spacing="10">
+
+ <!-- session-button -->
+ <item type="rect" id="session_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="se" x="-50" y="100%" width="box" height="box"/>
+ <box orientation="horizontal">
+ <item type="label">
+ <normal color="#bbbbbb" font="Sans 11"/>
+ <prelight color="#f0f0f0" font="Sans 11"/>
+ <active color="#ff8b00" font="Sans 11"/>
+ <pos anchor="e" x="100%" y="-24"/>
+ <stock type="session"/>
+ </item>
+ <item type="rect" id="session_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="50%" width="10"/>
+ </item>
+ <item type="pixmap" id="session_button" button="true">
+ <normal file="sessions_inactive.png"/>
+ <prelight file="sessions.png"/>
+ <pos anchor="se" x="100%" y="100%"/>
+ </item>
+ </box>
+ </item>
+
+ <!-- menu-button -->
+ <item type="rect" id="system_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="ne" x="-50" y="0" width="box" height="box"/>
+ <box orientation="horizontal">
+ <item type="label">
+ <normal color="#bbbbbb" font="Sans 11"/>
+ <prelight color="#f0f0f0" font="Sans 11"/>
+ <active color="#ff8b00" font="Sans 11"/>
+ <pos anchor="e" x="100%" y="24"/>
+ <stock type="system"/>
+ </item>
+ <item type="rect" id="system_button" button="true">
+ <normal color="#000000" alpha="0.0"/>
+ <pos anchor="c" x="50%" y="50%" width="10"/>
+ </item>
+ <item type="pixmap" id="system_button" button="true">
+ <normal file="system_inactive.png"/>
+ <prelight file="system.png"/>
+ <pos anchor="ne" x="100%" y="0%"/>
+ </item>
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+ </box>
+ </item>
+
+</greeter>
diff --git a/src/os-plugins/plugins/desktop/themes/kdm/openslx/welcome-time-shadowed.png b/src/os-plugins/plugins/desktop/themes/kdm/openslx/welcome-time-shadowed.png
new file mode 100644
index 00000000..79e872c3
--- /dev/null
+++ b/src/os-plugins/plugins/desktop/themes/kdm/openslx/welcome-time-shadowed.png
Binary files differ