-0.7.6 (11/??/2013):
+0.7.6 (12/??/2013):
-------------------
+- Added support for a blank-screen startup: Set "screensaver -1" and the
+ screen saver will be initialized when rEFInd starts. If you set a low
+ "timeout" value, the result will be a boot straight to the default OS
+ unless you hit a key soon after rEFInd starts. Once you hit a key, the
+ screensaver will be disabled.
+
+- Modified install.sh and mkrlconf.sh to create a new Linux kernel
+ option set: "Boot without EFI storage paranoia," which passes the
+ efi_no_storage_paranoia option to the kernel.
+
- Added --ownhfs {target} option to install.sh. This option causes rEFInd
to install to an HFS+ partition in a way that's more consistent with the
way the Mac's native boot loader is installed. Note that you should NOT
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 3/14/2012; last Web page update:
-11/10/2013, referencing rEFInd 0.7.5</p>
+12/14/2013, referencing rEFInd 0.7.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
<tr>
<td><tt>screensaver</tt></td>
<td>numeric value</td>
- <td>Sets the number of seconds of inactivity before the screen blanks to prevent burn-in. The display returns after most keypresses (unfortunately, not including modifiers such as Shift, Control, Alt, or Option). The default is <tt>0</tt>, which disables this feature.</td>
+ <td>Sets the number of seconds of inactivity before the screen blanks to prevent burn-in. The display returns after most keypresses (unfortunately, not including modifiers such as Shift, Control, Alt, or Option). The default is <tt>0</tt>, which disables this feature. Setting this token to <tt>-1</tt> causes a blank display until the <tt>timeout</tt> value passes or you press a key.</td>
</tr>
<tr>
<td><tt>hideui</tt></td>
<td>none or <tt>0</tt></td>
<td>When set, causes rEFInd to add Linux kernels (files with names that begin with <tt>vmlinuz</tt> or <tt>bzImage</tt>) to the list of EFI boot loaders, even if they lack <tt>.efi</tt> filename extensions. The hope is that this will simplify use of rEFInd on distributions that provide kernels with EFI stub loader support but that don't give those kernels names that end in <tt>.efi</tt>. Of course, the kernels must still be stored on a filesystem that rEFInd can read, and in a directory that it scans. (<a href="drivers.html">Drivers</a> and the <tt>also_scan_dirs</tt> options can help with those issues.) Note that this option can cause unwanted files to be improperly detected and given loader tags, such as older kernels without EFI stub loader support. Versions of rEFInd prior to 0.5.0 left this option commented out in the <tt>refind.conf-sample</tt> file, but as of version 0.5.0, this option is enabled in the default configuration file. The program default remains to not scan for such kernels, though, so you can delete or uncomment this option to keep them from appearing in your boot menu. Passing any option but <tt>0</tt> causes scans for all kernels to occur; passing a <tt>0</tt> causes these kernels to not be scanned. (This could be useful if you want to override a setting of <tt>scan_all_linux_kernels</tt> in an included secondary configuration file.)</td>
</tr>
+<tr>
+ <td><tt>max_tags</tt></td>
+ <td>numeric (integer) value</td>
+ <td>Limits the number of tags that rEFInd will display at one time. If rEFInd discovers more loaders than this value, they're shown in a scrolling list. The default value is <tt>0</tt>, which imposes no limit.</td>
+</tr>
<tr>
<td><tt>default_selection</tt></td>
<td>a substring of a boot loader's title; or a numeric position</td>
and/or initial RAM disks relative to the rEFInd directory (or the
boot loader's directory, in the case of initrds).</li>
+ <li>Currently the background for certain subscreens (such as the
+ information page or submenu listings) is a solid color based on the
+ upper-left corner of the screen. Having an option to support a
+ transparent background is desirable to some users.</li>
+
</ul></li> <!-- Improvements -->
<li><b>Known bugs that need squashing:</b>
fi
fi
DefaultOptions="$GRUB_CMDLINE_LINUX $GRUB_CMDLINE_LINUX_DEFAULT"
- echo "\"Boot with standard options\" \"ro root=$RootFS $DefaultOptions \"" > $RLConfFile
- echo "\"Boot to single-user mode\" \"ro root=$RootFS $DefaultOptions single\"" >> $RLConfFile
- echo "\"Boot with minimal options\" \"ro root=$RootFS\"" >> $RLConfFile
+ echo "\"Boot with standard options\" \"ro root=$RootFS $DefaultOptions \"" > $RLConfFile
+ echo "\"Boot to single-user mode\" \"ro root=$RootFS $DefaultOptions single\"" >> $RLConfFile
+ echo "\"Boot without EFI storage paranoia\" \"ro root=$RootFS $DefaultOptions efi_no_storage_paranoia\"" >> $RLConfFile
+ echo "\"Boot with minimal options\" \"ro root=$RootFS\"" >> $RLConfFile
fi
}
fi
fi
DefaultOptions="$GRUB_CMDLINE_LINUX $GRUB_CMDLINE_LINUX_DEFAULT"
- echo "\"Boot with standard options\" \"ro root=$RootFS $DefaultOptions \"" > $RLConfFile
- echo "\"Boot to single-user mode\" \"ro root=$RootFS $DefaultOptions single\"" >> $RLConfFile
- echo "\"Boot with minimal options\" \"ro root=$RootFS\"" >> $RLConfFile
+ echo "\"Boot with standard options\" \"ro root=$RootFS $DefaultOptions \"" > $RLConfFile
+ echo "\"Boot to single-user mode\" \"ro root=$RootFS $DefaultOptions single\"" >> $RLConfFile
+ echo "\"Boot without EFI storage paranoia\" \"ro root=$RootFS $DefaultOptions efi_no_storage_paranoia\"" >> $RLConfFile
+ echo "\"Boot with minimal options\" \"ro root=$RootFS\"" >> $RLConfFile
else
echo "Existing $RLConfFile found! Not overwriting!"
echo "To force overwriting, pass the --force option."
# about - an "about this program" option
# exit - a tag to exit from rEFInd
# shutdown - shuts down the computer (a bug causes this to reboot
-# EFI systems)
+# many UEFI systems)
# reboot - a tag to reboot the computer
# firmware - a tag to reboot the computer into the firmware's
# user interface (ignored on older computers)
// handle a parameter with a single integer argument
static VOID HandleInt(IN CHAR16 **TokenList, IN UINTN TokenCount, OUT UINTN *Value)
{
- if (TokenCount == 2)
- *Value = Atoi(TokenList[1]);
+ if (TokenCount == 2) {
+ if (StriCmp(TokenList[1], L"-1") == 0)
+ *Value = -1;
+ else
+ *Value = Atoi(TokenList[1]);
+ }
}
// handle a parameter with a single string argument
// override the starting selection with the default index, if any
if (*DefaultEntryIndex >= 0 && *DefaultEntryIndex <= State.MaxIndex) {
State.CurrentSelection = *DefaultEntryIndex;
- UpdateScroll(&State, SCROLL_NONE);
+ if (GlobalConfig.ScreensaverTime != -1)
+ UpdateScroll(&State, SCROLL_NONE);
}
- State.PaintAll = TRUE;
+ if (GlobalConfig.ScreensaverTime != -1)
+ State.PaintAll = TRUE;
while (!MenuExit) {
// update the screen
- if (State.PaintAll) {
+ if (State.PaintAll && (GlobalConfig.ScreensaverTime != -1)) {
StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_ALL, NULL);
State.PaintAll = FALSE;
} else if (State.PaintSelection) {
CurrentTime = (TimeoutCountdown + 5) / 10;
if (CurrentTime != PreviousTime) {
SPrint(TimeoutMessage, 255, L"%s in %d seconds", Screen->TimeoutText, CurrentTime);
- StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_TIMEOUT, TimeoutMessage);
+ if (GlobalConfig.ScreensaverTime != -1)
+ StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_TIMEOUT, TimeoutMessage);
PreviousTime = CurrentTime;
}
}
// the user pressed a key, cancel the timeout
StyleFunc(Screen, &State, MENU_FUNCTION_PAINT_TIMEOUT, L"");
HaveTimeout = FALSE;
+ if (GlobalConfig.ScreensaverTime == -1) { // cancel start-with-blank-screen coding
+ GlobalConfig.ScreensaverTime = 0;
+ if (!GlobalConfig.TextOnly)
+ BltClearScreen(TRUE);
+ }
}
// react to key press
PrepareBlankLine();
// show the banner if in text mode
- if (GlobalConfig.TextOnly)
+ if (GlobalConfig.TextOnly && (GlobalConfig.ScreensaverTime != -1))
DrawScreenHeader(L"Initializing...");
}
// clear screen and show banner
// (now we know we'll stay in graphics mode)
SwitchToGraphics();
- BltClearScreen(TRUE);
+ if (GlobalConfig.ScreensaverTime != -1) {
+ BltClearScreen(TRUE);
+ } else { // start with screen blanked
+ GraphicsScreenDirty = TRUE;
+ }
}
} // VOID SetupScreen()
{
static EG_IMAGE *Banner = NULL, *CroppedBanner;
INTN BannerPosX, BannerPosY;
+ EG_PIXEL Black = { 0x0, 0x0, 0x0, 0 };
if (ShowBanner && !(GlobalConfig.HideUIFlags & HIDEUI_FLAG_BANNER)) {
// load banner on first call
}
// clear and draw banner
- egClearScreen(&MenuBackgroundPixel);
+ if (GlobalConfig.ScreensaverTime != -1)
+ egClearScreen(&MenuBackgroundPixel);
+ else
+ egClearScreen(&Black);
+
if (Banner != NULL) {
BannerPosX = (Banner->Width < UGAWidth) ? ((UGAWidth - Banner->Width) / 2) : 0;
BannerPosY = (INTN) (ComputeRow0PosY() / 2) - (INTN) Banner->Height;
if (BannerPosY < 0)
BannerPosY = 0;
GlobalConfig.BannerBottomEdge = BannerPosY + Banner->Height;
- BltImage(Banner, (UINTN) BannerPosX, (UINTN) BannerPosY);
+ if (GlobalConfig.ScreensaverTime != -1)
+ BltImage(Banner, (UINTN) BannerPosX, (UINTN) BannerPosY);
}
} else {