% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % % help system % % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % global vars used by help system /help.context "main" def /help.light white def /help.dark black def /help.font font.normal def /help.normal.bg window.color.bg def /help.normal.fg window.color.fg def /help.x 80 def /help.y 50 def /help.width 480 def /help.height 322 def clip.size pop 800 eq { /help.x 120 def /help.y 90 def /help.width 560 def /help.height 359 def } if /help.text.x help.x 10 add def /help.text.y help.y 30 add def /help.text.width help.width 20 sub def /help.text.height help.height help.text.y sub help.y add 4 sub def /help.text.rightmargin help.text.x help.text.width add def /help.title.x help.x 10 add def /help.title.y help.y 3 add def /help.title.height 20 def /help.title.font font.normal def /help.hist.page 16 array def /help.hist.startrow help.hist.page length array def /help.hist.selectedlink help.hist.page length array def % for boot option lookup /bo.opt.max 32 def /bo.opt bo.opt.max 3 add string def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Map help context. % % ( context ) ==> ( new_context ) % % Note: obsolete. % /help.mapcontext { % dup "xxx" eq { pop "yyy" } if } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Set help context. % % ( context ) ==> ( ) % /help.setcontext { help.mapcontext /help.context exch def } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Find boot option the cursor is positioned at. % % ( ) ==> ( option ) % /findbootoption { boot.window .ed.list get boot.window .ed.focus get get /bo.buf over .inp_buf get def /bo.len over .inp_buf_len get def /bo.pos exch .inp_int get .inp_int_cur get def { bo.pos 0 eq { exit } if bo.buf bo.pos 1 sub get ' ' le { exit } if /bo.pos bo.pos 1 sub def } loop /bo.buf bo.buf bo.pos add def bo.buf 0 get ' ' le { "" return } if % "o_" + option name is the help text label "o_" bo.opt sprintf 0 1 bo.opt.max 1 sub { dup bo.buf exch get dup ' ' le over '=' eq or { pop pop exit } if over bo.opt 2 add exch rot put bo.opt 3 add exch 0 put } for bo.opt } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Find help page. % % returns help page or empty string if no page was found % % ( label ) ==> ( help_text ) % % Shows first help page if label is not found. % /help.findpage { dup length 3 add dup string "\x12%s\x14" 3 1 roll dup 5 1 roll snprintf help.getmessages over strstr dup { 2 sub } if 1 add help.getmessages add exch free } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Find help page. % % returns n-th help page or empty string if no page was found % % ( n ) ==> ( help_text ) % /help.findpagebyindex { help.getmessages exch { dup "\x04" strstr dup { add } { pop pop "" exit } ifelse } repeat } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Init & display help page. % % ( help_text start_row selected_link ) ==> ( ) % /help.initpage { /help.selectedlink exch def /help.startrow exch def /help.currenttext over def window.title.bg setcolor help.x 1 add help.y 1 add moveto help.width 2 sub help.title.height 1 sub fillrect help.text.x help.text.y moveto currentmaxrows 0 setmaxrows exch formattext setmaxrows white setcolor currenteotchar 16 seteotchar help.title.x help.title.y moveto currenttitle currentfont help.title.font setfont exch show setfont seteotchar getlinks { help.selectedlink setlink } if help.updatepage % 500 0 moveto gettextrows print % 400 0 moveto getlinks print } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Redraw help page. % % ( ) ==> ( ) % /help.updatepage { help.normal.bg setcolor help.text.x help.text.y moveto help.text.width help.text.height fillrect help.normal.fg help.highlight.fg help.link.fg help.link.selected.fg settextcolors help.startrow setstartrow help.text.x help.text.y moveto help.currenttext show 0 setstartrow true help.selectedlink help.redrawlink } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Used to iterate over all help pages (for debugging). % % get the n-th page starting from current pos % % ( n ) ==> ( help_text ) % /help.test { help.test.cnt add dup 1 lt { pop 1 } if /help.test.cnt over def help.findpagebyindex dup "" eq { % one page back pop help.test.cnt 1 sub /help.test.cnt over def help.findpagebyindex } if } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Redraw link. % % selected: true or false. % % ( selected n ) ==> ( ) % % /help.redrawlink { getlinks 0 eq { pop pop return } if getlink dup help.startrow lt over help.startrow help.text.rows add ge or { 5 { pop } repeat return } if help.startrow sub lineheight mul help.text.y add moveto rot 16 seteotchar { currenttextcolors 4 1 roll pop pop pop help.link.selected.bg } { currenttextcolors 4 2 roll pop pop pop help.normal.bg } ifelse setcolor over currentpoint rot strsize fillrect moveto setcolor show 4 seteotchar pop } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Select n-th link. % % ( n ) ==> ( ) % /help.selectlink { help.selectedlink over eq { pop } { % deselect old link false help.selectedlink help.redrawlink /help.selectedlink over dup setlink def % select link true exch help.redrawlink } ifelse } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Select first visible link. % % No screen update if 'update' is false. % % ( update ) ==> ( ) % /help.sel.firstlink { getlinks { 0 1 getlinks 1 sub { dup getlink 4 1 roll pop pop pop dup help.startrow help.text.rows add ge { pop pop exit } if dup help.startrow ge { pop over { help.selectlink } { /help.selectedlink exch dup setlink def } ifelse exit } if pop pop } for } if pop } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Select last visible link. % % No screen update if 'update' is false. % % ( update ) ==> ( ) % /help.sel.lastlink { getlinks { getlinks 1 sub -1 0 { dup getlink 4 1 roll pop pop pop dup help.startrow lt { pop pop exit } if dup help.startrow help.text.rows add lt { pop over { help.selectlink } { /help.selectedlink exch dup setlink def } ifelse exit } if pop pop } for } if pop } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Push current help context to history. % % ( ) ==> ( ) % /help.add2history { help.hist.index help.hist.page length lt { help.hist.page help.hist.index help.currenttext put help.hist.startrow help.hist.index help.startrow put help.hist.selectedlink help.hist.index help.selectedlink put /help.hist.index help.hist.index 1 add def } if } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Follow currently selected link. % % ( ) ==> ( ) % /help.followlink { getlinks { help.selectedlink getlink pop pop pop help.add2history help.findpage dup "" eq { pop } { 0 0 help.initpage } ifelse } if } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Go back to previous page. % % ( ) ==> ( ) % /help.prevlink { help.hist.index 0 gt { /help.hist.index help.hist.index 1 sub def help.hist.page help.hist.index get help.hist.startrow help.hist.index get help.hist.selectedlink help.hist.index get help.initpage } if } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Scroll a page down. % % ( ) ==> ( ) % /help.key.pagedown { help.startrow gettextrows help.text.rows gt { pop gettextrows help.text.rows sub help.startrow help.text.rows add min } if dup help.startrow eq { pop true help.sel.lastlink } { /help.startrow exch def false help.sel.firstlink help.updatepage } ifelse } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Scroll a page up. % % ( ) ==> ( ) % /help.key.pageup { help.startrow gettextrows help.text.rows gt { pop 0 help.startrow help.text.rows sub max } if dup help.startrow eq { pop true help.sel.firstlink } { /help.startrow exch def false help.sel.firstlink help.updatepage } ifelse } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Go to page start. % % ( ) ==> ( ) % /help.key.home { help.startrow 0 eq { true help.sel.firstlink } { /help.startrow 0 def false help.sel.firstlink help.updatepage } ifelse } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Go to page end. % % ( ) ==> ( ) % /help.key.end { gettextrows help.text.rows sub 0 max dup help.startrow eq { pop true help.sel.lastlink } { /help.startrow exch def false help.sel.lastlink help.updatepage } ifelse } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Next link or scroll down. % % ( ) ==> ( ) % /help.key.down { help.selectedlink getlinks 1 sub lt { help.selectedlink 1 add getlink 4 1 roll pop pop pop dup help.startrow help.text.rows add lt { % link visible pop help.selectedlink 1 add help.selectlink return } { help.startrow help.text.rows add eq { % link visible after scrolling down /help.selectedlink help.selectedlink 1 add dup setlink def } if } ifelse } if % scroll down help.startrow help.text.rows add gettextrows lt { /help.startrow help.startrow 1 add def help.updatepage } if } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Previous link or scroll up. % % ( ) ==> ( ) % /help.key.up { help.selectedlink 0 gt { help.selectedlink 1 sub getlink 4 1 roll pop pop pop % row dup help.startrow ge { % link visible pop help.selectedlink 1 sub help.selectlink return } { help.startrow 1 sub eq { % link visible after scrolling up /help.selectedlink help.selectedlink 1 sub dup setlink def } if } ifelse } if % scroll up help.startrow 0 gt { /help.startrow help.startrow 1 sub def help.updatepage } if } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Handle keyboard input. % % ( key_in ) ==> ( key_out ) % /help.input { dup 0 eq { return } if dup keyEsc eq { /window.action actNothing def window.done } if dup keyCtrlDown eq { 1 help.test 0 0 help.initpage } if dup keyCtrlUp eq { -1 help.test 0 0 help.initpage } if dup keyDown eq { help.key.down } if dup keyUp eq { help.key.up } if dup keyPgDown eq { help.key.pagedown } if dup keyPgUp eq { help.key.pageup } if dup keyHome eq { help.key.home } if dup keyEnd eq { help.key.end } if dup keyRight eq { help.followlink } if dup keyEnter eq { help.followlink } if dup 0xff and ' ' eq { help.followlink } if dup keyLeft eq { help.prevlink } if dup 0xff and '\x08' eq { help.prevlink } if dup keyF1 eq { "help" help.findpage dup help.currenttext eq { pop } { help.add2history 0 0 help.initpage } ifelse } if % dup keyF9 eq { % /help.font help.font 8 add 10 mod def help.reinit % help.currenttext help.startrow help.selectedlink help.initpage % } if pop 0 } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Recalculate some sizes and redraw help screen. % % ( ) ==> ( ) % /help.reinit { help.normal.bg setcolor help.x help.y moveto help.width help.height fillrect help.x 1 add help.y 1 add help.title.height add moveto help.dark help.light help.width 2 sub help.height 2 sub help.title.height sub drawborder help.font setfont /help.text.rows help.text.height lineheight div def help.text.rows setmaxrows help.text.rightmargin settextwrap } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Initialize help window. % % ( window ) ==> ( ) % /help.init { /help.tmp exch def help.x 1 sub help.y 1 sub moveto help.light help.dark help.width 2 add help.height 2 add over over savescreen help.tmp .saved rot put drawborder help.reinit 4 seteotchar /help.hist.index 0 def /help.test.cnt 1 def help.context help.findpage 0 0 help.initpage } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Draw help window. % % ( window ) ==> ( ) % /help.show { window.push } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Close current help window. % % ( ) ==> ( ) % /help.done { 0 settextwrap 0 seteotchar 0 setmaxrows } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Create new help window. % % ( ) ==> ( window ) % /window.help { widget.size array dup .type t_help put dup .x help.x put dup .y help.y put } def % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Find help texts. % % ( ) ==> ( start_of_help_messages ) % % Note: must always return something (fake a message if necessary). % /help.getmessages { help.messages .undef eq { % load help texts /help.messages config.lang "%s.hlp" locale.findfile dup .undef eq { pop "en_US" "%s.hlp" locale.findfile } if dup .undef eq { pop "\x04\x12\x14No Help Texts\x10Sorry, no help texts found." } if cvs def } if help.messages } def href='#n240'>240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341
#!/usr/bin/perl -w
# Control-center
# Copyright (C) 2001 MandrakeSoft
# Yves Duret <yduret at mandrakesoft.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
use MDK::Common;
use Gtk;
use Config;
init Gtk;
use POSIX;
use lib qw(/usr/lib/libDrakX);
use interactive;
use standalone;
use any;
use bootloader;
use fs;
use my_gtk qw(:helpers :wrappers :ask);
$::isEmbedded = ($::XID, $::CCPID) = "@ARGV" =~/--embedded (\S*) (\S*)/;
if ($::isEmbedded) {
print "EMBED\n";
print "XID : $::XID\n";
print "CCPID : $::CCPID\n";
}
my $in = 'interactive'->vnew('su', 'default');
local $_ = join '', @ARGV;
/-h/ and die _("no help implemented yet.\n");
/-version/ and die 'version: $Id$'."\n";
my @winm;
my @usernames;
parse_etc_passwd();
my $x_mode = isXlaunched();
my $a_mode = (-e "/etc/aurora/Monitor") ? 1 : 0;
my $l_mode = isAutologin();
my %auto_mode = get_autologin("");
my $inmain = 0;
my $lilogrub = chomp_(`detectloader -q`);
my $window = $::isEmbedded ? new Gtk::Plug ($::XID) : new Gtk::Window ("toplevel");
$window->signal_connect(delete_event => sub { $::isEmbedded ? kill(USR1, $::CCPID) : Gtk->exit(0) });
$window->set_title(_("Boot Style Configuration") );
$window->border_width(2);
#$window->realize;
# drakX mode
my ($t_pixmap, $t_mask) = gtkcreate_png("tradi.png");
my ($h_pixmap, $h_mask) = gtkcreate_png("hori.png");
my ($v_pixmap, $v_mask) = gtkcreate_png("verti.png");
my ($g_pixmap, $g_mask) = gtkcreate_png("gmon.png");
my ($c_pixmap, $c_mask) = gtkcreate_png("categ.png");
# a pixmap widget to contain the pixmap
my $pixmap = new Gtk::Pixmap($h_pixmap, $h_mask);
### menus definition
# the menus are not shown
# but they provides shiny shortcut like C-q
my @menu_items = ( { path => _("/_File"), type => '<Branch>' },
{ path => _("/File/_Quit"), accelerator => _("<control>Q"), callback => sub { $::isEmbedded ? kill(USR1, $::CCPID) : Gtk->exit(0) } },
);
my $menubar = get_main_menu( $window );
######### menus end
my $user_combo = new Gtk::Combo;
$user_combo->set_popdown_strings(@usernames);
$user_combo->entry->set_text($auto_mode{autologin}) if ($auto_mode{autologin});
my $desktop_combo =new Gtk::Combo;
$desktop_combo->set_popdown_strings(get_wm());
$desktop_combo->entry->set_text($auto_mode{desktop}) if ($auto_mode{desktop});
my $a_c_button = new Gtk::RadioButton (_("NewStyle Categorizing Monitor"));
my $a_h_button = new Gtk::RadioButton _("NewStyle Monitor"), $a_c_button;
my $a_v_button = new Gtk::RadioButton _("Traditional Monitor"), $a_c_button;
my $a_g_button = new Gtk::RadioButton _("Traditional Gtk+ Monitor"),$a_c_button ;
my $a_button = new Gtk::CheckButton(_("Launch Aurora at boot time"));
my $a_box = new Gtk::VBox(0, 0);
my $x_box = new Gtk::VBox(0, 0);
gtkadd($window,
gtkpack__ (my $global_vbox = new Gtk::VBox(0,0),
gtkadd (new Gtk::Frame (_("Lilo/grub mode")),
gtkpack__(new Gtk::HBox(0, 0),
_("You are currently using %s as Boot Manager.
Click on Configure to launch the setup wizard.", $lilogrub),
gtksignal_connect(new Gtk::Button (_("Configure")), clicked => \&lilo_choice)
)
),
# aurora
gtkadd (new Gtk::Frame (_("Boot mode")),
gtkpack__ (new Gtk::HBox(0,0),
gtkpack__ (new Gtk::VBox(0, 5),
gtksignal_connect ($a_button, clicked => sub {
if ($inmain) {
$a_box->set_sensitive(!$a_mode);
$a_mode = !$a_mode;
if ($a_mode) {
$pixmap->set($c_pixmap, $c_mask) if $a_c_button->get_active();
$pixmap->set($h_pixmap, $h_mask) if $a_h_button->get_active();
$pixmap->set($v_pixmap, $v_mask) if $a_v_button->get_active();
$pixmap->set($g_pixmap, $g_mask) if $a_g_button->get_active();
} else {
$pixmap->set($t_pixmap, $t_mask);
}
}
}),
gtkpack__ ( gtkset_sensitive ($a_box, $a_mode),
gtksignal_connect ($a_c_button,clicked => sub{$pixmap->set($c_pixmap, $c_mask)}),
gtksignal_connect ($a_h_button,clicked => sub{$pixmap->set($h_pixmap, $h_mask)}),
gtksignal_connect ($a_v_button,clicked => sub{$pixmap->set($v_pixmap, $v_mask)}),
gtksignal_connect ($a_g_button,clicked => sub{$pixmap->set($g_pixmap, $g_mask)})
)
),
gtkpack__ (new Gtk::HBox(0,0), $pixmap)
)
),
# X
gtkadd (new Gtk::Frame (_("System mode")),
gtkpack__ (new Gtk::VBox(0, 5),
gtksignal_connect(gtkset_active(new Gtk::CheckButton (_("Launch the X-Window system at start")), $x_mode ), clicked => sub {
$x_box->set_sensitive(!$x_mode);
$x_mode = !$x_mode;
}),
gtkpack__ (gtkset_sensitive ($x_box, $x_mode),
gtkset_active($x_no_button = new Gtk::RadioButton (_("No, I don't want autologin")), !$l_mode),
gtkpack__ (new Gtk::HBox(0, 10),
gtkset_active($x_yes_button = new Gtk::RadioButton((_("Yes, I want autologin with this (user, desktop)")), $x_no_button), $l_mode),
gtkpack__ (new Gtk::VBox(0, 10),
$user_combo,
$desktop_combo
)
)
)
)
),
gtkadd (gtkset_layout(new Gtk::HButtonBox,-end),
gtksignal_connect(new Gtk::Button (_("OK")), clicked=>sub{updateInit();updateAutologin();updateAurora();$::isEmbedded ? kill(USR1,$::CCPID) : Gtk->exit(0)}),
gtksignal_connect(new Gtk::Button ($::isEmbedded ? _("Cancel") : _("Quit")), clicked => sub {$::isEmbedded ? kill(USR1, $::CCPID) : Gtk->exit(0)})
)
)
);
$a_button->set_active($a_mode); # up == false == "0"
if ($a_mode) {
my $a = readlink "/etc/aurora/Monitor";
$a =~ s#/lib/aurora/Monitors/##;
if ($a eq "NewStyle-Categorizing-WsLib") {$a_c_button->set_active(1); $pixmap->set($c_pixmap, $c_mask);}
if ($a eq "NewStyle-WsLib") {$a_h_button->set_active(1); $pixmap->set($h_pixmap, $h_mask);}
if ($a eq "Traditional-WsLib") {$a_v_button->set_active(1); $pixmap->set($v_pixmap, $v_mask);}
if ($a eq "Traditional-Gtk+") {$a_g_button->set_active(1); $pixmap->set($g_pixmap, $g_mask);}
} else {
$pixmap->set($t_pixmap, $t_mask);
}
$window->show_all();
Gtk->main_iteration while Gtk->events_pending;
$::isEmbedded and kill USR2, $::CCPID;
$inmain=1;
Gtk->main;
Gtk->exit(0);
#-------------------------------------------------------------
# get user names to put in combo
#-------------------------------------------------------------
sub parse_etc_passwd
{
my ($uname, $uid);
setpwent();
do {
@user_info = getpwent();
($uname, $uid) = @user_info[0,2];
push (@usernames, $uname) if ($uid > 500);
} while (@user_info);
}
sub get_wm
{
@winm = (split (' ', `/usr/sbin/chksession -l`));
}
#-------------------------------------------------------------
# menu callback functions
#-------------------------------------------------------------
sub print_hello {
print( "mcdtg !\n" );
}
sub get_main_menu {
my ( $window ) = @_;
my $accel_group = new Gtk::AccelGroup();
my $item_factory = new Gtk::ItemFactory( 'Gtk::MenuBar', '<main>', $accel_group );
$item_factory->create_items( @menu_items );
$window->add_accel_group( $accel_group );
return ( $item_factory->get_widget( '<main>' ) );
}
#-------------------------------------------------------------
# launch X functions
#-------------------------------------------------------------
sub isXlaunched {
my $line;
open INITTAB, "/etc/inittab" or die _("can not open /etc/inittab for reading: %s", $!);
while (<INITTAB>) {
if (/id:([1-6]):initdefault:/) { $line = $_; last; }
}
close INITTAB;
$line =~ s/id:([1-6]):initdefault:/$1/;
return ($line-3);
}
sub updateInit {
my $runlevel = ($x_mode) ? 5 : 3;
substInFile { s/^id:\d:initdefault:\s*$/id:$runlevel:initdefault:\n/ } "/etc/inittab";
}
#-------------------------------------------------------------
# aurora functions
#-------------------------------------------------------------
sub updateAurora {
if ($a_mode) {
if ($a_c_button->get_active()) {
symlinkf("/lib/aurora/Monitors/NewStyle-Categorizing-WsLib", "/etc/aurora/Monitor");
$in->do_pkgs->install(q(Aurora-Monitor-NewStyle-Categorizing-WsLib)) if !(-e "/lib/aurora/Monitors/NewStyle-Categorizing-WsLib");
}
if ($a_h_button->get_active()) {
symlinkf("/lib/aurora/Monitors/NewStyle-WsLib", "/etc/aurora/Monitor");
$in->do_pkgs->install(q(Aurora-Monitor-NewStyle-WsLib)) if !(-e "/lib/aurora/Monitors/NewStyle-WsLib");
}
if ($a_v_button->get_active()) {
symlinkf("/lib/aurora/Monitors/Traditional-WsLib", "/etc/aurora/Monitor");
$in->do_pkgs->install(q(Aurora-Monitor-Traditional-WsLib)) if !(-e "/lib/aurora/Monitors/Traditional-WsLib");
}
if ($a_g_button->get_active()) {
symlinkf("/lib/aurora/Monitors/Traditional-Gtk+", "/etc/aurora/Monitor");
$in->do_pkgs->install(q(Aurora-Monitor-Traditional-Gtk+)) if !(-e "/lib/aurora/Monitors/Traditional-Gtk+");
}
} else {
unlink "/etc/aurora/Monitor";
}
}
#-------------------------------------------------------------
# launch autologin functions
#-------------------------------------------------------------
sub isAutologin {
my $line;
open AUTOLOGIN, "/etc/sysconfig/autologin";
while (<AUTOLOGIN>) {
if (/AUTOLOGIN=(yes|no)/) { $line = $_; last; }
}
close AUTOLOGIN;
$line =~ s/AUTOLOGIN=(yes|no)/$1/;
chomp ($line);
$line = ($line eq "yes");
my %au = get_autologin('');
return ($line && defined $au{autologin});
}
sub get_autologin {
my ($prefix) = @_;
my %o;
my %l = getVarsFromSh("$prefix/etc/sysconfig/autologin");
$o{autologin} = $l{USER};
%l = getVarsFromSh("$prefix/etc/sysconfig/desktop");
$o{desktop} = $l{DESKTOP};
%o;
}
sub updateAutologin {
my ($usern,$deskt)=($user_combo->entry->get_text(), $desktop_combo->entry->get_text());
if ($x_yes_button->get_active()) {
$in->do_pkgs->install('autologin') if $x_mode;
set_autologin('',$usern,$deskt);
} else {
set_autologin('',undef) if ($x_no_button->get_active());
}
}
sub set_autologin {
my ($prefix, $user, $desktop) = @_;
output "$prefix/etc/sysconfig/desktop", uc($desktop), "\n" if $user;
setVarsInSh("$prefix/etc/sysconfig/autologin",
{ USER => $user, AUTOLOGIN => bool2yesno($user), EXEC => "/usr/X11R6/bin/startx" });
chmod 0600, "$prefix/etc/sysconfig/autologin";
# log::l("cat $prefix/etc/sysconfig/autologin: ", cat_("$prefix/etc/sysconfig/autologin"));
}
#-------------------------------------------------------------
# lilo/grub functions
#-------------------------------------------------------------
sub lilo_choice {
my $bootloader = bootloader::read('', '/etc/lilo.conf');
local ($_) = `detectloader`;
$bootloader->{methods} = { lilo => 1, grub => !!/grub/i };
my ($all_hds) = catch_cdie { fsedit::hds([ detect_devices::hds() ], {}) } sub { 1 };
my $fstab = [ fsedit::get_all_fstab($all_hds) ];
fs::merge_info_from_fstab($fstab);
$::expert=1;
ask:
local $::isEmbedded = 0;
any::setupBootloader($in, $bootloader, $all_hds, $fstab, $ENV{SECURE_LEVEL}) or return;
eval { bootloader::install('', $bootloader, $fstab, $all_hds->{hds}) };
if ($@) {
$in->ask_warn('',
[ _("Installation of LILO failed. The following error occured:"),
grep { !/^Warning:/ } cat_("/tmp/.error") ]);
unlink "/tmp/.error";
goto ask;
}
}