#include "powermonitor_linux.h" #ifdef Q_OS_LINUX #include PowerMonitorLinux::PowerMonitorLinux(QObject *parent) : PowerMonitorBase(parent) , m_login1Interface(nullptr) { } PowerMonitorLinux::~PowerMonitorLinux() { if (m_login1Interface) { delete m_login1Interface; m_login1Interface = nullptr; } } bool PowerMonitorLinux::initialize() { return initLogin1Dbus(); } bool PowerMonitorLinux::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()) { qDebug() << "================================================="; qDebug() << "❌ 无法创建 login1 接口:" << m_login1Interface->lastError().message(); qDebug() << "================================================="; return false; } // 监听 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 电源管理接口(Linux)"; qDebug() << "================================================="; return true; } else { qDebug() << "================================================="; qDebug() << "❌ 连接 login1 信号失败:" << QDBusConnection::systemBus().lastError().message(); qDebug() << "================================================="; return false; } } void PowerMonitorLinux::onPrepareForSleep(bool enteringSleep) { if (enteringSleep) { // 系统即将进入 休眠/待机 状态 emitAboutToSleep(); } else { // 系统从睡眠中唤醒 emitAboutToWakeUp(); } } #endif // Q_OS_LINUX