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를 확인하고 대기를 방해하지 않는 것이 있는지 확인하세요. 내 경우에는 크롬의 비디오로 인해 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 창이었습니다. 따라서 걸림 현상을 방지할 수 있는 창을 찾을 때까지 창을 계속 닫아 두십시오.

관련 정보