İyi soru. Hadi bulalım!
"Etkin olmadığında askıya al" seçeneğini araştırarak başlayarak ,
<property ...>Suspend when inactive for</property> ...
<object ... id="combobox_sleep_ac">
bir GSettings anahtarı ayarladığını öğrenebiliriz 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");
Dokümantasyon bu anahtar için kısa bir açıklama sağlamaktadır:
AC gücüne sahip bilgisayarın uyku moduna geçmeden önce etkin olmaması gereken saniye cinsinden süre. 0 değeri asla anlamına gelmez.
ama yine de "inaktif" in ne anlama geldiğini açıklamıyor.
Arama yapmak sleep-inactive-ac-timeout
bizi GNOME Settings Daemon'a yönlendiriyor ,
timeout_sleep = g_settings_get_int (..., "sleep-inactive-ac-timeout");
bu , GNOME Oturumu adlı bir mülkü düzenli olarak denetlerPresence.status
:
result = g_dbus_proxy_get_cached_property (...->session_presence_proxy, "status");
O durum olduğunu tespit ederse boşta , bu uykuya sistemini koyar :
idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);
Bu yüzden GNOME Session'ın sistemin "boşta" olup olmadığına nasıl karar verdiğini öğrenmemiz gerekiyor.
GNOME Oturumunun değerini güncellediği noktadan sonra Presence.status
,
gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);
bunu görebilirsiniz kullananIDLETIME
Xorg gelen sayacı:
if (... && strcmp (counters[i].name, "IDLETIME") == 0) {
...->counter = counters[i].counter;
IDLETIME
Sayacın davranışı özetlenmektedir blog post GNOME Güç Yöneticisi yazarı:
gnome-power-manager Xorg içinde IDLETIME adlı bir sayaç kullanır. Bu sayaç yalnızca kullanıcı fareyi hareket ettirmediğinde veya bazı tuşları tıklattığında artırılır. Kullanıcı bir şeyi tıklattığında, IDLECOUNTER sıfırlanır.
Bu bize Ubuntu'nun son tuş vuruşu veya fare hareketinden bu yana geçen süreyi ölçerek hareketsizliği belirlediğini söyler. CPU kullanımı ve ağ etkinliği hesaba katılmaz.
wake up calls
.