Как заставить Java-приложение обнаружить, что ПК Linux возобновился из приостановленного состояния (спящий режим)?
1 MountainX [2011-11-20 00:25:00]
В настольном приложении Java Swing, запущенном на Linux (например, Ubuntu), как приложение может быть уведомлено о том, что ПК только что вернулся из состояния спящего/приостановленного/спящего режима?
Заглушение экрана не вызывает беспокойства. Интересны все остальные приостановленные или спящие состояния (приостановка в ОЗУ или приостановка на диск) (и для моих целей все они будут обрабатываться одинаково).
Моя цель - автоматически вызвать метод класса при возобновлении работы ПК или устройства. (Этот метод должен перезапустить rxtxSerial, fwiw.)
EDIT: Комментарий от Thorbjørn Ravn Andersen заставил меня понять, что мой вопрос не ясен. Моя цель - прослушивать событие операционной системы (или использовать файл системного журнала), который указывает, что система только что возобновилась из приостановленного состояния.
java linux
3 ответа
0 Решение MountainX [2011-11-23 00:26:00]
Вот что предложил канонический инженер поддержки.
20/11/2011 22:53 | Джейсон. Мое предложение - создать сценарий под /etc/pm/sleep.d/. Сценарий будет выполняться, когда возобновление приостановлено. Для получения дополнительной информации обратитесь к /usr/share/doc/pm-utils/HOWTO.hooks.gz.
Здесь ввод из этого файла:
Как написать крюк pm-utils:
ПАРАМЕТРЫ
Крючок pm-utils - это просто исполняемый файл, который принимает хотя бы один параметр.
Для крючков в sleep.d потенциальными значениями первого параметра являются:
suspend - Крючок ДОЛЖЕН выполнять любое действие, соответствующее тому, когда система готовится к сон памяти (или его эквиваленту).
resume - Крючок ДОЛЖЕН выполнять любое действие, соответствующее тому, когда система выходит из строя.
hibernate - Крючок ДОЛЖЕН выполнять любые действия, которые подходят, когда система готовится к приостановке на диск.
оттаивание - крючок ДОЛЖЕН выполнять любое действие, подходящее, когда система выходит из приостановки на диск.
help - Если ваш крючок анализирует переменную среды PM_CMDLINE для коммутаторов, эта функция ДОЛЖНА выводить текст, описывающий параметры, которые он анализирует, в удобном для понимания формате конечным пользователем.
Используемый фактический метод сна будет передан в качестве второго параметра - если ваш крючок должен обрабатывать suspend-hybrid (или любой другой метод, специфичный для платформы), он должен изучить второй параметр.
Для крючков в power.d потенциальные значения этого параметра: true - крючок ДОЛЖЕН выполнять любое действие, подходящее, когда система переходит к мощности аккумулятора. false - Крючок ДОЛЖЕН выполнять любое действие, подходящее, когда система переходит из батареи.
И вот пример:
#!/bin/bash
case "$1" in
hibernate|suspend)
ACTION BEFORE SUSPEND/HIBERNATE
;;
thaw|resume)
ACTION AFTER RESUME
;;
*)
;;
esac
exit $?
2 Mike Adler [2011-11-20 01:19:00]
Прочитайте системное время демона, скажем, один раз в секунду. Если между двумя показаниями имеется (заметный) разрыв, ваша система просто проснулась. Не совсем уверен, что это, в первую очередь, помешало бы системе засыпать.
0 Thorbjørn Ravn Andersen [2011-11-20 01:38:00]
Насколько мне известно, нет класса в среде исполнения Java по умолчанию, которая предоставляет эту информацию, и, насколько мне известно, нет стандартного способа сказать об этом.
Я бы посоветовал вам выяснить, как получить нужную информацию из операционной системы - например, скрипт, который можно установить, а затем запускать каждый раз, когда система изменяет состояние приостановки - и пусть этот скрипт/родной двоичный код отправит вашу программу Java сообщение (или поместить файл в согласованное место).
Учтите, что ящики Linux являются многопользовательскими системами, и ваша программа может быть вызвана более одного раза, поэтому вы должны быть осторожны с тем, что вы предполагаете при разработке механизма.
Из любопытства, почему ваша программа должна знать?