Comment ubuntu détermine-t-il l'inactivité avant de suspendre?

14

Je l'ai réglé sur "suspendre lorsqu'il est inactif" après 30 minutes.

Comment détermine-t-il s'il est inactif? S'agit-il uniquement d'une saisie utilisateur via clavier / souris?

Si je laisse un programme travailler - disons que le traitement d'une vidéo, qui prend beaucoup de temps, va-t-il être suspendu après 30 minutes et arrêter ce programme? Même question pour les longs téléchargements, sera-t-il suspendu à mi-chemin.

le jazz
la source
Ayez une recherche pour wake up calls.
Rinzwind
À Askubuntu? Je viens de l'essayer et toutes les réponses semblent concerner la sortie du système de la suspension ou similaire.
Jazz

Réponses:

19

Bonne question. Découvrons-le!

  1. En commençant par étudier l'option "Suspendre en cas d'inactivité pour",

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

    nous pouvons apprendre qu'il définit une clé GSettings appelée 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");

    La documentation de cette clé fournit une brève description:

    La durée en secondes pendant laquelle l'ordinateur sous tension CA doit être inactif avant de se mettre en veille. Une valeur de 0 signifie jamais.

    mais n'explique toujours pas ce que signifie "inactif".

  2. La recherche de sleep-inactive-ac-timeoutnous mène au démon de paramètres GNOME ,

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

    qui vérifie périodiquement une propriété de la session GNOME appelée Presence.status:

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

    S'il constate que l'état est inactif , il met le système en veille :

    idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);

    Nous devons donc savoir comment la session GNOME décide si le système est "inactif".

  3. En suivant en arrière d'où GNOME Session met à jour la valeur de Presence.status,

    gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);

    on peut voir qu'il utilise le IDLETIMEcompteur de Xorg:

    if (... && strcmp (counters[i].name, "IDLETIME") == 0) {
        ...->counter = counters[i].counter;
  4. Le IDLETIMEcomportement du compteur est résumé dans un article de blog de l'auteur de GNOME Power Manager:

    gnome-power-manager utilise un compteur à l'intérieur de Xorg appelé IDLETIME. Ce compteur est incrémenté uniquement lorsque l'utilisateur ne déplace pas la souris ou ne clique pas sur certaines touches. Lorsque l'utilisateur clique sur quelque chose, l'IDLECOUNTER est réinitialisé.

Cela nous indique qu'Ubuntu détermine l'inactivité en mesurant le temps qui s'est écoulé depuis le dernier mouvement de touche ou de souris. L'utilisation du processeur et l'activité du réseau ne sont pas prises en compte.

ændrük
la source
comme vous l'avez dit à la dernière ligne, pourquoi l'utilisation du processeur n'est pas considérable? Mon doute est que je viens de askubuntu.com/questions/215870/… . parce que si je mets le téléchargement d'un fichier de 1 Go, cela peut prendre beaucoup de temps. même je suis afk Mon PC continue de télécharger ce fichier correctement. Cela signifie que mon PC est actif, non? : D
rɑːdʒɑ
+1 pour une excellente enquête et ventilation. Et @AgentCool, non. L'activité est déterminée par le clavier ou la souris. Votre téléchargement ne va appuyer sur aucune touche et garder le PC éveillé.
Oxwivi
@Oxwivi c'est un commentaire il y a presque un an. pas après le montage. :)
rɑːdʒɑ
@AgentCool Mon mauvais, je ne l'ai pas remarqué. Le message a récemment été annulé, probablement en raison de la modification d'hier. C'était une question qui m'intéressait, alors j'ai vérifié.
Oxwivi