From d7bd01b547bd91353513131561de9cc7d9f7d405 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Tue, 17 Sep 2013 23:40:19 +0200 Subject: 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-session-device.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/login/logind-session-device.h') diff --git a/src/login/logind-session-device.h b/src/login/logind-session-device.h index 511fce0e61..eac7ca7a63 100644 --- a/src/login/logind-session-device.h +++ b/src/login/logind-session-device.h @@ -57,3 +57,4 @@ void session_device_complete_pause(SessionDevice *sd); void session_device_resume_all(Session *s); void session_device_pause_all(Session *s); +unsigned int session_device_try_pause_all(Session *s); -- cgit v1.2.3-54-g00ecf