首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X11 -我如何确定什么是阻止DPMS暂停我的显示器?

X11 -我如何确定什么是阻止DPMS暂停我的显示器?
EN

Unix & Linux用户
提问于 2018-03-31 07:38:58
回答 3查看 3.8K关注 0票数 11

[<#>注意:注意到类似的问题,但它从未收到响应。]

我在archlinux上使用D2。我已经设置了DPMS,以便在2分钟不活动(xset dpms 0 120 180)后暂停显示。然而,我注意到它并不总是自动启动。我不认为这是一个硬件问题,因为执行xset dpms force没有问题。

我的设置:

代码语言:javascript
复制
$ 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设置确定是什么阻止我的显示器挂起?

EN

回答 3

Unix & Linux用户

发布于 2019-03-29 01:32:33

您可以使用这个小程序来检查它是否是某个用户输入的结果(过于敏感的鼠标?)或者应用程序主动重置XScreenSaver扩展空闲计时器:

代码语言:javascript
复制
#include 
#include 
#include 

/* 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);
}
}
票数 5
EN

Unix & Linux用户

发布于 2022-06-10 18:33:49

对于在2022年发生这种情况的人,请在您的$HOME中检查$HOME,看看是否有什么东西没有阻止待机。在我的例子中,一段用chrome显示的视频阻止DPMS关闭监视器。

代码语言:javascript
复制
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
EN

Unix & Linux用户

发布于 2023-01-25 19:43:33

为了改进@L29Ah的答案,在Github上有一个程序可以打印X在没有输入事件的情况下已经走了多长时间:https://github.com/g0hl1n/xprintidle

因此,要隔离X输入是否阻止监视器挂起,请执行以下操作:

代码语言:javascript
复制
$ xset dpms 3 3 3  # Set your monitor to turn off after 10 seconds:
$ while true; do sleep 1 && xprintidle; done

如果时间持续增加,即使在3秒之后,阻止监视器关闭的不是X输入。

在我的例子中,它是一个流浪的SMPlayer窗口,当它真的不是的时候,它肯定认为它是聚焦的。所以请继续关闭窗口,直到找到防止挂起的窗口。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/434625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档