如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐?

How to disable screensaver/power-management/screen-blanking when a GTK program is running?(如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐?)
本文介绍了如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题

是否有方法可以防止X会话启动屏幕保护程序、进入省电模式或从代码执行屏幕消隐?

我使用的内容

语言:C/C++ GUI框架:GTK3 硬件:覆盆子PI 3B 软件:Raspbian 10-Buster

我的程序需要在没有用户交互的情况下在GUI运行的情况下长时间(最长12小时)在屏幕上运行。GUI充当现场系统的状态监视器(如果屏幕变黑,则说明出现问题)。

我知道的内容

GTK3可以确定屏幕保护程序是否处于活动状态

GTK3有一个布尔属性用于报告系统的屏幕保护程序是否处于活动状态(请参阅here),但文档中没有其他引用。

Raspbian使用屏幕消隐

Raspbian未随xscreensaver或其他软件包一起安装以控制关闭屏幕时间。相反,它主要依赖于X到空白屏幕。这可以作为超级用户使用xset命令进行管理。执行此操作的规范方法在特定于硬件的堆栈交换(here)中报告。

无法信任最终用户

在我的情况下,该程序将由几乎不懂计算机的人使用。结果必须是用户友好的,并且不期望用户触摸终端,更不用说永久更改X的启动配置了。虽然一种选择是将程序作为自定义的Raspbian磁盘映像分发,但我想探索其他选择。

我需要查看示例

虽然有一些地方可以开始使用this question,但实现它们是有问题的。当我尝试在带有和不带有注释行的情况下使用下面的MWE时,没有任何反应。我无法模拟屏幕消隐功能。

#include <X11/extensions/scrnsaver.h>

int main() {
    // XScreenSaverSuspend;
    XForceScreenSaver;
    usleep(1000000);
    return 0;
}

推荐答案

您必须将参数传递给函数:

void XScreenSaverSuspend(Display *dpy, Bool suspend);
#include <X11/extensions/scrnsaver.h>

int main() {
    XScreenSaverSuspend (display, True);
    usleep(1000000);
    return 0;
}

但我认为您没有时间查看此程序的结果,并且当程序结束时,屏幕保护程序将返回到其以前的状态。

对于您的GTK框架,您可以获取Display用法:

Display *
gdk_x11_display_get_xdisplay (GdkDisplay *display);

单据here。

对于X:

/* use the information from the environment variable DISPLAY 
   to create the X connection:
*/  
Display * dis = XOpenDisplay((char *)0); // or ":0.0"

这篇关于如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

error when trying to run an overloaded function with float parameters.(尝试运行带有浮点参数的重载函数时出错。)
C++ lt;lt; operator overloading without friend function(没有友元函数的C++lt;lt;运算符重载)
C++ - How does the compiler decide between overloaded functions with reference types as parameter?(C++-编译器如何决定使用引用类型作为参数的重载函数?)
How can I invoke an overloaded () operator on the keyword this?(如何对关键字this调用重载()运算符?)
How do I denote a pure virtual function in a UML class diagram?(如何在UML类图中表示纯虚函数?)
MPI parallel IO in ASCII format (How do I do it?)(ASCII格式的MPI并行IO(我该怎么做?))