27

In 10.10 upstart is being used instead of sysvinit.

It's possible to remove annoying upstart services which you do not want by removing the appropriate file in /etc/init/blah.conf

However, this seems a heavy handed approach. How do you correctly configure upstart to be able to selectively turn these services on and off via the command line?

As a practical example, the answers listed here to turn gdm off using rcconf no longer work: How do I prevent GDM from running at boot on Ubuntu?

Doug
  • 450

6 Answers6

19

If you look in /etc/init.d you will notice that any services that are configured through upstart are just symbolic links to /lib/init/upstart so removing them from /etc/init.d just removes the link - not the script.

If you want an interface to this you can install the chkconfig package (apt-get install chkconfig) which gives a useful command line tool:

# chkconfig --list
acpi-support              0:off  1:off  2:on   3:on   4:on   5:on   6:off
acpid                     0:off  1:off  2:off  3:off  4:off  5:off  6:off
alsa-mixer-save           0:off  1:off  2:off  3:off  4:off  5:off  6:off
anacron                   0:off  1:off  2:off  3:off  4:off  5:off  6:off
apache2                   0:off  1:off  2:on   3:on   4:on   5:on   6:off
apparmor                  0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on 
apport                    0:off  1:off  2:off  3:off  4:off  5:off  6:off
atd                       0:off  1:off  2:off  3:off  4:off  5:off  6:off
.... and so on ....

You can enable / disable services for specific run-levels (or just turn them on and off) with:

# chkconfig -s <service> <state/runlevels>

for example:

# chkconfig -s gdm off

to turn it off completely,

# chkconfig -s gdm on

to turn it on with the defaultsm or

# chkconfig -s gdm 34

to only turn it on for run levels 3 and 4.

You'll usually find this command on RHEL based systems (CentOS, Fedora, etc).

UPDATE

This is specific to Ubuntu and gdm / kdm / whatever.

When gdm starts up it calls an upstart config file /etc/init/gdm.conf

This file then references /etc/X11/default-display-manager to see if it is the default display manager for the system - if it is then it starts.

The /etc/X11/default-display-manager just contains:

/usr/sbin/gdm

You can replace this with another display manager, or remove the file entirely and it won't start gdm.

A line from the /etc/init/gdm.conf file:

[ ! -f /etc/X11/default-display-manager -o "$(cat /etc/X11/default-display-manager 2>/dev/null)" = "/usr/sbin/gdm" ] || { stop; exit 0; }

It's saying "If the file /etc/X11/default-display-manager doesn't exist, or if it doesn't contain /usr/sbin/gdm then exit"

Majenko
  • 32,964
5

I've always found the sysv-rc-conf tool very helpful, it has a very nice & easy to use interface.

install it like this:

sudo apt-get update
sudo apt-get install sysv-rc-conf

use it like this:

sudo sysv-rc-conf
n0mad
  • 151
4

Simply take a look at man 5 init and you will find a more appropriate solution. Short example: Say we have a service called "foobar", so there would be a file called /etc/init/foobar.conf with its upstart configuration. Now you don't want to remove that file, nor to modify it -- but neither you want this service to run? So place an override file next to it: /etc/init/foobar.override, containing (optionally the header with the description and) instead the start on / stop on lines you place a line with one word: manual. This way you tell upstart to basically use the foobar.conf, but override the startup definition to only start that service when manually enforced (via service foobar start in our example).

Izzy
  • 3,775
2

My recommendation would be to simply comment out all "start on" and "stop on" lines. That worked well for me when I ran "initctl show-config" to see if the automatic startup of my program I wanted was disabled.

user35060
  • 141
1

Upstart is an event-driven init manager, and runlevels are not the primary mechanism for deciding when a service starts. Instead, services are started when all their dependencies are satisfied, which allows greater parallelism during boot, speeding up the boot process.

Using Ubuntu 11.04, I was able to disable GDM by editing the /etc/init/gdm.conf file, and removing all of the "start on" entries. Here is my pre-edit:

start on (filesystem
          and started dbus
          and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
               or stopped udev-fallback-graphics))
stop on runlevel [016]

Here is my post-edit:

start on
stop on runlevel [016]
1

Here's a solution:

http://ubuntuforums.org/showpost.php?p=9416839&postcount=3

@Matt Jenkins

I have never liked Ubuntu's startup - and Linux's in general. It has always seems so messy >and kludgy. Give me FreeBSD's rcng any day. Anyway - specific to Ubuntu's display manager >you have what my edit shows...

Arch Linux has a nice init system. However, systemd blows any other init system out of the planet.

Pawlo
  • 11