引用:

引用:

問題の画面は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);
}

関連情報