Как заставить 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 являются многопользовательскими системами, и ваша программа может быть вызвана более одного раза, поэтому вы должны быть осторожны с тем, что вы предполагаете при разработке механизма.

Из любопытства, почему ваша программа должна знать?