# 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;