有问题的屏幕是 HDMI。通过单击屏幕上的电容按钮来启动电源关闭/打开操作。
我只需要知道是否有办法获取“现在屏幕打开”、“现在屏幕关闭/拔掉电源”、“现在屏幕处于待机模式”等事件。
如果可能的话,我想避免基于计时器的方法并依赖事件(但是,基于计时器的方法仍然比没有线索要好)。
答案1
想xset q
拿到DPMS设置。似乎在说“监视器已打开”之类的内容
参考:
- 如何将我的 HDMI 显示器置于(或退出)省电模式?
- https://systembash.com/how-to-turn-off-your-monitor-via-command-line-in-ubuntu/
- http://linux.die.net/man/1/vbetool
- https://superuser.com/questions/942468/xset-dpms-command-is-not-shutting-down-the-monitor
vbetool
-tvservice
Raspberry Pi 的点 - https://www.raspberrypi.org/forums/viewtopic.php?t=16472&p=176258
答案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);
}