diff --git a/startkde/plasma-session/startup.h b/startkde/plasma-session/startup.h --- a/startkde/plasma-session/startup.h +++ b/startkde/plasma-session/startup.h @@ -26,6 +26,7 @@ #include #include +#include #include "autostart.h" @@ -87,7 +88,7 @@ { Q_OBJECT public: - StartProcessJob(const QString &process, const QStringList &args, const QStringList &env = {}); + StartProcessJob(const QString &process, const QStringList &args, const QProcessEnvironment &env = QProcessEnvironment::systemEnvironment()); void start() override; private: QProcess* m_process; @@ -100,12 +101,12 @@ { Q_OBJECT public: - StartServiceJob(const QString &process, const QStringList &args, const QString &serviceId, const QStringList &env = {}); + StartServiceJob(const QString &process, const QStringList &args, const QString &serviceId, const QProcessEnvironment &env = QProcessEnvironment::systemEnvironment()); void start() override; private: const QString m_process; const QStringList m_args; - const QStringList m_env; + const QProcessEnvironment m_env; }; class RestoreSessionJob: public KJob diff --git a/startkde/plasma-session/startup.cpp b/startkde/plasma-session/startup.cpp --- a/startkde/plasma-session/startup.cpp +++ b/startkde/plasma-session/startup.cpp @@ -207,9 +207,11 @@ const AutoStart autostart; KJob* phase1; + QProcessEnvironment kdedEnv = QProcessEnvironment::systemEnvironment(); + kdedEnv.insert(QStringLiteral("KDED_STARTED_BY_KDEINIT"), QStringLiteral("1")); const QVector sequence = { new StartProcessJob(QStringLiteral("kcminit_startup"), {}), - new StartServiceJob(QStringLiteral("kded5"), {}, QStringLiteral("org.kde.kded"), QProcess::systemEnvironment() << QStringList{ QStringLiteral("KDED_STARTED_BY_KDEINIT=1") }), + new StartServiceJob(QStringLiteral("kded5"), {}, QStringLiteral("org.kde.kded5"), kdedEnv), new StartServiceJob(QStringLiteral("ksmserver"), QCoreApplication::instance()->arguments().mid(1), QStringLiteral("org.kde.ksmserver")), new StartupPhase0(autostart, this), phase1 = new StartupPhase1(autostart, this), @@ -409,7 +411,7 @@ } -StartServiceJob::StartServiceJob(const QString &process, const QStringList &args, const QString &serviceId, const QStringList &env): +StartServiceJob::StartServiceJob(const QString &process, const QStringList &args, const QString &serviceId, const QProcessEnvironment &env): KJob(), m_process(process), m_args(args), @@ -421,34 +423,36 @@ void StartServiceJob::start() { + qCDebug(PLASMA_SESSION) << "Starting " << m_process << m_args; QProcess* p = new QProcess(this); - p->setEnvironment(m_env); + p->setProcessEnvironment(m_env); if (!p->startDetached(m_process, m_args)) qCWarning(PLASMA_SESSION) << "error starting process" << m_process << m_args; connect(p, &QProcess::errorOccurred, this, [this] (QProcess::ProcessError error) { qCWarning(PLASMA_SESSION) << "error on process" << error << m_process << m_args; }); } -StartProcessJob::StartProcessJob(const QString &process, const QStringList &args, const QStringList &env) +StartProcessJob::StartProcessJob(const QString &process, const QStringList &args, const QProcessEnvironment &env) : KJob() , m_process(new QProcess(this)) { m_process->setProgram(process); m_process->setArguments(args); - m_process->setEnvironment(env); + m_process->setProcessEnvironment(env); - connect(m_process, &QProcess::errorOccurred, this, [process, args] (QProcess::ProcessError error) { - qCWarning(PLASMA_SESSION) << "error starting process" << error << process << args; + connect(m_process, static_cast(&QProcess::finished), [this](int exitCode) { + qCInfo(PLASMA_SESSION) << "process job " << m_process->program() << "finished with exit code " << exitCode; + emitResult(); }); - connect(m_process, &QProcess::started, this, &StartProcessJob::emitResult); } void StartProcessJob::start() { - if (!m_process->startDetached()) - qCWarning(PLASMA_SESSION) << "error starting process" << m_process->program(); + qCDebug(PLASMA_SESSION) << "Starting " << m_process->program() << m_process->arguments(); + + m_process->start(); } #include "startup.moc"