77 lines
2.1 KiB
C++
77 lines
2.1 KiB
C++
#include <QCoreApplication>
|
|
#include <QDBusConnection>
|
|
#include <QDebug>
|
|
#include <QSocketNotifier>
|
|
|
|
#include <csignal>
|
|
#include <sys/socket.h>
|
|
#include <unistd.h>
|
|
|
|
#include "session_manager.h"
|
|
#include "sessionmanageradaptor.h" // generated by qt6_add_dbus_adaptor
|
|
|
|
// Async-signal-safe shutdown via socketpair
|
|
static int sigFd[2];
|
|
|
|
static void signalHandler(int)
|
|
{
|
|
char c = 1;
|
|
write(sigFd[0], &c, 1);
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
QCoreApplication app(argc, argv);
|
|
app.setApplicationName("ollie-kde");
|
|
app.setOrganizationName("ollie");
|
|
|
|
// Set up signal handling via socketpair (async-signal-safe)
|
|
if (socketpair(AF_UNIX, SOCK_STREAM, 0, sigFd) != 0) {
|
|
qCritical() << "Cannot create signal socketpair";
|
|
return 1;
|
|
}
|
|
|
|
auto *sigNotifier = new QSocketNotifier(sigFd[1], QSocketNotifier::Read, &app);
|
|
QObject::connect(sigNotifier, &QSocketNotifier::activated, &app, [&]() {
|
|
char c;
|
|
read(sigFd[1], &c, 1);
|
|
qDebug() << "Received shutdown signal, exiting gracefully...";
|
|
app.quit();
|
|
});
|
|
|
|
signal(SIGTERM, signalHandler);
|
|
signal(SIGINT, signalHandler);
|
|
|
|
// Create the session manager (initializes ollie core)
|
|
SessionManager manager;
|
|
|
|
// Create the D-Bus adaptor (generated from XML)
|
|
new SessionManagerAdaptor(&manager);
|
|
|
|
// Register on the session bus
|
|
QDBusConnection bus = QDBusConnection::sessionBus();
|
|
if (!bus.isConnected()) {
|
|
qCritical() << "Cannot connect to D-Bus session bus";
|
|
return 1;
|
|
}
|
|
|
|
if (!bus.registerService("org.ollie.SessionManager")) {
|
|
qCritical() << "Cannot register D-Bus service org.ollie.SessionManager:"
|
|
<< bus.lastError().message();
|
|
return 1;
|
|
}
|
|
|
|
if (!bus.registerObject("/org/ollie/SessionManager", &manager)) {
|
|
qCritical() << "Cannot register D-Bus object /org/ollie/SessionManager:"
|
|
<< bus.lastError().message();
|
|
return 1;
|
|
}
|
|
|
|
qDebug() << "ollie-kde daemon started on D-Bus: org.ollie.SessionManager";
|
|
|
|
int rc = app.exec();
|
|
|
|
qDebug() << "ollie-kde daemon exiting";
|
|
return rc;
|
|
}
|