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