首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编程防止linux计算机睡眠或打开屏幕保护程序?

如何编程防止linux计算机睡眠或打开屏幕保护程序?
EN

Stack Overflow用户
提问于 2015-07-19 04:52:34
回答 3查看 4.4K关注 0票数 19

在C++上开发一个小型跨平台游戏时,我遇到了以下问题:当玩家在玩USB游戏时,不碰键盘或鼠标,电脑就会自动睡觉。

在Windows环境下,使用SetThreadExecutionState函数可以很容易地完成任务。在OS中,我认为它可以用UpdateSystemActivity完成,但还没有经过测试。

但问题是,在Linux中,DE之间没有什么比普通API更好的了。我发现在Gnome中,您可以通过使用DBus调用Inhibit()Uninhibit()来停止自动挂起,但它只适用于Gnome。

那么,是否存在一种编程交叉DE方式(或者非DE方式,例如,如果用户使用的是dwmawesome wm之类的东西),以防止Linux系统(使用Xorg,当然也没有根访问)在不改变用户配置文件的情况下睡眠或打开屏幕保护程序?

PS:不要认为太复杂,但不知道有多不幸。

EN

Stack Overflow用户

发布于 2019-02-11 11:19:07

我用的是QTDBUS

代码语言:javascript
运行
复制
QDBusConnection bus = QDBusConnection::sessionBus();
if(bus.isConnected())
{
    QString services[MAX_SERVICES] = {
        "org.freedesktop.ScreenSaver",
        "org.gnome.SessionManager"
    };
    QString paths[MAX_SERVICES] = {
        "/org/freedesktop/ScreenSaver",
        "/org/gnome/SessionManager"
    };

    for(int i = 0; i < MAX_SERVICES ; i++)
    {        
        QDBusInterface screenSaverInterface(
            services[i], paths[i],services[i], bus, this);
        if (!screenSaverInterface.isValid())
            continue;       

        QDBusReply<uint> reply = screenSaverInterface.call(
            "Inhibit", "YOUR_APP_NAME", "REASON");
        if (reply.isValid())
        {
            cookieID = reply.value();
            qDebug()<<"succesful"
        } else {   
            QDBusError error =reply.error();
            qDebug()<<error.message()<<error.name();   
        }
    }
}
票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31498114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档