Introduction to elogind
elogind is the systemd project's "logind", extracted to be a
standalone daemon. It integrates with Linux-PAM-1.6.0 to track all the users 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, and also through
the file system using systemd's standard /run/systemd
layout.
This package is known to build and work properly using an LFS 12.1
platform.
Package Information
elogind Dependencies
Recommended
dbus-1.14.10 (runtime), Linux-PAM-1.6.0 (required for Xorg),
Polkit-124 (runtime), docbook-xml-4.5,
docbook-xsl-nons-1.79.2, and
libxslt-1.1.39 (all three to build the man
pages)
Optional
lxml-4.9.4, zsh-5.9, Valgrind-3.22.0
(needed for tests), audit-userspace,
bash-completion,
kexec,
and SELinux
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Logind
Kernel
Configuration
Enable the following options in the kernel configuration and
recompile the kernel if necessary:
File systems --->
[*] Inotify support for userspace [INOTIFY_USER]
Pseudo filesystems --->
[*] Tmpfs virtual memory file system support (former shm fs) [TMPFS]
[*] Tmpfs POSIX Access Control Lists [TMPFS_POSIX_ACL]
In addition, some tests need the userspace cryptographic kernel
API, which is enabled with:
-*- Cryptographic API ---> [CRYPTO]
Crypto core or helper --->
<*/M> Userspace cryptographic algorithm configuration [CRYPTO_USER]
Userspace interface --->
<*/M> Hash algorithms [CRYPTO_USER_API_HASH]
Installation of elogind
Install elogind by running the
following commands:
mkdir build &&
cd build &&
meson setup .. \
--prefix=/usr \
--buildtype=release \
-Dman=auto \
-Ddocdir=/usr/share/doc/elogind-252.9 \
-Dcgroup-controller=elogind \
-Ddev-kvm-mode=0660 \
-Ddbuspolicydir=/etc/dbus-1/system.d &&
ninja
To test the results, issue: ninja
test. A few tests are skipped if not run with
root
privileges. Two tests named
test-fs-util
and test-id128
require the /etc/machine-id
symlink, so they will fail if
this symlink is not created following the instruction in dbus-1.14.10 yet.
Now, as the root
user:
ninja install &&
ln -sfv libelogind.pc /usr/lib/pkgconfig/libsystemd.pc &&
ln -sfvn elogind /usr/include/systemd
Command Explanations
-Ddocdir=/usr/share/doc/elogind-252.9
:
This is needed to install documentation in a versioned directory.
-Dcgroup-controller=elogind
: This
switch is necessary to build this package when the kernel is not
built with CONFIG_CGROUPS
enabled. Note
that elogind strictly needs a
kernel with CONFIG_CGROUPS
enabled at
runtime, but this switch will allow building the package first.
-Ddbuspolicydir=/etc/dbus-1/system.d
:
This switch sets the location of the D-Bus policy directory.
-Ddev-kvm-mode=0660
: The
LFS udev rule sets the mode of /dev/kvm
to 0660. This option ensures the elogind
udev rules consistent with the LFS configuration.
-Dman=auto
: The default
value of this switch is false. Setting it to auto allows building and installing the
man pages if the recommended dependencies are installed.
-Dhtml=auto
: The default value of this
switch is false. Setting it
to auto allows building and
installing the html documentation if the recommended dependencies
are installed.
-Ddefault-kill-user-processes=false
:
Determines whether the processes of a user should be killed when
the user logs out. The default is true, but this defeats the traditional
use of screen or
tmux. This can also
be changed in the configuration file (see below).
ln -s ...: These
commands install symlinks so that software packages can find the
systemd-compatible library and headers.
Configuring elogind
Config File
/etc/elogind/logind.conf
Configuration Information
The installed file /etc/elogind/logind.conf
contains all the
possible options with their defaults, commented out. You may wish
to disable automatically killing user processes when the user
logs out, by running, as the root
user:
sed -e '/\[Login\]/a KillUserProcesses=no' \
-i /etc/elogind/logind.conf
Each user will need to register a user session using Linux-PAM at login. The /etc/pam.d/system-session
file needs to be
modified and a new file must be created in order for elogind to work correctly. Run
the following commands as the root
user:
cat >> /etc/pam.d/system-session << "EOF" &&
# Begin elogind addition
session required pam_loginuid.so
session optional pam_elogind.so
# End elogind addition
EOF
cat > /etc/pam.d/elogind-user << "EOF"
# Begin /etc/pam.d/elogind-user
account required pam_access.so
account include system-account
session required pam_env.so
session required pam_limits.so
session required pam_unix.so
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
session optional pam_elogind.so
auth required pam_deny.so
password required pam_deny.so
# End /etc/pam.d/elogind-user
EOF
Note
After completion of elogind,
you should check that it functions properly. First ensure that
dbus is running. It may be
easiest to do this by rebooting the system. After logging in
again, run the command loginctl. The result should
indicate that a SESSION and a SEAT have been created.
Contents
Installed Programs:
busctl, elogind-inhibit, and
loginctl
Installed Library:
libelogind.so
Installed Directories:
/usr/lib/elogind, /etc/elogind,
/usr/include/elogind, and /usr/share/doc/elogind-252.9
Short Descriptions
busctl
|
is used to introspect and monitor the D-Bus bus
|
elogind-inhibit
|
is used to execute a program with a shutdown, sleep or
idle inhibitor lock taken
|
loginctl
|
is used to introspect and control the state of the
elogind Login Manager
|
libelogind.so
|
is the main elogind utility library
|