Skip to content

Commit

Permalink
logind: fix abnormal switching causing the screen to go black
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
xinpeng wang authored and bluca committed Oct 27, 2023
1 parent 2b4cdac commit 2f1d114
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion src/login/logind-seat.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 2f1d114

Please sign in to comment.