On Tuesday 25 August 2009 11:54:21 pm David C. Rankin wrote:
On Tuesday 25 August 2009 09:51:50 pm Sven-Hendrik Haase wrote:
There are multiple ways: You can put "default 2" at the very top of your menu.lst which will always select the 2nd entry (0-based) by default. Another and maybe more modern way to do it is to add "default saved" at the top and then add "savedefault" below each individual entry. This way, Grub will always select the last selected entry.
Sven,
Thanks, sorry, I know all that. I'm looking for a quick command that does NOT alter the menu.lst file, but sets some type of flag that tells grub do NOT boot the default entry, instead, boot entry 5.
I know there is something in kde4 that will do it because when you hold-down the Restart option, you can set the next OS you want to boot if you have more than 1 entry in menu.lst. Ever hear of anything like that for Arch?
With grubonce, you just enter grubonce (without arguments) and it returns a list of what is in your menu.lst file:
[23:52 dcrgx/home/david/scripts/file] # grubonce 0: openSUSE 11.0 - 2.6.25.20-0.5 1: Failsafe -- openSUSE 11.0 - 2.6.25.20-0.5 2: openSUSE 11.1 - 2.6.27.19-3.2 (/dev/sdb1) 3: Windows
Then all you have to do is issue the command:
# grubonce 2
and you will boot suse 11.1 next time. That's what I'm looking for. I'll keep digging.
A, hah! Should have checked in the first place. suse just uses a script. Here it is: #!/usr/bin/perl # Keep this sort of configurable for the future. $GRUBDIR="/boot/grub"; # Parse the menu file, and see if we can get a match for a maybe given arg. open(MENU, "<$GRUBDIR/menu.lst") || die "no menu.lst in $GRUBDIR"; $gotit = 0; $titleno = -1; $global_default = undef; while(<MENU>) { m,\s*default\s+(.+), && $titleno == -1 && ($global_default = $1); next unless m,\s*title\s+(.*),i; $title_name = $1; $titleno++; if (@ARGV > 0) { # Argument may be entirely numerical, in which case it is an index, # or a perl RE that leads to the first title matching. if (( $ARGV[0] =~ m,^[0-9]+$, && $titleno eq $ARGV[0] ) || ( $ARGV[0] !~ m,^[0-9]+$, && $title_name =~ m,$ARGV[0],i) ) { $gotit = 1; last; } } else { print "$titleno: $title_name\n"; } } close(MENU); print "Warning: you haven't set a global default!\n" if !defined($global_default); # Without a command line argument, we have now listet the titles and are done. exit 0 if @ARGV < 1; # Else the user wants to write the default file. We have better found a match! if ($gotit > 0) { print "Warning: your global default is 'saved'; changing default permanently!" if $global_default eq "saved"; print "Using entry #$titleno: $title_name\n"; # set the magic one-time flag $titleno |= 0x4000; open(DEFFILE, ">$GRUBDIR/default") || die "Cannot open default file for writing"; $buf = $titleno . "\0" . "\n" x 9; syswrite(DEFFILE, $buf, 10); close(DEFFILE); exit 0; } else { print $ARGV[0] . " not found in $GRUBDIR/menu.lst\n"; exit 1; } -- David C. Rankin, J.D.,P.E. Rankin Law Firm, PLLC 510 Ochiltree Street Nacogdoches, Texas 75961 Telephone: (936) 715-9333 Facsimile: (936) 715-9339 www.rankinlawfirm.com