#include "powermonitor.h" void PowerMonitor::initLogin1Dbus() { // 连接 org.freedesktop.login1 服务(系统总线) m_login1Interface = new QDBusInterface( "org.freedesktop.login1", // DBus 服务名 "/org/freedesktop/login1", // 对象路径 "org.freedesktop.login1.Manager", // 接口名 QDBusConnection::systemBus(), // 系统总线(关键!不是会话总线) this ); // 检查接口是否有效 if (m_login1Interface->isValid()) { // 监听 PrepareForSleep 信号(签名:b = bool) bool connectOk = QDBusConnection::systemBus().connect( "org.freedesktop.login1", // 服务名 "/org/freedesktop/login1", // 对象路径 "org.freedesktop.login1.Manager", // 接口名 "PrepareForSleep", // 信号名 this, SLOT(onPrepareForSleep(bool)) // 接收信号的槽函数 ); if (connectOk) { qDebug() << "================================================="; qDebug() << "✅ 成功连接 login1 电源管理接口"; qDebug() << "================================================="; } else { qDebug() << "================================================="; qDebug() << "❌ 连接 login1 信号失败:" << QDBusConnection::systemBus().lastError().message(); qDebug() << "================================================="; } } else { qDebug() << "================================================="; qDebug() << "❌ 无法创建 login1 接口:" << m_login1Interface->lastError().message(); qDebug() << "================================================="; } } // 槽函数:处理睡眠/唤醒事件 void PowerMonitor::onPrepareForSleep(bool enteringSleep) { if (enteringSleep) { // 系统即将进入 休眠/待机 状态 qDebug() << "================================================="; qDebug() << "\n📥 系统即将进入睡眠(休眠/待机)"; emit aboutToSleep(); } else { // 系统从睡眠中唤醒 qDebug() << "📤 系统已从睡眠中唤醒\n"; qDebug() << "================================================="; emit aboutToWakeUp(); } }