Як 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 ,

    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 вирішує, чи система "не працює".

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


як ви сказали в останньому рядку, чому використання процесора не значне? Мої сумніви, я прийшов з сайту askubuntu.com/questions/215870/… . тому що якщо я покладу завантаження файлу 1 Гб, це може зайняти багато часу. навіть я afk Мій ПК все ще роблять завантаження цього файлу право. Це означає, що мій ПК працює правильно? : D
rɑːdʒɑ

+1 за відмінне розслідування та розбиття. І @AgentCool, ні. Діяльність визначається натисканням клавіатури або миші. Завантаження не буде натискати жодних клавіш і тримати ПК у режимі пробудження.
Oxwivi

@Oxwivi thats коментують майже рік тому. не після редагування. :)
rɑːdʒɑ

@AgentCool Мій поганий, я не помітив. Пост нещодавно зіткнувся, ймовірно, через вчорашню редакцію. Було питання, яке мене цікавило, тому перевірив його.
Oxwivi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.