Как определить, почему xprintidle продолжает “сбрасывать” каждые 30 секунд

Я пытаюсь использовать xprintidle получить X (Единица) время простоя так, чтобы я мог поместить свой монитор для сна после определенного времени. (Я должен использовать xset dpms force off потому что мой монитор не возвратится на том, когда использование нормальной Ubuntu приводит в действие/приостанавливает настройки. Другая проблема...), Но xprintidle будет сбрасывать к 0 мс каждые 30 секунд, использую ли я свою машину или нет. т.е. ли я перемещаю мышь/нажатие/прокрутку или ввожу на клавиатуре. Я подозреваю, что что-то заставляет Единицу думать, что я не неактивен, но я не могу выяснить, каково это могло бы быть.

Вот вывод, показывающий проблему:

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% 

Заметьте, как время простоя сбрасывает в 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

[Редактирование] я также попытался получить время простоя непосредственно от расширения XScreenSaver, как сделано здесь в ответе Andrey Sidorov, но я сбрасывал тот же таймер каждые 30 секунд.

Документация x.org только упоминает

Неактивное поле указывает количество миллисекунд, так как последний вход был получен от пользователя на любом из устройств ввода данных.

3
задан 23 May 2017 в 15:39

1 ответ

Рассмотрение источника для 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.

Так, я предполагаю, что перемещение мыши перезагрузило бы перерыв. Это имеет смысл, так как рассматриваемый перерыв ведет, чтобы показать гашение/захват.

Взгляд далее в источнике, каждый видит функции это 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
5
ответ дан 1 December 2019 в 15:37

Другие вопросы по тегам:

Похожие вопросы: