Skip to content
The systemd project's "logind", extracted to a standalone package
C M4 Makefile Shell C++ Python
Branch: master
Clone or download
Pull request Compare This branch is 4380 commits behind elogind:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
factory/etc/pam.d Remove myhostname checks/support Apr 19, 2015
m4 build: make sure to test for -Wflag instead of -Wno-flag Feb 24, 2015
man Remove support for auto-spawning VTs Aug 23, 2015
po Remove non-login i18n Apr 8, 2015
shell-completion remove shell completion Apr 8, 2015
src Clear pending action after resume from delayed sleep. Mar 17, 2016
tools Remove unifont and terminal checks/support Apr 19, 2015
.dir-locals.el Keep emacs configuration in one configuration file. Mar 8, 2011
.gitattributes git: indicate that tabs are never OK in the systemd tree Oct 30, 2013
.gitignore Ignore generated libelogind files. Aug 15, 2015
.mailmap prepare NEWS Feb 18, 2014
.travis.yml mount: use libmount to enumerate /proc/self/mountinfo Nov 28, 2014
.vimrc vimrc: disable -fdiagnostics-color output Oct 20, 2013 ycm: update flag blacklist Jun 4, 2014
CODING_STYLE CODING_STYLE: mention that dup() should not be used Apr 3, 2015
LICENSE.GPL2 relicense to LGPLv2.1 (with exceptions) Apr 11, 2012
LICENSE.LGPL2.1 licence: remove references to old FSF address Dec 17, 2012
LICENSE.MIT relicense to LGPLv2.1 (with exceptions) Apr 11, 2012 Compiling. Apr 8, 2015 Re-add cgroups agent to the build Mar 6, 2016
NEWS NEWS: typo fixes Feb 16, 2015
README Classify processes from sessions into cgroups Mar 6, 2016
TODO update TODO Apr 3, 2015 Play better with non-FHS distros Aug 19, 2015 Release version 219.14. Mar 17, 2016


Elogind User, Seat and Session Manager


Elogind is the systemd project's "logind", extracted out to be a
standalone daemon.  It integrates with PAM to know the set of users
that are logged in to a system and whether they are logged in
graphically, on the console, or remotely.  Elogind exposes this
information via the standard org.freedesktop.login1 D-Bus interface,
as well as through the file system using systemd's standard
/run/systemd layout.  Elogind also provides "libelogind", which is a
subset of the facilities offered by "libsystemd".  There is a
"libelogind.pc" pkg-config file as well.

All of the credit for elogind should go to the systemd developers.
For more on systemd, see  All of the blame
should go to Andy Wingo, who extracted elogind from systemd.


Elogind was branched from systemd version 219, and preserves the git
history of the systemd project.  The version of elogind is the
upstream systemd version, followed by the patchlevel of elogind.  For
example version 219.12 is the twelfth elogind release, which aims to
provide a subset of the interfaces of systemd 219.

To contribute to elogind, fork the current source code from github:

Send a pull request for the changes you like.

To chat about elogind:

  #guix on

Finally, bug reports:

Why bother?

Elogind has been developed for use in GuixSD, the OS distribution of
GNU Guix.  See for more on Guix.  GuixSD uses a
specific init manager (DMD), for reasons that are not relevant here,
but still aims to eventually be a full-featured distribution that can
run GNOME and other desktop environments.  However, to run GNOME these
days means that you need to have support for the login1 D-Bus
interface, which is currently only provided by systemd.  That is the
origin of this project: to take the excellent logind functionality
from systemd and provide it as a standalone package.

We like systemd.  We realize that there are people out there that hate
it.  You're welcome to use elogind for whatever purpose you like --
as-is, or as a jumping-off point for other things -- but please don't
use it as part of some anti-systemd vendetta.  Systemd hackers are
smart folks that are trying to solve interesting problems on the free
desktop, and their large adoption is largely because they solve
problems that users and developers of user-focused applications care
about.  We are appreciative of their logind effort and think that
everyone deserves to run it if they like, even if they use a different
PID 1.

Differences relative to systemd

The pkg-config file is called libelogind, not libsystemd or

The headers are in <elogind/...>, so like <elogind/sd-login.h> instead
of <systemd/sd-login.h>.

Libelogind just implements login-related functionality.  It also
provides the sd-bus API.

Unlike systemd, whose logind arranges to manage resources for user
sessions via RPC calls to systemd, in elogind there is no systemd so
there is no global cgroup-based resource management.  This has a few

  * Elogind does not create "slices" for users.  Elogind will not
    record that users are associated with slices.

  * The /run/systemd/slices directory will always be empty.

  * Elogind does not have the concept of a "scope", internally, as
    it's the same as a session.  Any API that refers to scopes will
    always return an error code.

On the other hand, elogind does use a similar strategy to systemd in
that it places processes in a private cgroup for organizational
purposes, without installing any controllers (see  This
allows elogind to map arbitrary processes to sessions, even if the
process does the usual double-fork to be reparented to PID 1.

Elogind does not manage virtual terminals.

Elogind does monitor power button and the lid switch, like systemd,
but instead of doing RPC to systemd to suspend, poweroff, or restart
the machine, elogind just does this directly.  For suspend, hybernate,
and hybrid-sleep, elogind uses the same code as systemd-sleep.
Instead of using a separate sleep.conf file to configure the sleep
behavior, this is included in the [Sleep] section of
/etc/elogind/login.conf.  See the example login.conf for more.  For
shutdown, reboot, and kexec, elogind shells out to "halt", "reboot",
and "kexec" binaries.

The loginctl command has the poweroff, reboot, sleep, hibernate, and
hybrid-sleep commands from systemd, as well as the --ignore-inhibitors

The PAM module is called, not


LGPLv2.1+ for all code

  - except src/shared/MurmurHash2.c which is Public Domain
  - except src/shared/siphash24.c which is CC0 Public Domain
  - except src/journal/lookup3.c which is Public Domain


  glibc >= 2.14
  libmount >= 2.20 (from util-linux)
  libseccomp >= 1.0.0 (optional)
  libblkid >= 2.24 (from util-linux) (optional)
  PAM >= 1.1.2 (optional)
  libacl (optional)
  libselinux (optional)
  make, gcc, and similar tools

During runtime, you need the following additional dependencies:

  dbus >= 1.4.0 (strictly speaking optional, but recommended)
  PolicyKit (optional)

When building from git, you need the following additional

  gtkdocize (optional)
You can’t perform that action at this time.