diff options
-rw-r--r-- | sbin/chksession | 71 |
1 files changed, 36 insertions, 35 deletions
diff --git a/sbin/chksession b/sbin/chksession index cb8603c..d0ac569 100644 --- a/sbin/chksession +++ b/sbin/chksession @@ -37,16 +37,47 @@ sub cat { # returns content of argument file as a single string } sub parse_file { # parse a session descriptor file - $_ = cat (shift @_); + my ($fn) = @_; + $_ = cat ($fn); ($n = $1) =~ s| ||g if /^NAME=(.*)/m; $e = $1 if /^EXEC=(.*)/m; # $d = $1 if /^DESC=(.*)/m; # $i = $1 if /^ICON=(.*)/m; $s = $1 while /SCRIPT:(.*?)$/gs; chomp $s; - if (-x $e) { $script{$n} = $s; push @lf, $n; } + if (-x $e) { $script{$n} = $s; $exe{$n} = $e; push @lf, $n; ($order{$n}) = $fn =~ m/(^[0-9][0-9])/; } # if (-x $e) { $script{$n} = $s; $exec{$n} = $e; $desc{$n} = $d; $icon{$n} = $i; push @lf, $n; } } +sub gen_desktops { + my ($d) = @_; + -d $d or system("mkdir -p $d"); + chdir $d; + + for my $file (@lf) { + open FH, ">$d/$order{$file}$file.desktop" or die "Can't write to $d/$order{$file}.desktop\n"; + print FH "[Desktop Entry]\n"; + print FH "Encoding=UTF-8\n"; + print FH "Name=$file\n"; + print FH "Comment=$file\n"; + print FH "TryExec=$exe{$file}\n" if $exe{$file}; + print FH "Exec=/etc/X11/xdm/Xsession $file\n"; + print FH "Icon=\n"; + print FH "Type=Application\n"; + close FH; + chmod 0755, $file; + } + open FH, ">$d/Default.desktop" or die "Can't write to $d/Default.desktop\n"; + print FH "[Desktop Entry]\n"; + print FH "Encoding=UTF-8\n"; + print FH "Name=Default\n"; + print FH "Comment=Default\n"; + print FH "Exec=/etc/X11/xdm/Xsession\n"; + print FH "Icon=\n"; + print FH "Type=Application\n"; + close FH; + chmod 0755, $file; +} + usage(1) if @ARGV < 1; @@ -84,7 +115,7 @@ for (<*>) { parse_file ("$_"); } -my ($e) = eval {cat("/etc/sysconfig/desktop")} =~ /(\S+)/; +my ($e) = eval {cat("/etc/sysconfig/desktop")} =~ /DESKTOP=(\S+)/; # The first string (without spaces) in the file is copied to $e. # If $e is one of the names in @lf, then it is placed first (leftmost). @@ -93,41 +124,11 @@ my ($e) = eval {cat("/etc/sysconfig/desktop")} =~ /(\S+)/; if ($kdm) { - $session="SessionTypes="; - for(@lf) { $session .= /$lf[-1]$/ ? "$_,failsafe,default" : "$_," } - print "$session\n"; - exit(0); + gen_desktops '/usr/share/apps/kdm/sessions'; } if ($gdm) { - my $d = '/etc/X11/dm/Sessions/'; - -d $d or system("mkdir -p $d"); - chdir $d; - - for my $file (@lf) { - open FH, ">/etc/X11/dm/Sessions/$file.desktop" or die "Can't write to /etc/X11/dm/Sessions/$file.desktop\n"; - print FH "[Desktop Entry]\n"; - print FH "Encoding=UTF-8\n"; - print FH "Name=$file\n"; - print FH "Comment=$file\n"; - print FH "Exec=/etc/X11/xdm/Xsession $file\n"; - print FH "Icon=\n"; - print FH "Type=Application\n"; - close FH; - chmod 0755, $file; - } - open FH, ">/etc/X11/dm/Sessions/Default.desktop" or die "Can't write to /etc/X11/dm/Sessions/Default.desktop\n"; - print FH "[Desktop Entry]\n"; - print FH "Encoding=UTF-8\n"; - print FH "Name=Default\n"; - print FH "Comment=Default\n"; - print FH "Exec=/etc/X11/xdm/Xsession\n"; - print FH "Icon=\n"; - print FH "Type=Application\n"; - close FH; - chmod 0755, $file; - - + gen_desktops '/etc/X11/dm/Sessions'; } if ($xsession) { |