#!/usr/bin/perl # Filename: grml-quickconfig # Purpose: get fast access to some basic grml-scripts # Authors: Michael Schierl , Alexander Wirt # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. # Latest change: Mon Dez 17 22:31:30 CET 2007 [mika] ################################################################################ # menu with quick config options use Term::ReadKey; use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK); # enable alternate charset support (needed for screen) print "\e(B\e)0"; open (my $fh, '/proc/cmdline'); my $cmdline = <$fh>; close($fh); my $color = 1 unless $cmdline =~ /nocolor/; # variables for nice display if ($color) { $W = "\e[0;32;1m"; # White $N = "\x0f\e[0m"; # Normal $M = "\e[0;35;1m"; # Magenta (for commands) $B = "\e[0;34;1m\x0e"; # Blue, line drawing characters } else { $B = "\x0e"; $N = "\x0f"; } $HLINE=$B."x".$N; # A single horizontal line drawing character # menu options %menu_commands = ( d => 'grml-lang de', a => 'grml-lang at', c => 'grml-lang ch', u => 'grml-lang us', n => 'grml-network', e => 'netcardconfig', i => 'grml-info', h => 'grml2hd', m => 'pdmenu -c', q => 'exit', # x and Return are handled manually ); # window managers %windowmanagers = ( d => 'dwm', e => 'evilwm', f => 'fluxbox', v => 'fvwm', 2 => 'fvwm2', c => 'fvwm-crystal', o => 'openbox', k => 'pekwm', p => 'pwm3', r => 'ratpoison', t => 'twm', 9 => 'w9wm', w => 'windowlab', i => 'wmii', n => 'wm-ng', ); sub getKey { print "Press a key: ".$M; ReadMode 4; # Turn off controls keys # HACK: this is necessary because startx/Xorg sets the console where it outputs # to non-blocking mode $flags = fcntl(STDIN, F_GETFL, 0) or die "Can't get flags for STDIN: $!\n"; $flags = fcntl(STDIN, F_SETFL, $flags & ~O_NONBLOCK) or die "Can't set flags for STDIN: $!\n"; while (not defined ($x = ReadKey(0))) {} ReadMode 0; # Reset tty mode before exiting return $x; } # main loop while(1) { # main loop $command=""; while($command eq "") { print <<"EOF"; ${B}lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk${N} $HLINE Welcome to ${M}grml-quickconfig${M} $HLINE $HLINE Press a highlighted key to perform an action, or press $HLINE $HLINE ${W}Return${N} or ${W}q${N} to go back to the shell. $HLINE ${B}tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu${N} $HLINE Set keyboard layout (${M}grml-lang${N}): ${W}d${N}e ${W}a${N}t ${W}c${N}h ${W}u${N}s $HLINE $HLINE Configure ${W}n${N}etwork (${M}grml-network${N}) $HLINE $HLINE -> Configure ${W}e${N}thernet card directly (${M}netcardconfig${N}) $HLINE ${B}tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu${N} $HLINE Show ${W}i${N}nformation about grml (${M}grml-info${N}) $HLINE $HLINE Start ${W}x${N} (${M}grml-x${N}) $HLINE $HLINE Show an application ${W}m${N}enu (${M}pdmenu${N}) $HLINE $HLINE Install grml to ${W}h${N}ard disk (${M}grml2hd${N}) $HLINE ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N} EOF $x = getKey(); print $N.$/.$/; if (defined($menu_commands{$x})) { $command = $menu_commands{$x}; } elsif ($x eq "\n" || $x eq ' ') { $command= 'exit'; } elsif ($x eq "x") { print <<"EOF"; ${B}lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk${N} $HLINE Select a window manager (unsorted list): $HLINE $HLINE Press any other key to return to the main menu. $HLINE ${B}tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu${N} $HLINE ${W}d${N}wm ${W}e${N}vilwm ${W}f${N}luxbox f${W}v${N}wm fvwm${W}2${N} fvwm-${W}c${N}rystal ${W} ${N}$HLINE $HLINE ${W}o${N}penbox pe${W}k${N}wm ${W}p${N}wm3 ${W}r${N}atpoison ${W}t${N}wm w${W}9${N}wm ${W}w${N}indowlab ${N}$HLINE $HLINE wm${W}i${N}i wm-${W}n${N}g ${N}$HLINE ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N} EOF $x = getKey(); print $N.$/.$/; if (defined($windowmanagers{$x})) { $command = "su - grml -c 'grml-x ".$windowmanagers{$x}."'"; } else { print "Unknown key, not bound to a windowmanager.\n"; print "Returning to main menu.\n"; } } else { print "Unknown key.\n"; } } # reenable input buffering system "stty", 'icanon', 'eol', '^@'; if ($command eq "exit") { last; } print $W . "Running command: " . $M . $command . $N . $/; system($command); print $/; } print "Happy hacking!\n"; ## END OF FILE ################################################################# # vim: ai expandtab ft=perl