How to disable screensaver/power-management/screen-blanking when a GTK program is running?(如何在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程序运行时禁用屏幕保护程序/电源管理/屏幕消隐?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐?
基础教程推荐
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 我有静态或动态 boost 库吗? 2021-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 常量变量在标题中不起作用 2021-01-01
