/* SPDX-FileCopyrightText: 2019 Aleix Pol Gonzalez SPDX-License-Identifier: LGPL-2.0-or-later */ #include "startplasma.h" #include #include #include #include void sighupHandler(int) { out << "GOT SIGHUP\n"; } int main(int argc, char **argv) { // When the X server dies we get a HUP signal from xinit. We must ignore it // because we still need to do some cleanup. signal(SIGHUP, sighupHandler); qputenv("QT_NO_XDG_DESKTOP_PORTAL", QByteArrayView("1")); QCoreApplication app(argc, argv); // Check if a Plasma session already is running and whether it's possible to connect to X switch (kCheckRunning()) { case NoX11: out << "$DISPLAY is not set or cannot connect to the X server.\n"; return 1; case PlasmaRunning: messageBox(QStringLiteral("Plasma seems to be already running on this display.\n")); return 1; case NoPlasmaRunning: break; } createConfigDirectory(); runStartupConfig(); // Do not sync any of this section with the wayland versions as there scale factors are // sent properly over wl_output { KConfig cfg(QStringLiteral("kdeglobals")); KConfigGroup kscreenGroup = cfg.group(QStringLiteral("KScreen")); const auto screenScaleFactors = kscreenGroup.readEntry("ScreenScaleFactors", QByteArray()); if (!screenScaleFactors.isEmpty()) { qputenv("QT_SCREEN_SCALE_FACTORS", screenScaleFactors); } } // NOTE: Be very mindful of what you start this early in the process. The environment is not yet complete. setupCursor(false); std::unique_ptr ksplash(setupKSplash()); Q_UNUSED(ksplash) runEnvironmentScripts(); out << "startkde: Starting up...\n"; setupPlasmaEnvironment(); qunsetenv("QT_NO_XDG_DESKTOP_PORTAL"); auto oldSystemdEnvironment = getSystemdEnvironment(); if (!syncDBusEnvironment()) { // Startup error messageBox(QStringLiteral("Could not sync environment to dbus.\n")); return 1; } // We import systemd environment after we sync the dbus environment here. // Otherwise it may leads to some unwanted order of applying environment // variables (e.g. LANG and LC_*) importSystemdEnvrionment(); if (!startPlasmaSession(false)) return 1; // Anything after here is logout // It is not called after shutdown/restart waitForKonqi(); out << "startkde: Shutting down...\n"; // Keep for KF5; remove in KF6 (KInit will be gone then) runSync(QStringLiteral("kdeinit5_shutdown"), {}); stopSystemdSession(); cleanupPlasmaEnvironment(oldSystemdEnvironment); out << "startkde: Done.\n"; return 0; }