summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/keyboarddrake
blob: 01f99809d01f87991c35446a96a254e85d3ec182 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl

use lib qw(/usr/lib/libDrakX);


use interactive;
use keyboard;
use standalone;
use Xconfigurator_consts;
use common qw(:system);
use c;

local $_ = join '', @ARGV;

/-h/ and die _("usage: keyboarddrake [--expert] [keyboard]\n");

$::expert = /-expert/;

my ($keyboard) = grep { !/^-/ } @ARGV;

my $in = interactive->vnew('su');

$keyboard ||= $in->ask_from_listf_(_("Keyboard"),
				   _("Please, choose your keyboard layout."),
				   \&keyboard::keyboard2text,
				   [ keyboard::xmodmaps() ],
				   keyboard::read());

keyboard::keyboard2text($keyboard) or die "bad keyboard $keyboard\n";

my $isNotDelete = $::expert && !$in->ask_yesorno("BackSpace", _("Do you want the BackSpace to return Delete in console?"), 1);

my $kmap = keyboard::keyboard2kmap($keyboard);
`loadkeys $kmap`;

my $xkb = keyboard::keyboard2xkb($keyboard);
`setxkbmap $xkb`;

my $f = "/etc/X11/XF86Config";
my $g = "/etc/X11/XF86Config-4";

substInFile {
    if (/^Section\s+"Keyboard"/ .. /^EndSection/) {
	s|^(\s*XkbLayout\s+).*|$1"$xkb"| 
	  and $_ .= join '', map { "    $_\n" } @{$xkb_options{$xkb} || []};
	s,^(\s*(XkbVariant|XkbOptions)\s+).*,,; # remove existing one
    }
} $f if -e $f && !$::testing;

substInFile {
    if (/Identifier\s+"Keyboard1"/ .. /^EndSection/) {
	s|^(\s*Option\s+"XkbLayout"\s+).*|$1"$xkb"| 
	  and $_ .= join '', map { /(\S+)(.*)/; qq(    Option "$1" $2\n) } @{$xkb_options{$xkb} || []};
	s,^(\s*Option\s+"(XkbVariant|XkbOptions)"\s+).*,,; # remove existing one
    }
} $g if -e $g && !$::testing;

keyboard::write('', $keyboard, $isNotDelete);

$in->exit(0);
ackage install_steps_auto_install; # $Id$ use diagnostics; use strict; use vars qw(@ISA $graphical @graphical_steps); @ISA = qw(install_steps); #-###################################################################################### #- misc imports #-###################################################################################### use common; use install_steps; sub new { my ($type, $o) = @_; # Handle legacy options $o->{interactive} ||= 'gtk' if $graphical || !is_empty_array_ref($o->{interactiveSteps}); push @{$o->{interactiveSteps}}, qw(installPackages exitInstall configureNetwork), @graphical_steps; if ($o->{interactive}) { my $interactiveClass = "install_steps_$o->{interactive}"; require "$interactiveClass.pm"; @ISA = ($interactiveClass, @ISA); foreach my $f (@{$o->{orderedSteps}}) { $o->{steps}{$f}{auto} = 1 if !member($f, @{$o->{interactiveSteps}}); } goto &{$::{$interactiveClass . "::"}{new}}; } else { @ISA = ('install_steps_auto_install_non_interactive', @ISA); (bless {}, ref($type) || $type)->install_steps::new($o); } } sub configureNetwork { my ($o) = @_; log::l("install_steps_auto_install::configureNetwork"); modules::load_category($o->{modules_conf}, 'network/main|gigabit|usb'); goto &install_steps::configureNetwork; } sub exitInstall { my ($o, $alldone) = @_; return if $o->{autoExitInstall}; if ($o->{interactive}) { $o->SUPER::exitInstall($alldone); } else { install_steps::exitInstall($o); print "\a"; print "Auto installation complete (the postInstall is not done yet though)\n"; print "Press <Enter> to reboot\n"; <STDIN>; } } #-###################################################################################### #- install_steps_auto_install_non_interactive package #-###################################################################################### package install_steps_auto_install_non_interactive; use install_steps; use lang; use modules; use common; use log; sub enteringStep { my ($o, $step) = @_; my ($s, $t) = (N_("Entering step `%s'\n"), $o->{steps}{$step}{text}); ($s, $t) = (translate($s), translate($t)) if $ENV{LANG} !~ /ja|ko|zh/; print sprintf($s, $t); $o->install_steps::enteringStep($step); } sub rebootNeeded { my ($o) = @_; errorInStep($o, <<EOF); While partitioning, the partition table re-read failed, needing a reboot This is plain wrong for an auto_install EOF } sub ask_warn { log::l(ref($_[1]) ? join " ", @{$_[1]} : $_[1]); } sub wait_message { my ($_o, $_title, $_message) = @_; } sub charsetChanged { my ($o) = @_; lang::load_console_font($o->{locale}); } sub errorInStep { my ($_o, $err) = @_; print "error :(\n"; print "$err\n\n"; print "switch to console f2 for a shell\n"; print "Press <Enter> to reboot\n"; my $answer = <STDIN>; if ($answer =~ /restart/i) { log::l("restarting install"); c::_exit(0x35); } c::_exit(0); } #-###################################################################################### #- Steps Functions #-###################################################################################### sub installPackages { my ($o, $packages) = @_; catch_cdie { $o->install_steps::installPackages($packages) } sub { print formatError($@), "\n"; 1 }; } 1;