----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://git.reviewboard.kde.org/r/109693/#review84754 -----------------------------------------------------------
just as a late update to the review request: in 5.x the ksldapp inhibits suspend on logind to ensure that the screen gets locked before we go to suspend. Also just this week I merged some work for 5.5 to improve notifying ksldapp about greeter being ready. Unfortunately I still get screen unlocked after suspend and I'm at the point where I think it's impossible without Wayland. Nevertheless: thanks for the approach to fixing the issue. - Martin Gräßlin On March 25, 2013, 4:23 p.m., Oliver Henshaw wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://git.reviewboard.kde.org/r/109693/ > ----------------------------------------------------------- > > (Updated March 25, 2013, 4:23 p.m.) > > > Review request for Plasma and Solid. > > > Bugs: 313123 > http://bugs.kde.org/show_bug.cgi?id=313123 > > > Repository: kde-workspace > > > Description > ------- > > Here's an attempt to get the screen lock to fully activate before resume > starts. > > > This is a problem on systems that use systemd/logind to suspend as it > suspends immediately, so that there's unlikely to be time for the lock > process to hide the screen before the system suspends. There shouldn't be a > problem on systems that use upower, as it waits a second before suspending - > there's no guarantee that the screen locks in time, but it should in > practice. But there are reports of problems with upower (on ubuntu, at least) > - this needs further investigation to see if there's something else going on. > > It's also not clear why the lock process waits a further ten or so seconds > after resume before hiding the screen. > > > * Delay emitting org.freedesktop.ScreenSaver.ActiveChanged and replying to > org.freedesktop.ScreenSaver.Lock until the lock process is ready. We can't > have the ksmserver blocking in the .Lock call as this blocks the lock process > (as QApplication constructs a QSessionManager which attempts to communicate > with ksmserver over XSMP) so delay replying and complete the transaction when > the lock process signal its readiness. > > - The qml lockscreen still blocks on powerdevil as it queries supported > suspend methods using the synchronous Solid::PowerManagement API. So disable > this for now. This is harmless for the plasma desktop but does affect the > plasma active qml locker. > > - The plasma overlay locker seems to be broken. I think this is an unrelated > breakage on my test system but can't be sure. It should be fine in theory, > but might have a problem if there are any power-management plasmoids on it. > > > Other approaches to breaking the powerdevil <-> lock process deadlock are: > > * Have SuspendSession::lockScreenAndWait() call > face.call(QDBus::BlockWithGui, "Lock") to return to the event loop. > - But does this mean that the entire call-chain to this point would need to > be re-entrant with respect to the event loop? > * Make powerdevil Actions into transactions that are queued and signal their > completion (or failure) > - Tricky and fairly wide-ranging. And probably not suitable for 4.10. > * Have the kscreenlocker_greet lock process use asynchronous dbus calls to > query powerdevil rather than the synchronous API. I'm not sure if there's > already some prototype asynchronous API (for libsolid2) to cannibalise for > this. > * Have ksmserver or the lock process take a delay lock - > http://www.freedesktop.org/wiki/Software/systemd/inhibit - and return from > org.freedesktop.ScreenSaver.Lock as soon as the lock process is running, as > we do now. > - This would solve the problem on systems that use logind to suspend, but do > nothing on systems that suspend with upower. As mentioned above, it's unclear > what the cause of the problem is on upower systems. > > > The patch series is in my clone at > kde:clones/kde-workspace/oliverhenshaw/kde-workspace in the branch > review/screenlocker-waitforlock and comprises: > > > [1/5] Represent lock state with an enum > > > [2/5] Emit activeChanged() only when lock process ready > > * synchronously call desktopResized in the screen locker app > (this causes the lock process windows to be created) > * signal that the lock process is ready by calling > org.kde.screensaver.saverLockReady() > * introduce a Waiting LockState > * finish locking in lockProcessReady() when receive notification over > dbus - start locked timer and emit locked() here rather than earlier > > This is based on 62c2c398611b2e6ef6e1e38ed79bc9540fc02ec9 and the old > screensaver implementation (from 4.9 and earlier). But delaying the > lock() qt signal, and thus delaying the activeChanged() dbus signal, > until the lock prcess is ready is new behaviour. > > > [3/5] Delay reply from dbus calls until screen is locked > > This prevents e.g. suspending before the screen is properly locked. > > Based on the old screensaver implementation (from 4.9 and earlier). > > > [4/5] Print when lock process starts and when ready > > Useful for timing slow lock process creation > > > [5/5] Skip blocking Solid::PowerManagement call > > Solid::PowerManagement API calls powerdevil synchronously, causing > deadlock until dbus timeout. > > > Diffs > ----- > > ksmserver/screenlocker/greeter/CMakeLists.txt > 11905152321377aa3135424fa2e09bb991878da5 > ksmserver/screenlocker/greeter/greeterapp.h > f332bfc5c432b5b48b568c815904a12b4a74bd7a > ksmserver/screenlocker/greeter/greeterapp.cpp > b70c9d6c005aa66d2f85a42ef4f1dcb04ea44667 > ksmserver/screenlocker/greeter/main.cpp > 180d64d58b069e2d5b8362fb43c63ec2e834fadb > ksmserver/screenlocker/interface.h 018464cda6c1ea9511cd4553e615bee62a66949a > ksmserver/screenlocker/interface.cpp > 32acad1b8afc8f15403d9e7b92dd49c51d355bdc > ksmserver/screenlocker/ksldapp.h 3047c00558d664ffac864582a4cb2c4f725a3cf4 > ksmserver/screenlocker/ksldapp.cpp 7f2e6715f0c12baa1586e41fa8f767707c9f83c5 > plasma/screensaver/shell/CMakeLists.txt > 5c52da691acf24422efc420be9bdc71eb716b268 > plasma/screensaver/shell/main.cpp be151aa25dbff449d2e777ace9b43cac3de12f6d > > Diff: https://git.reviewboard.kde.org/r/109693/diff/ > > > Testing > ------- > > Not enough > > > Thanks, > > Oliver Henshaw > >
_______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel