From 410b9b56fa876b19a1d8a27589528fa7a2449670 Mon Sep 17 00:00:00 2001 From: Felix Gerking <felix.gerking@garz-fricke.com> Date: Thu, 28 Jul 2022 15:43:10 +0200 Subject: [PATCH] Config:systemd: Invoke systemd notify when the compositor is ready Now the compositor calls systemd notify READY=1 when surfaces can be created. This allows the use of a systemd notify type start script. BCS 746-000824 --- multiscreen-compositor/config.cpp | 7 +++++++ multiscreen-compositor/config.h | 1 + multiscreen-compositor/multiscreen-compositor.pro | 3 +++ multiscreen-compositor/qml/main.qml | 9 +++++++++ 4 files changed, 20 insertions(+) diff --git a/multiscreen-compositor/config.cpp b/multiscreen-compositor/config.cpp index 5ddc26c..58fca3f 100644 --- a/multiscreen-compositor/config.cpp +++ b/multiscreen-compositor/config.cpp @@ -3,6 +3,7 @@ #include <QDebug> #include <QRegularExpression> #include <QFile> +#include <systemd/sd-daemon.h> void Config::setRotation(const QString &str) { @@ -76,3 +77,9 @@ inline bool Config::rotationIsValid(const QString * rotation ) QStringList validRotations = {"0", "90", "180", "270"}; return validRotations.contains(*rotation); } + +void Config::notifyCompositorReady() +{ + qDebug() << "Notify systemd that the compositor is ready"; + sd_notify(false, "READY=1"); +} diff --git a/multiscreen-compositor/config.h b/multiscreen-compositor/config.h index 610c8c6..d73cdf8 100644 --- a/multiscreen-compositor/config.h +++ b/multiscreen-compositor/config.h @@ -12,6 +12,7 @@ public: void setRotation(const QString &str); QString rotation() const; + Q_INVOKABLE void notifyCompositorReady(); private: QString m_rotation; static const QRegularExpression findRotation; diff --git a/multiscreen-compositor/multiscreen-compositor.pro b/multiscreen-compositor/multiscreen-compositor.pro index bf35ffd..ef4d3be 100644 --- a/multiscreen-compositor/multiscreen-compositor.pro +++ b/multiscreen-compositor/multiscreen-compositor.pro @@ -13,6 +13,9 @@ HEADERS += \ message-server.h \ message-serverconnection.h +LIBS += \ + -lsystemd + OTHER_FILES = \ qml/main.qml \ diff --git a/multiscreen-compositor/qml/main.qml b/multiscreen-compositor/qml/main.qml index e7be840..b3cd503 100644 --- a/multiscreen-compositor/qml/main.qml +++ b/multiscreen-compositor/qml/main.qml @@ -110,6 +110,15 @@ WaylandCompositor { onIviSurfaceCreated: handleIviSurfaceCreated(iviSurface) } + // ============================================= + // We need to notify systemd when the compositor + // is ready to create surfaces + // ============================================= + onCreatedChanged: { + if (created === true) { + config.notifyCompositorReady(); + } + } onSurfaceRequested: { console.log("Surface requested", client, id, version); -- GitLab