From: xinpeng wang Date: Wed, 25 Oct 2023 03:19:58 +0000 (+0800) Subject: logind: fix abnormal switching causing the screen to go black X-Git-Tag: v255-rc1~116 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2f1d1140101268e69204ec62dd9abb8ead4b48c8;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c index c92e59ae512..8d875d2ea77 100644 --- a/src/login/logind-seat.c +++ b/src/login/logind-seat.c @@ -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;