diff options
Diffstat (limited to 'os-plugins/plugins/displaymanager/OpenSLX/OSPlugin/displaymanager.pm')
-rw-r--r-- | os-plugins/plugins/displaymanager/OpenSLX/OSPlugin/displaymanager.pm | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/os-plugins/plugins/displaymanager/OpenSLX/OSPlugin/displaymanager.pm b/os-plugins/plugins/displaymanager/OpenSLX/OSPlugin/displaymanager.pm new file mode 100644 index 00000000..44ffd52b --- /dev/null +++ b/os-plugins/plugins/displaymanager/OpenSLX/OSPlugin/displaymanager.pm @@ -0,0 +1,142 @@ +# Copyright (c) 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/ +# ----------------------------------------------------------------------------- +# displaymanager.pm +# - implementation of the 'displaymanager' plugin, which installs +# all needed information for a displaymanager. Further possibilities: +# change xdmcp to (gdm, kdm, ...) +# change theme for this xdmcp +# ----------------------------------------------------------------------------- +package OpenSLX::OSPlugin::displaymanager; + +use strict; +use warnings; + +use base qw(OpenSLX::OSPlugin::Base); + +use OpenSLX::Basics; +use OpenSLX::Utils; + +sub new +{ + my $class = shift; + + my $self = { + name => 'displaymanager', + }; + + return bless $self, $class; +} + +sub getInfo +{ + my $self = shift; + + return { + description => unshiftHereDoc(<<' End-of-Here'), + Sets a displaymanager and creates needed configs, theme can be set as well. + End-of-Here + mustRunAfter => [], + }; +} + +sub getAttrInfo +{ + my $self = shift; + + return { + 'displaymanager::active' => { + applies_to_systems => 1, + applies_to_clients => 0, + description => unshiftHereDoc(<<' End-of-Here'), + should the 'displaymanager'-plugin be executed during boot? + End-of-Here + content_regex => qr{^(0|1)$}, + content_descr => '1 means active - 0 means inactive', + default => '1', + }, + 'displaymanager::precedence' => { + applies_to_systems => 1, + applies_to_clients => 0, + description => unshiftHereDoc(<<' End-of-Here'), + the execution precedence of the 'displaymanager' plugin + End-of-Here + content_regex => qr{^\d\d$}, + content_descr => 'allowed range is from 01-99', + default => 40, + }, + 'displaymanager::xdmcp' => { + applies_to_systems => 1, + applies_to_clients => 0, + description => unshiftHereDoc(<<' End-of-Here'), + which xdmcp to configure, gdm, kdm, xdm?) + End-of-Here + content_regex => qr{^(g|k|x)dm$}, + content_descr => 'allowed: gdm, kdm, xdm', + default => 'xdm', + }, + 'displaymanager::theme' => { + applies_to_systems => 1, + applies_to_clients => 0, + description => unshiftHereDoc(<<' End-of-Here'), + name of the theme to apply to the displaymanager (unset for no theme) + End-of-Here + content_regex => undef, + content_descr => undef, + default => 'openslx', + }, + }; +} + +sub copyRequiredFilesIntoInitramfs +{ + my $self = shift; + my $targetPath = shift; + my $attrs = shift; + my $makeInitRamFSEngine = shift; + + my $xdmcpConfigDir = "$openslxConfig{'base-path'}/lib/plugins/displaymanager/config/$displaymanagerXdmcp"; + my $themeDir = "$openslxConfig{'base-path'}/share/themes"; + my $displaymanagerXdmcp = $attrs->{'displaymanager::xdmcp'} || ''; + my $displaymanagerTheme = $attrs->{'displaymanager::theme'} || ''; + if ($displaymanagerTheme) { + my $displaymanagerThemeDir + = "$themeDir/$displaymanagerTheme/displaymanager/$displaymanagerXdmcp"; + if (-d $displaymanagerThemeDir) { + $makeInitRamFSEngine->addCMD( + "mkdir -p $targetPath/usr/share/config" + ); + $makeInitRamFSEngine->addCMD( + "mkdir -p $targetPath/usr/share/themes" + ); + $makeInitRamFSEngine->addCMD( + "cp -a $displaymanagerThemeDir $targetPath/usr/share/themes/" + ); + $makeInitRamFSEngine->addCMD( + "cp -a $xdmcpConfigDir $targetPath/usr/share/config/" + ); + } + } + else { + $displaymanagerTheme = '<none>'; + } + + vlog( + 1, + _tr( + "displaymanager-plugin: displaymanager=%s", + $displaymanagerTheme + ) + ); + + return; +} + +1; |