lxqt / lxqt-session

The LXQt session manager
https://lxqt.github.io
GNU Lesser General Public License v2.1
57 stars 52 forks source link

lxqt-session crashes when suspend/hibernate on wayland if "lock screen" is checked #457

Closed stefonarch closed 1 year ago

stefonarch commented 1 year ago
Current Behavior

When the checkbox for screen locking before suspend in lxqt-config-session is checked at first suspend lxqt-sessioncrashes. Logout is greyed out and list of modules running shows none running, but no other signs, so the session itself is still running but the process is dead after resume.

Possible Solution

Disable screenlock function when running on wayland. Afaik there is no general method as under X11, so supporting swayidle before-sleep swaylock if running under wayland could be an option.

Context

lxqt-session is quite useful under wayland, for modules, some settings and autostart

System Information
tsujan commented 1 year ago

I agree.

BTW, at some point, I should ask you through email how exactly you use lxqt-session with Wayfire (for now, I'm under X11+LXQt).

stefonarch commented 1 year ago

how exactly you use lxqt-session with Wayfire

I just updated the README and wayfire.ini here: https://github.com/stefonarch/LXQt-Wayland-files/blob/640b18713b93dd21b6d36d2d7d733dc83efe8e78/wayfire/wayfire.ini#L126

I noticed that applications started by wayfire shortcuts are not handled bylxqt-leave --logout - which isn't a surprise.

tsujan commented 1 year ago

Thanks! I'd forgotten that you created a repository for it. Will read it later.

I noticed that applications started by wayfire shortcuts are not handled by lxqt-leave --logout - which isn't a surprise.

pstree shows what's under lxqt-session. Under Wayfire, only those processes are controlled by LXQt Session. Under LXQt+X11, all user processes are under it.

stefonarch commented 1 year ago

Forgot to add this:

#0  LXQt::ScreenSaverPrivate::isScreenSaverLocked() (this=0x556838c20920) at /tmp/liblxqt/lxqtscreensaver.cpp:196
#1  0x00007f24f46f5d8c in LXQt::ScreenSaver::lockScreen() (this=0x556838c1fb28) at /tmp/liblxqt/lxqtscreensaver.cpp:253
#2  0x0000556837b77e7e in operator()(bool) const (__closure=0x556838ce1d20, beforeSleep=true)
    at /home/stef/git/lxqt/lxqt-session/lxqt-session/src/lockscreenmanager.cpp:102
#3  0x0000556837b7a748 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<bool>, void, LockScreenManager::startup(bool, int)::<lambda(bool)> >::call(struct {...} &, void **) (f=..., arg=0x7fffa4348470) at /usr/include/qt/QtCore/qobjectdefs_impl.h:146                                                      
#4  0x0000556837b7a62d in QtPrivate::Functor<LockScreenManager::startup(bool, int)::<lambda(bool)>, 1>::call<QtPrivate::List<bool>, void>(struct {...} &, void *, void **) (f=..., arg=0x7fffa4348470) at /usr/include/qt/QtCore/qobjectdefs_impl.h:256                                                                           
#5  0x0000556837b7a51e in QtPrivate::QFunctorSlotObject<LockScreenManager::startup(bool, int)::<lambda(bool)>, 1, QtPrivate::List<bool>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=1, this_=0x556838ce1d10, r=0x556838c1fb10, a=0x7fffa4348470, ret=0x0)                                  
    at /usr/include/qt/QtCore/qobjectdefs_impl.h:443
#6  0x00007f24f30bea71 in  () at /usr/lib/libQt5Core.so.5
#7  0x0000556837b610cd in LockScreenProvider::aboutToSleep(bool) (this=0x556838c5f710, _t1=true)
    at /home/stef/git/lxqt/lxqt-session/build/lxqt-session/lxqt-session_autogen/UVLADIE3JM/moc_lockscreenmanager.cpp:144
#8  0x0000556837b60e68 in LockScreenProvider::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)
    (_o=0x556838c5f710, _c=QMetaObject::InvokeMetaMethod, _id=0, _a=0x7fffa4348740)
    at /home/stef/git/lxqt/lxqt-session/build/lxqt-session/lxqt-session_autogen/UVLADIE3JM/moc_lockscreenmanager.cpp:77
#9  0x00007f24f30bec20 in  () at /usr/lib/libQt5Core.so.5
#10 0x00007f24f43afb57 in QDBusInterface::qt_metacall(QMetaObject::Call, int, void**) () at /usr/lib/libQt5DBus.so.5
#11 0x00007f24f43dd45f in  () at /usr/lib/libQt5DBus.so.5
#12 0x00007f24f30b1bb0 in QObject::event(QEvent*) () at /usr/lib/libQt5Core.so.5
#13 0x00007f24f3d78b5c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#14 0x00007f24f308df48 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5
#15 0x00007f24f308ea53 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /usr/lib/libQt5Core.so.5
#16 0x00007f24f30d4e88 in  () at /usr/lib/libQt5Core.so.5
#17 0x00007f24f3b1682b in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#18 0x00007f24f3b6dcc9 in  () at /usr/lib/libglib-2.0.so.0
#19 0x00007f24f3b150e2 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#20 0x00007f24f30d8c6c in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#21 0x00007f24f30866ec in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#22 0x00007f24f3091219 in QCoreApplication::exec() () at /usr/lib/libQt5Core.so.5
#23 0x0000556837b6323a in main(int, char**) (argc=1, argv=0x7fffa4348e78) at /home/stef/git/lxqt/lxqt-session/lxqt-session/src/main.cpp:73
(gdb) 

In a more general way (maybe we should open a discussion for this) : I see 2 options:

  1. Make the actual lxqt-session compatible with wayland which would need

    • checkboxes for autostart entries similar to "wait for systray"
    • "wayland only"
    • "x11 only"
    • screensaver setting compatible for wayland session using swaylock
    • setting for the compositor to use (which can be used in a general startlxqtwayland script which I already have working) eg. wayland_compositor=Hyprland
    • disabling modules not ready/crashing on wayland
    • probably something else too
  2. Clone it into a lxqt-wayland-session with a lxqt-config-wayland which would handle things.

stefonarch commented 2 months ago

isScreenSaverLocked is disabled now in liblxqt under wayland so it doesn't crash anymore when locking on suspend is enabled on wayland (reverting line 122 of https://github.com/lxqt/lxqt-session/pull/469)