Как заставить приложение Java обнаруживать, что ПК с Linux вернулся из приостановленного состояния (спящий режим)? - PullRequest
2 голосов
/ 20 ноября 2011

В приложении Java Swing для настольных ПК, работающем в Linux (например, Ubuntu), как приложение может быть уведомлено о том, что ПК только что вышел из спящего / приостановленного / спящего режима?

Гашение экрана не является проблемой.Все остальные состояния приостановки или гибернации (приостановка в ОЗУ или приостановка на диск) представляют интерес (и для моих целей они будут обрабатываться одинаково).

Моя цель - автоматически вызывать метод класса, когда ПКили устройство возобновлено.(Этот метод должен перезапустить rxtxSerial, fwiw.)

РЕДАКТИРОВАТЬ: комментарий от Thorbjørn Равн Андерсен заставил меня понять, что мой вопрос не ясен.Моя цель - прослушать событие операционной системы (или использовать файл системного журнала), которое указывало бы на то, что система только что возобновила работу из приостановленного состояния.

Ответы [ 3 ]

3 голосов
/ 20 ноября 2011

Пусть поток демона читает системное время, скажем, раз в секунду.Если между двумя показаниями есть (заметный) разрыв, ваша система просто проснулась.Однако я не совсем уверен, может ли это предотвратить переход системы в спящий режим.

0 голосов
/ 23 ноября 2011

Вот что предложил инженер поддержки Canonical.


20/11/2011 22:53 |Джейсон Мое предложение - создать скрипт в /etc/pm/sleep.d/.Скрипт будет выполнен при возобновлении работы с приостановки.Пожалуйста, обратитесь к /usr/share/doc/pm-utils/HOWTO.hooks.gz для деталей.


Вот вступление из этого файла:

Как написатьХук pm-utils:

PARAMETERS

Хук pm-utils - это просто исполняемый файл, который принимает хотя бы один параметр.

Для ловушек в sleep.d потенциальные значения первого параметра:

suspend - ловушка ДОЛЖНА выполнять любое действие, подходящее, когда система готовится к спящему режиму памяти (или ееэквивалентно).

резюме - ловушка ДОЛЖНА выполнять любое действие, подходящее, когда система выходит из режима ожидания.

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 $?
0 голосов
/ 20 ноября 2011

Насколько мне известно, во время выполнения Java по умолчанию нет класса, который бы предоставлял эту информацию, и, насколько я знаю, нет никакого стандартного способа сказать эти вещи.

Я хотел бы предложить вам понятьузнать, как получить необходимую информацию из операционной системы - например, сценарий, который можно установить и затем запускать каждый раз, когда система изменяет состояние приостановки, - и позволить этому сценарию / собственному двоичному файлу отправить вашей программе Java сообщение (или поместить файл всогласованное местоположение).

Учтите, что Linux-боксы являются многопользовательскими системами, и ваша программа может вызываться более одного раза, поэтому вы должны быть осторожны с тем, что вы предполагаете при разработке механизма.

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

...