Nastavil jsem jej na „pozastavit, když není aktivní“ po 30 minutách.
Jak zjistí, zda je neaktivní? Je to jen uživatelský vstup pomocí klávesnice/myši?
Pokud nechám program pracovat mimo provoz – řekněme zpracování videa, které trvá dlouho, pozastaví se po 30 minutách a zastaví tento program? Stejná otázka pro dlouhé stahování, pozastaví se v polovině.
Přijatá odpověď:
Dobrá otázka. Pojďme to zjistit!
-
Začněte zkoumáním možnosti „Pozastavit, když je neaktivní pro“,
<property ...>Suspend when inactive for</property> ... <object ... id="combobox_sleep_ac">
můžeme se naučit, že nastavuje klíč GSettings s názvem
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");
Dokumentace k tomuto klíči poskytuje stručný popis:
Doba v sekundách, po kterou musí být počítač napájený ze sítě neaktivní, než přejde do režimu spánku. Hodnota 0 znamená nikdy.
ale stále nevysvětluje, co znamená „neaktivní“.
-
Hledání
sleep-inactive-ac-timeout
nás vede k démonu nastavení GNOME,timeout_sleep = g_settings_get_int (..., "sleep-inactive-ac-timeout");
který pravidelně kontroluje vlastnost GNOME Session nazvanou
Presence.status
:result = g_dbus_proxy_get_cached_property (...->session_presence_proxy, "status");
Pokud zjistí, že stav je nečinný, uvede systém do režimu spánku:
idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);
Potřebujeme se tedy naučit, jak GNOME Session rozhoduje, zda je systém „nečinný“.
-
Následuje zpětný krok od místa, kde relace GNOME aktualizuje hodnotu
Presence.status
,gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);
můžeme vidět, že používá
IDLETIME
čítač z Xorg:if (... && strcmp (counters[i].name, "IDLETIME") == 0) { ...->counter = counters[i].counter;
-
IDLETIME
chování čítače je shrnuto v blogovém příspěvku od autora GNOME Power Manager:gnome-power-manager používá počítadlo uvnitř Xorg s názvem IDLETIME. Tento čítač se zvýší pouze tehdy, když uživatel nepohne myší nebo neklepne na některé klávesy. Když uživatel na něco klikne, IDLECOUNTER se resetuje.
To nám říká, že Ubuntu určuje nečinnost měřením doby, která uplynula od posledního stisknutí klávesy nebo pohybu myši. Využití CPU a síťová aktivita nehrají roli.
Související:Mac – Vytvoření virtuálního počítače Ubuntu pomocí VirtualBox?