Как Ubuntu определяет бездействие перед приостановкой?
Я установил его на "приостановить, когда неактивен" через 30 минут.
Как он определяет, является ли он неактивным? Это просто пользовательский ввод с клавиатуры / мыши?
Если я оставлю программу без работы - скажем, обработка видео, которая занимает много времени, приостановится ли она через 30 минут и остановит ли эту программу? Тот же вопрос для долгих загрузок, приостановится ли он на полпути.
1 ответ
Хороший вопрос. Давайте разберемся!
Начиная с изучения опции "Приостановить, когда неактивен для",
<property ...>Suspend when inactive for</property> ... <object ... id="combobox_sleep_ac">
мы можем узнать, что он устанавливает ключ GSettings под названием
sleep-inactive-ac-timeout
:widget = GTK_WIDGET (gtk_builder_get_object (..., "combobox_sleep_ac")); ... g_object_set_data (G_OBJECT(widget), "_gsettings_key", "sleep-inactive-ac-timeout");
Документация по этому ключу дает краткое описание:
Время в секундах, в течение которого компьютер, подключенный к сети переменного тока, должен быть неактивен, прежде чем перейти в спящий режим. Значение 0 означает никогда.
но все еще не объясняет, что означает "неактивный".
В поисках
sleep-inactive-ac-timeout
приводит нас к демону настроек GNOME,timeout_sleep = g_settings_get_int (..., "sleep-inactive-ac-timeout");
который периодически проверяет свойство сеанса GNOME, называемое
Presence.status
:result = g_dbus_proxy_get_cached_property (...->session_presence_proxy, "status");
Если он обнаруживает, что статус неактивен, он переводит систему в спящий режим:
idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);
Поэтому нам нужно узнать, как GNOME Session решает, является ли система "бездействующей".
Следуя назад, откуда GNOME Session обновляет значение
Presence.status
,gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);
мы можем видеть, что он использует
IDLETIME
счетчик от Xorg:if (... && strcmp (counters[i].name, "IDLETIME") == 0) { ...->counter = counters[i].counter;
IDLETIME
Поведение счетчика обобщено в сообщении в блоге автора GNOME Power Manager:gnome-power-manager использует в Xorg счетчик IDLETIME. Этот счетчик увеличивается только тогда, когда пользователь не перемещает мышь или нажимает некоторые клавиши. Когда пользователь что-то щелкает, IDLECOUNTER сбрасывается.
Это говорит нам о том, что Ubuntu определяет бездействие, измеряя количество времени, прошедшее с момента последнего нажатия клавиши или движения мыши. Загрузка процессора и сетевая активность не учитываются.