From d94357f98c46245c7c70efe006a7080f6cfe5aa8 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Sat, 9 Apr 2022 20:00:56 +0300 Subject: [PATCH] kgreeter: kill lightdm process at exit and before starting it again from KCM Signed-off-by: Ivailo Monev --- kgreeter/kcm/kgreeterconfig.cpp | 25 ++++++++++++++++++++++--- kgreeter/kcm/kgreeterconfig.h | 3 +++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/kgreeter/kcm/kgreeterconfig.cpp b/kgreeter/kcm/kgreeterconfig.cpp index 4091c24a..c6a73d4f 100644 --- a/kgreeter/kcm/kgreeterconfig.cpp +++ b/kgreeter/kcm/kgreeterconfig.cpp @@ -20,7 +20,6 @@ #include #include -#include #include #include #include @@ -33,6 +32,9 @@ #include #include +#include +#include + #include "config-workspace.h" K_PLUGIN_FACTORY(KCMGreeterFactory, registerPlugin();) @@ -40,7 +42,8 @@ K_EXPORT_PLUGIN(KCMGreeterFactory("kcmgreeterconfig", "kcm_greeterconfig")) KCMGreeter::KCMGreeter(QWidget* parent, const QVariantList& args) : KCModule(KCMGreeterFactory::componentData(), parent), - m_lightdmexe(KStandardDirs::findRootExe("lightdm")) + m_lightdmexe(KStandardDirs::findRootExe("lightdm")), + m_lightdmpid(0) { Q_UNUSED(args); @@ -99,6 +102,7 @@ KCMGreeter::KCMGreeter(QWidget* parent, const QVariantList& args) KCMGreeter::~KCMGreeter() { + killLightDM(); } void KCMGreeter::load() @@ -207,7 +211,15 @@ void KCMGreeter::slotURLChanged(const KUrl &url) void KCMGreeter::slotTest() { - if (!QProcess::startDetached(m_lightdmexe, QStringList() << QString::fromLatin1("--test-mode"))) { + killLightDM(); + + const bool result = QProcess::startDetached( + m_lightdmexe, + QStringList() << QString::fromLatin1("--test-mode"), + QDir::currentPath(), + &m_lightdmpid + ); + if (!result) { KMessageBox::error(this, i18n("Could not start LightDM")); } } @@ -221,4 +233,11 @@ void KCMGreeter::enableTest(const bool enable) } } +void KCMGreeter::killLightDM() +{ + if (m_lightdmpid > 0) { + ::kill(pid_t(m_lightdmpid), SIGTERM); + } +} + #include "moc_kgreeterconfig.cpp" diff --git a/kgreeter/kcm/kgreeterconfig.h b/kgreeter/kcm/kgreeterconfig.h index 13ca4bd4..fa234f52 100644 --- a/kgreeter/kcm/kgreeterconfig.h +++ b/kgreeter/kcm/kgreeterconfig.h @@ -19,6 +19,7 @@ #ifndef KGREETERCONFIG_H #define KGREETERCONFIG_H +#include #include #include "ui_kgreeterconfig.h" @@ -51,8 +52,10 @@ private Q_SLOTS: private: void enableTest(const bool enable); + void killLightDM(); QString m_lightdmexe; + Q_PID m_lightdmpid; }; #endif // KGREETERCONFIG_H