Yeah, I'm not sure why Ubuntu did away with inittab (I know some groups want to use event.d as the new method). That is something worth research, and I might just do that. But either way, they did...they moved everything into /etc/event.d to control their runlevel scripts.
If you look at /etc/event.d, inside that directory is a file called "rc-default"
The code inside says:
# rc - runlevel compatibility
#
# This task guesses what the "default runlevel" should be and starts the
# appropriate script.
start on stopped rcS
script
runlevel --reboot || true
if grep -q -w -- "-s\|single\|S" /proc/cmdline; then
telinit S
elif [ -r /etc/inittab ]; then
RL="$(sed -n -e "/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}" /etc/inittab || true)"
if [ -n "$RL" ]; then
telinit $RL
else
telinit 2
fi
else
telinit 2
fi
end script
That is telling Ubuntu to enter into runlevel 2 at start up. Sweet...so we now know what runlevel it will boot up to at start, but now how do we kill off the GUI?
Inside the /etc/rc2.d directory (the directory that init will read and start up all scripts listed inside) you'll see the display manager call...usually looks like:
root@kryptikos:/etc/rc2.d# ls
README S20apport S50avahi-daemon S70dns-clean S99laptop-mode
S01policykit S20dkms_autoinstaller S50cups S70pppd-dns S99ondemand
S10acpid S20hotkey-setup S50NetworkManager S89anacron S99rc.local
S10apmd S20powernowd S50pulseaudio S89atd S99rmnologin
S10powernowd.early S20winbind S50rsync S89cron S99stop-readahead
S10sysklogd S24hal S50saned S90binfmt-support
S11klogd S25bluetooth S50system-tools-backends S98usplash
S12dbus [b] S30gdm [/b] S70bootlogs.sh S99acpi-support
If you check the README file in that directory it says to change the "S" to a "K"
The scripts in this directory are executed each time the system enters
this runlevel.
The scripts are all symbolic links whose targets are located in
/etc/init.d/ .
[b]To disable a service in this runlevel, rename its script in this directory
so that the new name begins with a 'K' and a two-digit number, where the
number is the difference between the two-digit number following the 'S'
in its current name, and 100. To re-enable the service, rename the script
back to its original name beginning with 'S'.[/b]
For a more information see /etc/init.d/README.
So the quickest way is to issue the command:
mv /etc/rc2.d/S30gdm /etc/rc2.d/K30gdm
I know that answer is a little longer than probably needed, but it gives a good background :)