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:
committed by
Luca Boccassi
parent
2b4cdac91a
commit
2f1d114010
+13
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user