Хорошо, что вы пробовали? Что сказал гугл? Вы пытались выяснить, как заставка обнаруживает это? Пожалуйста, уделите время поиску, прежде чем отправлять вопросы здесь, и прочитайте, как задать хороший вопрос .
тердон
Я только нашел программу, xautolockно примеров нет
Ответы:
20
Я использую программу xprintidleдля определения времени простоя X, которая, я думаю, использует тот же источник данных, что и заставки. xprintidleкажется, на самом деле больше нет апстрима, но пакет Debian жив и здоров.
Это очень простое приложение: оно возвращает количество миллисекунд с момента последнего взаимодействия X:
(примечание: из-за базовой системы она будет постоянно давать значение в мс, немного меньшее, чем «фактическое» время простоя).
Вы можете использовать это, чтобы создать скрипт, который запускает определенную последовательность после пяти минут простоя, например:
#!/bin/sh# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((5*60*1000))# Sequence to execute when timeout triggers.
trigger_cmd(){
echo "Triggered action $(date)"}
sleep_time=$IDLE_TIME
triggered=false
# ceil() instead of floor()while sleep $(((sleep_time+999)/1000));do
idle=$(xprintidle)if[ $idle -ge $IDLE_TIME ];thenif! $triggered;then
trigger_cmd
triggered=true
sleep_time=$IDLE_TIME
fielse
triggered=false
# Give 100 ms buffer to avoid frantic loops shortly before triggers.
sleep_time=$((IDLE_TIME-idle+100))fidone
Смещение в 100 мс происходит из-за ранее отмеченной причуды, xprintidleкоторая всегда будет возвращать время, немного меньшее, чем «фактическое» время простоя, когда выполняется так. Он будет работать без этого смещения, а затем будет более точным с точностью до одной десятой секунды, но он будет запускать xprintidleпроверку неистово в течение последних миллисекунд до окончания интервала. Ни в коем случае не свинья, но я бы посчитал это неуместным.
Я использовал подобный подход в скрипте Perl (плагин irssi) в течение достаточно долгого времени, но вышеописанное было только что написано и не было проверено, за исключением нескольких пробных прогонов во время написания.
Попробуйте это, запустив его в терминале в X. Я рекомендую установить время ожидания, например, 5000 мс для тестирования, и добавить set -xнепосредственно ниже, #!/bin/shчтобы получить информативный вывод, чтобы увидеть, как это работает.
После того, как они были установлены, я скомпилировал вышеуказанное так:
$ gcc xidle.c -o xidle -lX11 -lXext -lXss
Вы можете видеть, что он может сообщить количество секунд, которое X определяет как простой, запустив его так:
$ while[1];do./xidle ; sleep 2;done0.0050001.9480003.9540005.9590007.9650000.073000<--- moved the mouse here which resets it
0.035000
Используя этот исполняемый файл, вы можете собрать сценарий, который может делать что-то вроде этого, отслеживая время простоя, сообщаемое xidle.
$ while[1];do idle=$(./xidle);[ $( echo "$idle > 5"| bc )-eq 0]&& echo "still < 5"|| echo "now > 5";
sleep 2;done
still <5
still <5
still <5
now >5
now >5
still <5
still <5
still <5
Выше показано, still < 5пока не истекло 5 секунд простоя, после чего он начинает говорить now > 5, что означает, что прошло более 5 секунд.
ПРИМЕЧАНИЕ: вы можете включить свой notify-send 'a'в приведенный выше пример.
xautolock
но примеров нетОтветы:
Я использую программу
xprintidle
для определения времени простоя X, которая, я думаю, использует тот же источник данных, что и заставки.xprintidle
кажется, на самом деле больше нет апстрима, но пакет Debian жив и здоров.Это очень простое приложение: оно возвращает количество миллисекунд с момента последнего взаимодействия X:
(примечание: из-за базовой системы она будет постоянно давать значение в мс, немного меньшее, чем «фактическое» время простоя).
Вы можете использовать это, чтобы создать скрипт, который запускает определенную последовательность после пяти минут простоя, например:
Смещение в 100 мс происходит из-за ранее отмеченной причуды,
xprintidle
которая всегда будет возвращать время, немного меньшее, чем «фактическое» время простоя, когда выполняется так. Он будет работать без этого смещения, а затем будет более точным с точностью до одной десятой секунды, но он будет запускатьxprintidle
проверку неистово в течение последних миллисекунд до окончания интервала. Ни в коем случае не свинья, но я бы посчитал это неуместным.Я использовал подобный подход в скрипте Perl (плагин irssi) в течение достаточно долгого времени, но вышеописанное было только что написано и не было проверено, за исключением нескольких пробных прогонов во время написания.
Попробуйте это, запустив его в терминале в X. Я рекомендую установить время ожидания, например, 5000 мс для тестирования, и добавить
set -x
непосредственно ниже,#!/bin/sh
чтобы получить информативный вывод, чтобы увидеть, как это работает.источник
Я использую
xssstate
для таких целей. Он доступен вsuckless-tools
пакете в Debian или Ubuntu , или выше .Затем вы можете использовать следующий скрипт:
источник
Вот приложение C, которое я нашел и которое вы можете скомпилировать.
Для сборки требуется пара библиотек. В моей системе Fedora 19 мне нужны были следующие библиотеки:
После того, как они были установлены, я скомпилировал вышеуказанное так:
Вы можете видеть, что он может сообщить количество секунд, которое X определяет как простой, запустив его так:
Используя этот исполняемый файл, вы можете собрать сценарий, который может делать что-то вроде этого, отслеживая время простоя, сообщаемое
xidle
.Выше показано,
still < 5
пока не истекло 5 секунд простоя, после чего он начинает говоритьnow > 5
, что означает, что прошло более 5 секунд.ПРИМЕЧАНИЕ: вы можете включить свой
notify-send 'a'
в приведенный выше пример.Ссылки
источник
bsd ports (сбор пакетов) имеет программу, которая может сделать это:
http://man.openbsd.org/OpenBSD-current/man1/xidle.1
она доступна, например, здесь:
http://distcache.freebsd.org/local- DISTFILES / роман / xidle-26052015.tar.bz2
построить как:
обратите внимание, что -program должен содержать полный путь к двоичному файлу, так как он передается в execv ().
источник