如何确定为什么 xprintidle 每 30 秒保持“重置”

SO_*_*bug 4 gui command-line xorg unity 15.04

我正在尝试使用xprintidleX (Unity) 空闲时间,以便我可以在一段时间后让我的显示器进入睡眠状态。(我必须使用,xset dpms force off因为在使用正常的 Ubuntu 电源/挂起设置时我的显示器不会重新启动。不同的问题......)但xprintidle无论我是否使用我的机器,都会每 30 秒重置为 0 毫秒。即,无论我是移动鼠标/点击/滚动还是在键盘上打字。我怀疑有什么事情导致 Unity 认为我没有闲着,但我不知道那可能是什么。

这是显示问题的输出:

x-pc-linux% while [[ $(xprintidle) -lt 60000 ]]; do
                echo "$(date +%T) $(xprintidle)" && sleep 1;
            done
13:24:47 12
13:24:48 917
13:24:49 1924
13:24:50 2933
13:24:51 3940
13:24:52 4946
13:24:53 5955
13:24:54 6963
13:24:55 7969
13:24:56 8976
13:24:57 9982
13:24:58 10990
.
. # snip
.
13:25:08 21061
13:25:09 22069
13:25:10 23078
13:25:11 24085
13:25:12 342
13:25:13 1350
13:25:14 2358
13:25:15 3364
13:25:16 4372
13:25:17 5380
13:25:18 6388
13:25:19 7395
13:25:20 8402
13:25:21 9409
13:25:22 10417
.
. # snip
.
13:25:35 23511
13:25:36 24519
13:25:37 25525
13:25:38 26532
13:25:39 27540
13:25:40 28549
13:25:41 29556
13:25:42 551
13:25:43 1559
13:25:44 2566
^C% 
Run Code Online (Sandbox Code Playgroud)

请注意空闲时间如何在 12 秒和 42 秒标记处重置。(好吧,我有最终的答案,但不是这个问题!)

我也试过运行w“w”命令的空闲时间输出是什么?),但不幸的是它显示“?xdm?” X 空闲时间。

x-pc-linux% w
 13:37:47 up 2 days,  3:28,  4 users,  load average: 1.76, 2.04, 2.07
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
***      :0       :0               Sat10   ?xdm?   4days  0.59s /sbin/upstart --user
***      pts/1    :0               Sat10    2:09m  0.39s  0.30s zsh
***      pts/4    :0               Sun14    0.00s  5:34   0.00s w
***      pts/12   192.168.1.144    11:20   20:11  13.41s 13.32s zsh
Run Code Online (Sandbox Code Playgroud)

[编辑]我也尝试直接从扩展的xscreensaver为完成获得空闲时间这里的安德烈·西多罗夫的答案,但我得到了相同的计时器每30秒重置。

x.org文件只提到

idle 字段指定自在任何输入设备上从用户接收到最后一次输入以来的毫秒数。

wal*_*tor 6

查看源代码xprintidle(请参阅下文了解我是如何做到的),我们看到:

This program prints the "idle time" of the user to stdout.  The "idle
time" is the number of milliseconds since input was received on any
input device.  If unsuccessful, the program prints a message to stderr
and exits with a non-zero exit code.
Run Code Online (Sandbox Code Playgroud)

所以,我想移动鼠标会重置超时。这是有道理的,因为有问题的超时导致屏幕消隐/锁定。

在源代码中进一步查看,可以看到xprintidle使用的功能。(XScreenSaverAllocInfo()DPMSQueryExtension()等)。阅读man这些功能的页面将为您提供更多详细信息 ( man XScreenSaverAllocInfo)。

我是如何获得来源的:

# Includes several set-up-the-environment steps
mkdir ${HOME}/apt-src  
cd ${HOME}/apt-src
sudo apt-get install apt-src
apt-src install xprintidle
cd xprintidle-0.2/
ls
less xprintidle.c
cd ..
apt-src remove xprintidle
Run Code Online (Sandbox Code Playgroud)