Wie ermittelt Ubuntu die Inaktivität vor dem Suspendieren?

14

Ich habe es nach 30 Minuten auf "Suspendieren, wenn inaktiv" gesetzt.

Wie wird festgestellt, ob es inaktiv ist? Ist es nur eine Benutzereingabe über Tastatur / Maus?

Wenn ich ein laufendes Programm stehen lasse - etwa wenn ich ein Video bearbeite, was sehr lange dauert, wird es nach 30 Minuten angehalten und das Programm gestoppt? Dieselbe Frage für lange Downloads, wird es auf halbem Weg unterbrochen.

Jazz
quelle
Suche nach wake up calls.
Rinzwind
In Askubuntu? Ich habe es gerade ausprobiert und alle Antworten scheinen sich auf das Aufwecken des Systems aus dem Suspend oder ähnlichem zu beziehen.
Jazz

Antworten:

19

Gute Frage. Lass es uns herausfinden!

  1. Beginnen Sie mit der Untersuchung der Option "Anhalten, wenn inaktiv für".

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

    wir können lernen , dass es setzt einen gsettings Schlüssel genannt 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");

    Die Dokumentation zu diesem Schlüssel enthält eine kurze Beschreibung:

    Die Zeit in Sekunden, die der Computer mit Wechselstrom betrieben werden muss, bevor er in den Energiesparmodus versetzt wird. Ein Wert von 0 bedeutet nie.

    erklärt aber immer noch nicht, was "inaktiv" bedeutet.

  2. Die Suche nach sleep-inactive-ac-timeoutführt uns zu GNOME - Einstellungen Daemon ,

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

    Das überprüft regelmäßig eine Eigenschaft der GNOME-Sitzung mit dem Namen Presence.status:

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

    Wenn sich herausstellt, dass der Status inaktiv ist , wird das System in den Ruhezustand versetzt :

    idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);

    Wir müssen also lernen, wie GNOME Session entscheidet, ob das System "inaktiv" ist.

  3. Rückwärts verfolgen, von wo aus GNOME Session den Wert von , aktualisiertPresence.status .

    gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);

    wir können sehen , dass es verwendet den IDLETIMEZähler von Xorg:

    if (... && strcmp (counters[i].name, "IDLETIME") == 0) {
        ...->counter = counters[i].counter;
  4. Das IDLETIMEVerhalten des Zählers wird in einem Blog-Beitrag des Autors von GNOME Power Manager zusammengefasst:

    Gnome-Power-Manager verwendet einen Zähler in Xorg namens IDLETIME. Dieser Zähler wird nur erhöht, wenn der Benutzer die Maus nicht bewegt oder einige Tasten drückt. Wenn der Benutzer auf etwas klickt, wird der IDLECOUNTER zurückgesetzt.

Dies sagt uns, dass Ubuntu die Inaktivität bestimmt, indem es die Zeit misst, die seit dem letzten Tastendruck oder der letzten Mausbewegung vergangen ist. CPU-Auslastung und Netzwerkaktivität werden nicht berücksichtigt.

ændrük
quelle
wie du in letzter zeile gesagt hast warum die CPU auslastung nicht nennenswert ist? Mein Zweifel ist, dass ich von askubuntu.com/questions/215870/… kam . denn wenn ich den Download von 1GB-Dateien stelle, kann es eine Menge Zeit in Anspruch nehmen. selbst ich bin afk Mein PC macht noch den Download dieser Datei richtig. Das heißt, mein PC ist aktiv, oder? : D
rɑːdʒɑ
+1 für hervorragende Untersuchung und Aufschlüsselung. Und @AgentCool, nein. Die Aktivität wird durch Drücken der Tastatur oder der Maus bestimmt. Ihr Download wird keine Tasten drücken und den PC wach halten.
Oxwivi
@Oxwivi thats Kommentar vor fast einem Jahr. nicht nach der Bearbeitung. :)
Dienstag,
@AgentCool Meine schlechte, ich habe es nicht bemerkt. Der Beitrag wurde vor kurzem gestoßen, wahrscheinlich aufgrund der gestrigen Bearbeitung. War eine Frage, die mich interessierte, so überprüfte es.
Oxwivi