인용하다:

인용하다:

문제의 화면은 HDMI입니다. 화면의 정전식 버튼을 클릭하여 전원 끄기/켜기 작업을 시작합니다.

"화면이 지금 켜져 있습니다", "화면이 현재 꺼져 있습니다/플러그가 분리되어 있습니다", "화면이 현재 대기 모드에 있습니다" 등의 이벤트를 얻을 수 있는 방법이 있는지 알고 싶습니다.

가능하다면 타이머 기반 접근 방식을 피하고 이벤트에 의존하고 싶습니다(그러나 타이머 기반 접근 방식은 여전히 ​​단서가 없는 것보다 낫습니다).

답변1

답변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);
}

관련 정보