logind: fix abnormal switching causing the screen to go black

After logind receives the SIGRTMIN signal from the kernel, it will execute
manager_vt_switch---session_leave_vt---session_device_pause_all,The device
permissions of the session are removed here;under normal circumstances, the
tty value read from /sys/class/tty/tty0/active changes and switchesto a new
session,give the new session resume device permissions.
But under abnormal circumstances (such as switching quickly on a device using
wayland; and sometimes the kernel will suddenly send a SIGRTMIN signal, but
nothing changes),In these cases, logind does not give session resume device
permission, causing the device to have a black screen and suspended animation.
This commit is contained in:
xinpeng wang
2023-10-27 10:19:58 +01:00
committed by Luca Boccassi
parent 2b4cdac91a
commit 2f1d114010
+13 -1
View File
@@ -225,8 +225,20 @@ int seat_set_active(Seat *s, Session *session) {
assert(s);
assert(!session || session->seat == s);
if (session == s->active)
/* When logind receives the SIGRTMIN signal from the kernel, it will
* execute session_leave_vt and stop all devices of the session; at
* this time, if the session is active and there is no change in the
* session, then the session does not have the permissions of the device,
* and the machine will have a black screen and suspended animation.
* Therefore, if the active session has executed session_leave_vt ,
* A resume is required here. */
if (session == s->active) {
if (session) {
log_debug("Active session remains unchanged, resuming session devices.");
session_device_resume_all(session);
}
return 0;
}
old_active = s->active;
s->active = session;