diff --git a/src/dbus/applicationmanager1service.cpp b/src/dbus/applicationmanager1service.cpp index cfee1f1..024c2fa 100644 --- a/src/dbus/applicationmanager1service.cpp +++ b/src/dbus/applicationmanager1service.cpp @@ -64,6 +64,10 @@ ApplicationManager1Service::ApplicationManager1Service(std::unique_ptr #include #include +#include #include #include #include @@ -484,4 +485,25 @@ inline FileTimeInfo getFileTimeInfo(const QFileInfo &file) return {mtime, ctime, atime}; } +inline QByteArray getCurrentSessionId() +{ + constexpr auto graphicalTarget = u8"graphical-session.target"; + + auto msg = QDBusMessage::createMethodCall("org.freedesktop.systemd1", + "/org/freedesktop/systemd1/unit/" + escapeToObjectPath(graphicalTarget), + "org.freedesktop.DBus.Properties", + "Get"); + msg << QString{"org.freedesktop.systemd1.Unit"}; + msg << QString{"InvocationID"}; + auto bus = QDBusConnection::sessionBus(); + auto ret = bus.call(msg); + if (ret.type() != QDBusMessage::ReplyMessage) { + qWarning() << "get graphical session Id failed:" << ret.errorMessage(); + return {}; + } + + auto id = ret.arguments().first(); + return id.value().variant().toByteArray(); +} + #endif