#!/usr/bin/perl use lib qw(/usr/lib/libDrakX); use standalone; #- warning, standalone must be loaded very first, for 'explanations' use interactive; use keyboard; use Xconfig::xfree; use common; use any; use c; local $_ = join '', @ARGV; /-h/ and die _("usage: keyboarddrake [--expert] [keyboard]\n"); $::expert = /-expert/; my $in; my $keyboard = keyboard::read(); if (my ($kb) = grep { !/^-/ } @ARGV) { keyboard::KEYBOARD2text($kb) or die "bad keyboard $kb\n"; $keyboard->{KEYBOARD} = $kb; } else { $in = 'interactive'->vnew('su', 'keyboard'); begin: $::isEmbedded and kill 'USR2', $::CCPID; choose: $keyboard->{KEYBOARD} = $in->ask_from_listf(_("Keyboard"), _("Please, choose your keyboard layout."), \&keyboard::KEYBOARD2text, [ keyboard::KEYBOARDs() ], $keyboard->{KEYBOARD}) or goto end; any::keyboard_group_toggle_choose($in, $keyboard) or goto choose; } if ($::expert) { my $isNotDelete = !$in->ask_yesorno("BackSpace", _("Do you want the BackSpace to return Delete in console?"), 1); $keyboard->{BACKSPACE} = $isNotDelete ? "BackSpace" : "Delete"; } my $xkb = keyboard::keyboard2full_xkb($keyboard); system('setxkbmap', '-option', '') if $xkb->{XkbOptions}; #- need re-initialised other toggles are cumulated system('setxkbmap', $xkb->{XkbLayout}, '-model', $xkb->{XkbModel}, '-option', $xkb->{XkbOptions} || ''); eval { my $xfree_conf = Xconfig::xfree->read; $xfree_conf->set_keyboard($xkb); $xfree_conf->write; }; keyboard::write($keyboard); system('/etc/init.d/keytable', 'restart'); end: if ($::isEmbedded) { kill('USR1', $::CCPID); $keyboard = ''; goto begin; } else { $in->exit(0) if $in; }