From 0dcd071e79365d621f75c9c4ca4ba38ade2dc389 Mon Sep 17 00:00:00 2001 From: Eric Hameleers Date: Sun, 12 Aug 2018 22:11:58 +0200 Subject: Backport two kscreenlocker patches from the 5.14 branch - Force software rendering when greeter crashed: - Load QtQuickSettings for software rendering (KDEBUG #347772): In particular the second patch eliminates 100% CPU usage in the lockscreen in case you have older hardware and rely on software rendering. I think this warrants the backport into Slackware's Plasma5 Desktop. --- kde/patch/kscreenlocker.patch | 8 ++ .../kscreenlocker_crash_force_softrender.patch | 112 +++++++++++++++++++++ .../kscreenlocker_rendersettings.patch | 49 +++++++++ 3 files changed, 169 insertions(+) create mode 100644 kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch create mode 100644 kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch (limited to 'kde') diff --git a/kde/patch/kscreenlocker.patch b/kde/patch/kscreenlocker.patch index ea170b8..7e48859 100644 --- a/kde/patch/kscreenlocker.patch +++ b/kde/patch/kscreenlocker.patch @@ -2,3 +2,11 @@ # Dont quit the Greeter when last window closes. #cat $CWD/patch/kscreenlocker/kscreenlocker_CVE-2016-2312.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } +# Backport two important stability fixes from 5.14 - +# Force software rendering when greeter crashed: +cat $CWD/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } +# Load QtQuickSettings for software rendering (KDEBUG #347772): +cat $CWD/patch/kscreenlocker/kscreenlocker_rendersettings.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } + + + diff --git a/kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch b/kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch new file mode 100644 index 0000000..06045d7 --- /dev/null +++ b/kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch @@ -0,0 +1,112 @@ +From 875e44f56d4597ba3b65f5bf4ff2b315376c05a4 Mon Sep 17 00:00:00 2001 +From: Kai Uwe Broulik +Date: Wed, 11 Jul 2018 18:01:41 +0200 +Subject: Force software rendering when greeter crashed + +We have a fallback QML theme for when the look and feel package is broken but when the +graphics driver is broken (e.g. proprietary graphics driver update) the lock screen would +stop working. When the greeter crashed, better play safe and force software rendering + +Reviewed-By: d_ed +--- + ksldapp.cpp | 13 +++++++++++-- + ksldapp.h | 9 +++++++++ + 2 files changed, 20 insertions(+), 2 deletions(-) + +diff --git a/ksldapp.cpp b/ksldapp.cpp +index 892826f..5fe28ea 100644 +--- a/ksldapp.cpp ++++ b/ksldapp.cpp +@@ -66,6 +66,8 @@ along with this program. If not, see . + namespace ScreenLocker + { + ++static const QString s_qtQuickBackend = QStringLiteral("QT_QUICK_BACKEND"); ++ + static KSldApp * s_instance = nullptr; + + KSldApp* KSldApp::self() +@@ -226,6 +228,8 @@ void KSldApp::initialize() + // failure, restart lock process + m_greeterCrashedCounter++; + if (m_greeterCrashedCounter < 4) { ++ // Perhaps it crashed due to a graphics driver issue, force software rendering now ++ setForceSoftwareRendering(true); + startLockProcess(EstablishLock::Immediate); + } else if (m_lockWindow) { + m_lockWindow->emergencyShow(); +@@ -385,6 +389,7 @@ void KSldApp::lock(EstablishLock establishLock) + + m_lockState = AcquiringLock; + ++ setForceSoftwareRendering(false); + // start unlock screen process + startLockProcess(establishLock); + emit lockStateChanged(); +@@ -546,6 +551,8 @@ bool KSldApp::isFdoPowerInhibited() const + + void KSldApp::startLockProcess(EstablishLock establishLock) + { ++ QProcessEnvironment env = m_greeterEnv; ++ + if (m_isWayland && m_waylandDisplay) { + int sx[2]; + if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sx) < 0) { +@@ -566,9 +573,7 @@ void KSldApp::startLockProcess(EstablishLock establishLock) + emit greeterClientConnectionChanged(); + int socket = dup(sx[1]); + if (socket >= 0) { +- QProcessEnvironment env = m_greeterEnv; + env.insert("WAYLAND_SOCKET", QByteArray::number(socket)); +- m_lockProcess->setProcessEnvironment(env); + } + } + QStringList args; +@@ -587,6 +592,9 @@ void KSldApp::startLockProcess(EstablishLock establishLock) + if (m_lockGrace == -1) { + args << QStringLiteral("--nolock"); + } ++ if (m_forceSoftwareRendering) { ++ env.insert(s_qtQuickBackend, QStringLiteral("software")); ++ } + + // start the Wayland server + int fd = m_waylandServer->start(); +@@ -598,6 +606,7 @@ void KSldApp::startLockProcess(EstablishLock establishLock) + args << QStringLiteral("--ksldfd"); + args << QString::number(fd); + ++ m_lockProcess->setProcessEnvironment(env); + m_lockProcess->start(QStringLiteral(KSCREENLOCKER_GREET_BIN), args); + close(fd); + } +diff --git a/ksldapp.h b/ksldapp.h +index 4849588..b6d6703 100644 +--- a/ksldapp.h ++++ b/ksldapp.h +@@ -127,6 +127,14 @@ public: + m_lockGrace = msec; + } + ++ bool forceSoftwareRendering() const { ++ return m_forceSoftwareRendering; ++ } ++ ++ void setForceSoftwareRendering(bool force) { ++ m_forceSoftwareRendering = force; ++ } ++ + Q_SIGNALS: + void locked(); + void unlocked(); +@@ -179,6 +187,7 @@ private: + LogindIntegration *m_logind; + GlobalAccel *m_globalAccel = nullptr; + bool m_hasXInput2 = false; ++ bool m_forceSoftwareRendering = false; + + bool m_isX11; + bool m_isWayland; +-- +cgit v0.11.2 + diff --git a/kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch b/kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch new file mode 100644 index 0000000..2802a1a --- /dev/null +++ b/kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch @@ -0,0 +1,49 @@ +From 3f104cbb0a34024dc1aa45538d2ef2403a7a45f0 Mon Sep 17 00:00:00 2001 +From: David Edmundson +Date: Fri, 10 Aug 2018 01:18:42 +0200 +Subject: Load QtQuickSettings for software rendering + +We had support for falling back on errors yet somehow +the initial basic loading was missing. + +Summary: BUG: 347772 + +Test Plan: Compiles + +Reviewers: #plasma, broulik + +Reviewed By: #plasma, broulik + +Subscribers: plasma-devel + +Tags: #plasma + +Differential Revision: https://phabricator.kde.org/D14708 +--- + greeter/main.cpp | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/greeter/main.cpp b/greeter/main.cpp +index ff64a55..6db87e1 100644 +--- a/greeter/main.cpp ++++ b/greeter/main.cpp +@@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License + along with this program. If not, see . + *********************************************************************/ + #include ++#include + + #include + #include +@@ -85,6 +86,8 @@ int main(int argc, char* argv[]) + QCoreApplication::setApplicationVersion(QStringLiteral("0.1")); + QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org")); + ++ KQuickAddons::QtQuickSettings::init(); ++ + // disable session management for the greeter + auto disableSessionManagement = [](QSessionManager &sm) { + sm.setRestartHint(QSessionManager::RestartNever); +-- +cgit v0.11.2 + -- cgit v1.2.3