Fedora can be booted into different runlevels, each of which starts a specific collection of software for a particular purpose. The most commonly used are runlevel 3, which starts the system with a character-based user interface, and runlevel 5, which starts the system with a graphical user interface. Table 4-11 lists the standard runlevels.
Table 4-11. Standard runlevels
||Single-user maintenance mode||Emergency system recovery work|
|Halt||Stops the system|
|Single-user mode||System administration|
|(Multiuser without networking)||(Not normally used)|
|Multiuser, character-mode||Normal system operation without graphical login; useful for servers|
|(Not defined)||(Not normally used)|
|Graphical||Normal system operation with graphical login.|
|Reboot||Restarts the system|
7, 8, 9, a, b, c
|(Not defined)||Available for custom purposes|
The ability to choose the runlevel lets you save system resources (for example, by not running the graphical user interface when it isn’t needed) or start the system in a minimal configuration so that you can fix problems.
You can change the runlevel on the fly, or configure your system to start in a different runlevel.
Press a key (such as the spacebar) when the Fedora Core boot display appears. This will reveal the boot menu.
Select the Fedora Core boot option you wish to use using the arrow keys.
Press the letter a (Append). An edit display will appear that allows you to append information to the boot command line.
Add a space and then the runlevel to the end of the list of boot options (for example, press space then
3 to select runlevel 3).
If you have configured a GRUB password, you will be prompted to enter it before changing the boot options.
Take the following steps to change the runlevel after booting:
Obtain a root prompt using
Start vi with the /etc/inittab file:
Find this line in the file:
Change the second field to the default runlevel of your choice; in this case, I’ve used
Save the file and exit vi. The change will take effect next time you boot the system.
Obtain a root prompt.
Start vi with the /boot/grub/grub.conf:
The file will look something like this:
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,1) # kernel /vmlinuz-version ro root=/dev/Main/root # initrd /initrd-version.img #boot=/dev/hdc default=0 timeout=5 splashimage=(hd0,1)/grub/splash.xpm.gz hiddenmenu title Fedora Core (2.6.17-1.2517.fc6) root (hd0,1) kernel /vmlinuz-2.6.17-1.2517.fc6 ro root=/dev/Main/root rhgb quiet initrd /initrd-2.6.17-1.2517.fc6.img title Windows XP rootnoverify (hd0,0) chainloader +1
This example shows two Fedora Core entries for two different kernel versions. There may be additional entries for other operating systems (such as Windows) or additional kernels.
Find a Fedora Core entry (the bold lines in the example above)—usually, the one with the latest kernel. Make an identical copy of it immediately after the original location in the file:
title Fedora Core (2.6.17-1.2517.fc6) root (hd0,1) kernel /vmlinuz-2.6.17-1.2517.fc6 ro root=/dev/Main/root rhgb quiet initrd /initrd-2.6.17-1.2517.fc6.img title Fedora Core (2.6.17-1.2517.fc6) root (hd0,1) kernel /vmlinuz-2.6.17-1.2517.fc6 ro root=/dev/Main/root rhgb quiet initrd /initrd-2.6.17-1.2517.fc6.img
Change the description of the copied section to indicate the runlevel that will be used:
title Fedora Core (2.6.17-1.2517_fc6)
- Runlevel 3 - Character mode
On the kernel line, append the runlevel that you wish to use (this will override the default runlevel in /etc/inittab):
kernel /vmlinuz-2.6.17-1.2517.fc6 ro root=/dev/Main/root rhgb quiet
Optionally, change the
hiddenmenu options to suit your tastes.
default option specifies which of the menu entries is booted by default; the menu entries are numbered starting at
0, so you could set this line to
1 to boot the second item on the menu automatically:
timeout option sets the number of seconds that the menu will be displayed before the default option is automatically chosen. To give the user 30 seconds to decide which boot option to use, change the
timeout line to read:
hiddenmenu hides the menu until the user presses a key; remove the
hiddenmenu line to automatically reveal the menu every time the system is booted.
Save the file and exit vi. The new menu option will appear the next time you boot the system.
If a runlevel is specified in the kernel boot options, init uses that value for the runlevel; otherwise, it obtains a runlevel from the
initdefault line in /etc/inittab.
init then looks for a
sysinit entry in /etc/inittab and executes the command specified:
This executes the /etc/rc.d/rc.sysinit script, which performs some basic system setup common to all runlevels.
Next, init examines the /etc/inittab file, looking for entries that contain the current runlevel in the second field and
respawn in the third field. For runlevel 3, it will find these lines:
l3:3:wait:/etc/rc.d/rc 3 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6
The first line starts the script /etc/rc.d/rc with the argument
3. This in turn sequentially executes every script in /etc/rc.d/rc3.d that starts with the letter
S (for start); this is how runlevel-specific software and services get started. Scripts in that same directory that start with
K (for Kill) are used to stop software when switching from the runlevel.
The remaining lines listed start character-mode logins on virtual terminals 1 through 6; the
respawn keyword indicates that init must restart those programs when they terminate, enabling another user to log in.
If the file /etc/inittab doesn’t exist, init cannot start the system normally. Runlevel S was created specifically for this purpose; it’s the only runlevel that doesn’t require /etc/inittab, so it can be a lifesaver if that file is missing or messed up. In fact, init doesn’t even ask for a password in runlevel S; it takes you directly to a root command prompt. This is useful if you’ve forgotten the root password, but presents a huge security risk.
To protect against the unauthorized use of runlevel S, it’s a good idea to add a password entry to the boot menu. If you didn’t do this during the installation, you can add the password at any time by following these steps:
The previous line in bold is the encrypted (scrambled) version of the password.
Next, edit the /boot/grub/grub.conf file and add this line at the top, substituting the password generated in step 1:
When you boot the system, you will still be able to select a boot menu entry, but to perform any advanced operations (such as appending runlevel information to a boot entry) you will need to enter the password.
Just because runlevel 3 doesn’t offer a graphical login screen doesn’t mean that you can’t use a graphical user interface. If you log in on a character-mode display, you can start the GUI with this command:
To have the GUI start each time you log in, add this command to your ~/.bash_profile:
On a server, this gives you the best of both worlds: the GUI doesn’t consume any resources when it’s not in use, but it can be started quickly any time you need it—useful when you need to look up documentation on a web site, for example.