문제의 화면은 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
라즈베리파이 포인트 - https://www.raspberrypi.org/forums/viewtopic.php?t=16472&p=176258
답변2
YouTube 비디오를 재생할 때 DPMS가 비활성화되고 출력에 "모니터 켜기/끄기" 줄이 없습니다 xset q
.
이벤트 기반은 아니지만 X 디스플레이 관리자를 사용하고 일부 C 코드를 컴파일해도 괜찮다면 DPMS가 비활성화된 상태에서도 작동합니다.
스크립트 이름을 "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);
}