I've been using the BeagleBone Black as a headless web application server. For this purpose I don't want X Windows or GDM slowing the boot process and taking up precious resources. I looked around for ways to disable these processes and the top results were very very wrong and broken.

The factory-installed firmware of the BeagleBone Black uses systemd for starting services and managing runlevels instead of a more common sys-V style init.

*Deep Breath*

By default the BeagleBone Black has a symlink in /etc/systemd/system/default.target that points to /lib/systemd/system/graphical.target this graphical.target file needs display-manager.service which then is a symlink to /lib/systemd/system/gdm.service.

Systemd looks at the default.target symlink as the root service for starting up all other systems and services; it is the default "runlevel", if you will. The systemd FAQ says as much and shows you how you can change the default target by changing the symlink, but there is an easier way.

systemctl enable multi-user.target

systemctl will look at the [Install] section in multi-user.target and see that it has an Alias=deault.target which tells it to create the /etc/systemd/system/default.target symlink when it is enabled. This will overwrite the symlink to graphical.target and when your system reboots the default "runlevel" will be "multi-user" which is all services except the GUI.

It boots much quicker!