X11 - DPMSがモニターを一時停止するのを妨げる要因が何であるかをどのように確認しますか?

X11 - DPMSがモニターを一時停止するのを妨げる要因が何であるかをどのように確認しますか?

[ノート:気づくエマルジョンしかし、決して返信を受けませんでした。 ]

私はをi3使用しています。archlinux2分間アクティビティがない場合は、ディスプレイが一時停止するようにDPMSを設定しました(xset dpms 0 120 180)。しかし、常に自動的に起動するわけではないことがわかりました。実行はxset dpms force問題なく動作するため、ハードウェアの問題ではないと思います。

私の設定:

$ xset q
Keyboard Control:
  auto repeat:  on    key click percent:  0    LED mask:  00000000
  XKB indicators:
    00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off
    03: Compose:     off    04: Kana:        off    05: Sleep:       off
    06: Suspend:     off    07: Mute:        off    08: Misc:        off
    09: Mail:        off    10: Charging:    off    11: Shift Lock:  off
    12: Group 2:     off    13: Mouse Keys:  off
  auto repeat delay:  660    repeat rate:  25
  auto repeating keys:  00ffffffdffffbbf
                        fadfffefffedffff
                        9fffffffffffffff
                        fff7ffffffffffff
  bell percent:  50    bell pitch:  400    bell duration:  100
Pointer Control:
  acceleration:  2/1    threshold:  4
Screen Saver:
  prefer blanking:  yes    allow exposures:  yes
  timeout:  0    cycle:  600
Colors:
  default colormap:  0x22    BlackPixel:  0x0    WhitePixel:  0xffffff
Font Path:
  /usr/share/fonts/TTF/,/usr/share/fonts/OTF/,built-ins
DPMS (Energy Star):
  Standby: 0    Suspend: 120    Off: 180
  DPMS is Enabled
  Monitor is On

DPMSの設定によってモニターが一時停止するのを妨げる要因は何ですか?

答え1

この小さなプログラムを使用して、一部のユーザー入力(敏感なマウスが多いですか)によって発生したか、またはアプリケーションがXScreenSaver拡張アイドルタイマーを積極的にリセットして発生したかを確認できます。

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/extensions/scrnsaver.h>

/* Report amount of X server idle time. */
/* Build with- */
/* cc xidle.c -o xidle -lX11 -lXext -lXss */


int main(int argc, char *argv[])
{
Display *display;
int event_base, error_base;
XScreenSaverInfo info;
float seconds;

display = XOpenDisplay("");

if (XScreenSaverQueryExtension(display, &event_base, &error_base)) {
XScreenSaverQueryInfo(display, DefaultRootWindow(display), &info);

seconds = (float)info.idle/1000.0f;
printf("%f\n",seconds);
return(0);
}
else {
fprintf(stderr,"Error: XScreenSaver Extension not present\n");
return(1);
}
}

答え2

2022年にこの問題が発生した場合は、$ HOMEで.xsession_errorsを確認し、待機を妨げないものがないかどうかを確認してください。私の場合、ChromeのビデオのためにDPMSがディスプレイをオフにするのを防ぎました。

powerdevil: Enforcing inhibition from ":1.23" "/usr/bin/google-chrome-stable" with cookie 3821 and reason "Video Wake Lock"
powerdevil: Added change screen settings
powerdevil: Added interrupt session
powerdevil: Disabling DPMS due to inhibition

答え3

@ L29Ahの答えを改善するために、GithubにはXが入力イベントなしで歩く時間を印刷するプログラムがあります。https://github.com/g0hl1n/xprintidle

したがって、X入力がモニターの停止を妨げているかどうかを確認するには、次のようにします。

$ xset dpms 3 3 3  # Set your monitor to turn off after 10 seconds:
$ while true; do sleep 1 && xprintidle; done

3秒後も時間が増え続けると、モニターの電源が切れるのを妨げるのはX入力ではありません。

私の場合は焦点が合っていると思いましたが、実際にはそうではない迷子になったSMPlayerウィンドウでした。したがって、詰まりを防ぐことができるウィンドウが見つかるまで、ウィンドウを閉じ続けます。

関連情報