# systemd

Cockpit uses systemd and the DBus APIs it provides to configure and monitor core aspects of the system. Use of alternate system APIs are not currently implemented.

For non root users, systemd controls access to its APIs via Policy Kit and a user logged into Cockpit will have the same permissions as they do from the command line.

Cockpit retrieves information about the host and changes the hostname via the `hostnamed` daemon. To perform similar tasks from the command line use the `hostnamectl` command:

    $ hostnamectl
       Static hostname: pink.example.com
       Pretty hostname: Pink
             Icon name: computer-desktop
               Chassis: desktop
            Machine ID: ef00b79be229463cbb844c3e715de96c
               Boot ID: 934983d64d34465cb5a8383b5a89ad8c
      Operating System: Fedora 22 (Twenty Two)
           CPE OS Name: cpe:/o:fedoraproject:fedora:22
                Kernel: Linux 4.0.4-301.fc22.x86_64
          Architecture: x86-64

Cockpit configures the system time and time zone via the `timedated` daemon. To perform similar tasks from the command line use the `timedatectl` command:

    $ timedatectl list-timezones
    Africa/Abidjan
    Africa/Accra
    Africa/Addis_Ababa
    Africa/Algiers
    ...

Cockpit can manage the list of NTP servers used by `systemd-timesyncd` by putting its own file into `/etc/systemd/timesyncd.conf.d/`. Note that `systemd-timesyncd` is not always enabled, depending on the configuration of the machine. In that case, Cockpit disabled the UI for managing the list of NTP servers. In some cases use of `ntpd` can cause the `timedated` daemon to behave inconsistently with regards to time synchronization.

Cockpit reboots or powers down the machine by using the `shutdown` command. To perform similar tasks from the command line, run it directly:

    $ sudo shutdown +15
    Shutdown scheduled for Sa 2015-09-26 15:49:40 CEST, use 'shutdown -c' to cancel.

Cockpit manages system services and sockets via systemd. To perform similar tasks from the command line use the `systemctl` command:

    $ systemctl status cockpit
    ● cockpit.service - Cockpit Web Service
       Loaded: loaded (/usr/lib/systemd/system/cockpit.service; static; vendor preset: disabled)
      Drop-In: /etc/systemd/system/cockpit.service.d
               └─debug.conf
       Active: active (running) since Sa 2015-09-26 13:28:02 CEST; 2h 7min ago
         Docs: man:cockpit-ws(8)
     Main PID: 6957 (cockpit-ws)
       Memory: 1.8M
       CGroup: /system.slice/cockpit.service
               ├─ 6957 /usr/libexec/cockpit-ws
               └─29598 /usr/bin/ssh-agent

In order to customize who can perform various actions in system, create polkit rules with the following actions and details:

`org.freedesktop.systemd1.manage-units`

  Permission to manage system services or other units. Details available: `unit`, `verb`

`org.freedesktop.systemd1.manage-unit-files`

  Permission to manage system services or other unit files.

`org.freedesktop.systemd1.reload-daemon`

  Permission to reload the systemd state.

For example, placing the following polkit rule to `/etc/polkit-1.rules.d/10-http.rule` allows all users in the `operators` group start, stop, and restart the Apache HTTP service:

    polkit.addRule(function(action, subject) {
        if (action.id == "org.freedesktop.systemd1.manage-units") {
            if (subject.isInGroup("operators") && action.lookup("unit") == "httpd.service") {
                var verb = action.lookup("verb");
                if (verb == "start" || verb == "stop" || verb == "restart") {
                    return polkit.Result.YES;
                }
            }
        }
    });