Как Ubuntu определяет бездействие перед приостановкой?

14

Я установил «приостановить, когда неактивен» через 30 минут.

Как он определяет, является ли он неактивным? Это просто пользовательский ввод с клавиатуры / мыши?

Если я оставлю программу без работы - скажем, обработка видео, которая занимает много времени, приостановится ли она через 30 минут и остановит ли эту программу? Тот же вопрос для долгих загрузок, приостановится ли он на полпути.

Джаз
источник
Есть поиск wake up calls.
Rinzwind
В Аскубунту? Я только что попробовал, и все ответы, кажется, относятся к пробуждению системы от приостановки или подобного.
Джаз

Ответы:

19

Хороший вопрос. Давай выясним!

  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 означает никогда.

    но все еще не объясняет, что означает «неактивный».

  2. Поиск по sleep-inactive-ac-timeoutприводит нас к GNOME Настройки Daemon ,

    timeout_sleep = g_settings_get_int (..., "sleep-inactive-ac-timeout");

    который периодически проверяет свойство GNOME Session, называемое Presence.status:

    result = g_dbus_proxy_get_cached_property (...->session_presence_proxy, "status");

    Если он обнаруживает, что статус неактивен , он переводит систему в спящий режим :

    idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);

    Итак, нам нужно узнать, как GNOME Session решает, является ли система «бездействующей».

  3. Следуя назад, откуда 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;
  4. В IDLETIMEповедение счетчика резюмируется в блоге по автору GNOME Power Manager:

    gnome-power-manager использует в Xorg счетчик IDLETIME. Этот счетчик увеличивается только тогда, когда пользователь не перемещает мышь или нажимает некоторые клавиши. Когда пользователь что-то щелкает, IDLECOUNTER сбрасывается.

Это говорит нам о том, что Ubuntu определяет бездействие, измеряя количество времени, прошедшее с момента последнего нажатия клавиши или движения мыши. Загрузка процессора и сетевая активность не учитываются.

ændrük
источник
как вы сказали в последней строке, почему загрузка процессора невелика? Я сомневаюсь, что я пришел с askubuntu.com/questions/215870/… . потому что если я поставлю загрузку 1ГБ файла, то это может занять много времени. даже я афк Мой ПК все еще делает загрузку этого файла правильно. Это означает, что мой компьютер активен, верно? : D
rɑːdʒɑ
+1 за отличное расследование и разбивку. И @AgentCool, нет. Активность определяется нажатием клавиатуры или мыши. Ваша загрузка не собирается нажимать какие-либо клавиши и держать бодрствующий компьютер.
Oxwivi
@Oxwivi это комментарий почти год назад. не после редактирования. :)
rɑːdʒɑ
@AgentCool Мой плохой, я не заметил. Сообщение было недавно увеличено, вероятно, из-за вчерашнего редактирования. Был вопрос, который меня интересовал, поэтому проверил его.
Oxwivi