chiark / gitweb /
logind: implement generic multi-session
authorDavid Herrmann <dh.herrmann@gmail.com>
Tue, 17 Sep 2013 21:40:19 +0000 (23:40 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 17 Sep 2013 22:15:30 +0000 (17:15 -0500)
commitd7bd01b547bd91353513131561de9cc7d9f7d405
treecf914215fd4aae73761cc77149bfa227cc596d5d
parent118ecf32425a590ea266b5c2b6de7962bb242356
logind: implement generic multi-session

This enables the multi-session capability for seats that don't have VTs.
For legacy seats with VTs, everything stays the same. However, all other
seats now also get the multi-session capability.

The only feature that was missing was session-switching. As logind can
force a session-switch and signal that via the "Active" property, we only
need a way to allow synchronized/delayed session switches. Compositors
need to cleanup some devices before acknowledging the session switch.
Therefore, we use the session-devices to give compositors a chance to
block a session-switch until they cleaned everything up.

If you activate a session on a seat without VTs, we send a PauseDevice
signal to the active session for every active device. Only once the
session acknowledged all these with a PauseDeviceComplete() call, we
perform the final session switch.

One important note is that delayed session-switching is meant for
backwards compatibility. New compositors or other sessions should really
try to deal correctly with forced session switches! They only need to
handle EACCES/EPERM from syscalls and treat them as "PauseDevice" signal.

Following logind patches will add a timeout to session-switches which
forces the switch if the active session does not react in a timely
fashion. Moreover, explicit ForceActivate() calls might also be supported.
Hence, sessions must not crash if their devices get paused.
src/login/logind-seat.c
src/login/logind-seat.h
src/login/logind-session-device.c
src/login/logind-session-device.h
src/login/logind-session.c