Como o ubuntu determina a inatividade antes de suspender?

13

Eu configurei para "suspender quando inativo" após 30 minutos.

Como isso determina se ele está inativo? É apenas a entrada do usuário via teclado / mouse?

Se eu deixar um programa funcionando - digamos, processando um vídeo, o que leva muito tempo, ele será suspenso após 30 minutos e o programa será interrompido? A mesma pergunta para downloads longos, será suspensa no meio.

    
por Jazz 31.07.2012 / 09:29

1 resposta

18

Boa pergunta. Vamos descobrir!

  1. Começando por investigando a opção "Suspender quando inativo por",

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

    podemos aprender que define uma chave GSettings chamada 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");
    

    O documentação para esta chave fornece uma breve descrição:

      

    A quantidade de tempo em segundos que o computador com energia CA precisa estar inativo antes de entrar no modo de suspensão. Um valor de 0 significa nunca.

    mas ainda não explica o que significa "inativo".

  2. Pesquisando por sleep-inactive-ac-timeout nos leva a < a href="http://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gsd-power-manager.c?id=410c71a0ab858d6c2ff3a67d707049e443880a06#n3257"> Configurações GNOME Daemon ,

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

    verifica periodicamente uma propriedade da sessão do GNOME chamada Presence.status :

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

    Se achar que o status é ocioso , coloca o sistema para dormir :

    idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);
    

    Portanto, precisamos aprender como a sessão do GNOME decide se o sistema está "inativo".

  3. Na sequência de trás de onde Sessão GNOME o valor de Presence.status ,

    gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);
    

    podemos ver que ele usa o contador IDLETIME do Xorg:

    if (... && strcmp (counters[i].name, "IDLETIME") == 0) {
        ...->counter = counters[i].counter;
    
  4. O comportamento do contador IDLETIME é resumido em um post no blog pelo autor do GNOME Power Manager:

      

    O gnome-power-manager usa um contador dentro do Xorg chamado IDLETIME. Este contador é incrementado somente quando o usuário não move o mouse ou clica em algumas teclas. Quando o usuário clica em algo, o IDLECOUNTER é redefinido.

Isso nos diz que o Ubuntu determina a inatividade medindo a quantidade de tempo que passou desde o último toque de tecla ou movimento do mouse. Uso da CPU e atividade de rede não levam em consideração.

    
por ændrük 02.10.2012 / 23:07

Tags