Usage
A sessiond-based session should be started via a display manager, using
the provided sessiond session
desktop entry.
For example, configure lightdm
to start a sessiond session by setting
user-session=sessiond
in /etc/lightdm/lightdm.conf
.
To use sessiond alongside a window manager, the window manager service must include:
[Install]
Alias=window-manager.service
An example twm.service
:
[Unit]
Description=Window manager
Requires=sessiond-session.target
After=sessiond.service
PartOf=graphical-session.target
[Service]
ExecStart=/usr/bin/twm
Restart=always
[Install]
Alias=window-manager.service
Enable the window manager service with systemctl --user enable twm.service
.
Now, when the sessiond session
is started via the display manager, this
service will run as the window manager and the session will be stopped when it
exits.
sessiond-session.target
binds to graphical-session.target
provided
by systemd. See graphical-session.target in systemd.special(7)
for more information about graphical sessions.
To run a service in the graphical session, <service>.service
should contain:
[Unit]
PartOf=graphical-session.target
so the service is stopped when the session ends, and:
[Install]
WantedBy=graphical-session.target
so the service is started when the session begins.
It can then be enabled with systemctl --user enable <service>
.
Example services can be found here.
The session can be stopped with sessionctl stop
. This will stop
graphical-session.target
and all units that are part of the session.
A service that is part of the graphical session can be responsible for stopping the session. To configure a service to stop the session when it exits, include:
[Service]
ExecStopPost=/usr/bin/sessionctl stop
By default, the session is locked when it becomes idle and before sleeping.
This is configured in the [Lock]
section of the configuration file.
The session can be manually locked by running sessionctl lock
.
To configure a service to act as the screen locker, include:
[Service]
ExecStopPost=/usr/bin/sessionctl unlock
so the session is considered unlocked when the locker exits, and:
[Install]
WantedBy=graphical-lock.target
so the service is started when the session locks. Then enable it.
Below is an example i3lock.service
:
[Unit]
Description=Lock X session with i3lock
PartOf=graphical-session.target
[Service]
ExecStart=/usr/bin/i3lock -n -c 000000
ExecStopPost=/usr/bin/sessionctl unlock
[Install]
WantedBy=graphical-lock.target
Inhibitor locks can be acquired when the session should be considered active while a given command is running, e.g. a media player.
The sessiond-inhibit
script provides a simple interface to acquire a lock
before running a command and release it when the command returns.
usage: sessiond-inhibit [-h] [-w WHO] [-y WHY] [-s] [-i] [-u [ID]] [command]
With no command, list running inhibitors.
positional arguments:
command Command to run
optional arguments:
-h, --help show this help message and exit
-w WHO, --who WHO Set who is inhibiting
-y WHY, --why WHY Set why this inhibitor is running
-s, --stop Stop running inhibitors
-i, --inhibit Inhibit without a command
-u [ID], --uninhibit [ID]
Uninhibit last inhibitor or by ID
See sessiond-inhibit(1) for more information.
See sessiond-dbus(8) for descriptions of inhibitor-related methods.