参考:

参考:

有问题的屏幕是 HDMI。通过单击屏幕上的电容按钮来启动电源关闭/打开操作。

我只需要知道是否有办法获取“现在屏幕打开”、“现在屏幕关闭/拔掉电源”、“现在屏幕处于待机模式”等事件。

如果可能的话,我想避免基于计时器的方法并依赖事件(但是,基于计时器的方法仍然比没有线索要好)。

答案1

答案2

当我播放 Youtube 视频时,它会禁用 DPMS,然后在输出中没有“监视器打开/关闭”行xset q

虽然它不是事件驱动的,但即使禁用 DPMS,它也能工作——如果您使用 X 显示管理器并且不介意编译一些 C 代码。

将脚本命名为“is_monitor_on.c”并使用命令进行编译:gcc ./is_monitor_on.c -o ./is_monitor_on -lX11 -lXss

#include <X11/Xlib.h>
#include <X11/extensions/scrnsaver.h>
#include <stdio.h>

int main() {
    Display *display = XOpenDisplay(NULL);

    if (display == NULL) {
        fprintf(stderr, "Unable to open display\n");
        return 1;
    }

    int screen = DefaultScreen(display);

    XScreenSaverInfo *info = XScreenSaverAllocInfo();
    XScreenSaverQueryInfo(display, RootWindow(display, screen), info);

    if (info->state == ScreenSaverOn) {
        printf("Screen is off or locked.\n");
    } else {
        printf("Screen is on and not locked.\n");
    }

    XCloseDisplay(display);
    XFree(info);
}

相关内容