Гарне питання. Давай дізнаємось!
Спочатку досліджуючи параметр "Призупинити, коли неактивний для",
<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 визначає бездіяльність, вимірюючи кількість часу, що минув з моменту останнього натискання клавіші чи руху миші. Використання процесора та мережева активність не враховують.
wake up calls
.