W jaki sposób ubuntu określa brak aktywności przed zawieszeniem?

14

Ustawiłem go na „zawieszenie, gdy jest nieaktywny” po 30 minutach.

Jak określa, czy jest nieaktywny? Czy to tylko dane wprowadzane przez użytkownika za pomocą klawiatury / myszy?

Jeśli zostawię program działający bez końca - powiedzmy, że przetwarzanie wideo zajmuje dużo czasu, czy zawiesi się ono po 30 minutach i zatrzyma ten program? To samo pytanie dla długich pobrań, czy zawiesi się w połowie.

Jazz
źródło
Wyszukaj wake up calls.
Rinzwind
W Askubuntu? Właśnie go wypróbowałem i wszystkie odpowiedzi wydają się dotyczyć budzenia systemu z zawieszenia lub podobnego.
Jazz

Odpowiedzi:

19

Dobre pytanie. Dowiedzmy Się!

  1. Rozpocznij od zbadania opcji „Zawieś, gdy nieaktywna dla”,

    <property ...>Suspend when inactive for</property> ...
    <object ... id="combobox_sleep_ac">
    

    możemy dowiedzieć się, że ustawia klucz GSettings o nazwie 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");
    

    Dokumentacja dla tego klucza zapewnia krótki opis:

    Czas w sekundach, przez jaki komputer zasilany prądem przemiennym musi być nieaktywny, zanim przejdzie w tryb uśpienia. Wartość 0 oznacza nigdy.

    ale nadal nie wyjaśnia, co oznacza „nieaktywny”.

  2. Szukając dla sleep-inactive-ac-timeoutprowadzi nas do GNOME Ustawienia Daemon ,

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

    który okresowo sprawdza właściwość sesji GNOME o nazwie Presence.status:

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

    Jeśli stwierdzi, że status jest bezczynny , system przechodzi w tryb uśpienia :

    idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);

    Musimy więc dowiedzieć się, jak Sesja GNOME decyduje, czy system jest „bezczynny”.

  3. Idąc wstecz od miejsca, w którym Sesja GNOME aktualizuje wartość Presence.status,

    gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);

    widzimy, że używa się IDLETIMElicznik z Xorg:

    if (... && strcmp (counters[i].name, "IDLETIME") == 0) {
        ...->counter = counters[i].counter;
    
  4. Zachowanie IDLETIMElicznika zostało podsumowane w blogu autora GNOME Power Manager:

    gnome-power-manager używa licznika w Xorg o nazwie IDLETIME. Ten licznik jest zwiększany tylko wtedy, gdy użytkownik nie porusza myszą lub nie klika niektórych klawiszy. Gdy użytkownik coś kliknie, IDLECOUNTER jest resetowany.

To mówi nam, że Ubuntu określa brak aktywności poprzez pomiar czasu, który upłynął od ostatniego naciśnięcia klawisza lub ruchu myszy. Wykorzystanie procesora i aktywność sieciowa nie uwzględniają.

ændrük
źródło
jak powiedziałeś w ostatniej linii, dlaczego użycie procesora nie jest znaczące? Moja wątpliwość jest pochodzę askubuntu.com/questions/215870/... . ponieważ jeśli umieszczę pobieranie pliku 1 GB, może to zająć dużo czasu. nawet ja jestem afk Mój komputer wciąż pobiera ten plik. Oznacza to, że mój komputer jest aktywny, prawda? : D
rɑːdʒɑ
+1 za doskonałe śledztwo i awarię. I @AgentCool, nie. Aktywność jest określana przez naciśnięcie klawiatury lub myszy. Twój plik do pobrania nie będzie naciskał żadnych klawiszy i utrzymywał komputer w stanie czuwania.
Oxwivi
@Oxwivi komentuje prawie rok temu. nie po edycji. :)
rɑːdʒɑ
@AgentCool Mój zły, nie zauważyłem. Wpis został niedawno zderzony, prawdopodobnie z powodu wczorajszej edycji. To pytanie mnie interesowało, więc je sprawdziłem.
Oxwivi