Как скрипт может обнаружить время простоя пользователя?

33

Я хочу проверить внутри bash-скрипта, как долго пользователь X-сессии простаивает.

Сам пользователь не должен использовать bash, а просто X. Если пользователь, например, просто переместил мышь, хорошим ответом будет «простоя в течение 0 секунд». Если он не коснулся компьютера в течение 5 минут, хорошим ответом было бы «бездействовать в течение 300 секунд»

Причина, по которой вы не можете сразу использовать xautolock, заключается в том, чтобы иметь возможность реализовывать некоторые сложные действия. Например, если пользователь бездействует в течение 10 минут, попробуйте приостановить, если он бездействует более 5 минут, отключение (я знаю, это звучит странно, но приостановка не всегда работает здесь ...)

josinalvo
источник

Ответы:

38

Просто нашел простой способ сделать это.

Существует программа под названием xprintidle, которая делает свое дело

получить простой (в миллисекундах) так же просто, как

xprintidle

и установить

apt-get install xprintidle

Для системных администраторов он также работает удаленно.

Из сеанса SSH :

export DISPLAY=:0 && sudo -u john xprintidle

где john - пользователь, вошедший в сеанс X на удаленной машине.

josinalvo
источник
4

Ответ отсюда :

В баш

w | tr -s " " | cut -d" " -f1,5 | tail -n+3

дает вам пару username / idletime для каждой оболочки. Таким образом, в основном вы можете получить информацию о простое через командуw

Дэн
источник
как это рассчитывает взаимодействия с X, которые не через терминал? Как, скажем, движение мыши внутри Firefox. Если пользователь перемещает мышь, я хотел бы получить ответ «не бездействует» или «бездействовать в течение 0 секунд»
josinalvo
@josinalvo wпросто дает вам простой в этом конкретном терминале, я думаю.
Дан
3
Это время простоя фактически является временем работы, временем работы процесса (КАКОЙ столбец вывода w). Таким образом, он не дает представления о том, как долго пользователь простаивал в своей X-сессии.
Рощ