ubuntu如何在挂起之前确定不活动?


14

30分钟后,我将其设置为“闲置时暂停”。

如何确定它是否处于非活动状态?仅仅是用户通过键盘/鼠标输入的内容吗?

如果我让程序无法正常工作-例如处理需要很长时间的视频,它会在30分钟后暂停并停止该程序吗?对于长下载内容也存在同样的问题,它将暂停一半。


搜索wake up calls
Rinzwind

在Askubuntu?我只是尝试了一下,所有答案似乎都与从暂停或类似状态唤醒系统有关。
爵士

Answers:


19

好问题。让我们找出答案!

  1. 首先研究 “不活动时暂停”的选项,

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

    我们可以了解到它设置了一个名为GSettings的键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");

    该密钥的文档提供了简要说明:

    电脑进入睡眠状态之前,必须先关闭交流电源的时间(以秒为单位)。值为0表示从不。

    但仍然无法解释“无效”的含义。

  2. 搜索sleep-inactive-ac-timeout使我们GNOME设置守护进程

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

    它会定期检查 GNOME Session的一个属性Presence.status

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

    如果发现状态为空闲,则使系统进入睡眠状态

    idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);

    因此,我们需要学习GNOME Session如何确定系统是否为“空闲”。

  3. 从GNOME Session 更新值的位置开始Presence.status

    gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);

    我们可以看到它使用IDLETIMEXorg 的计数器:

    if (... && strcmp (counters[i].name, "IDLETIME") == 0) {
        ...->counter = counters[i].counter;
  4. IDLETIME计数器的行为总结在博客文章由GNOME电源管理器的作者:

    gnome-power-manager在Xorg内部使用一个称为IDLETIME的计数器。仅当用户不移动鼠标或单击某些键时,此计数器才会增加。当用户单击某些内容时,将重置IDLECOUNTER。

这告诉我们,Ubuntu通过测量自上次击键或鼠标移动以来经过的时间来确定不活动状态。不考虑CPU使用率和网络活动。


正如您在最后一行所述,为什么CPU使用率不高?我的疑问是我来自askubuntu.com/questions/215870/…。因为如果我下载1GB的文件会花费很多时间。即使是我,我的PC仍在下载该文件。这意味着我的电脑处于活动状态吗?:d
rɑːdʒɑ

+1可进行出色的调查和分解。还有@AgentCool,不。活动取决于键盘或鼠标的按下。您的下载将不会按任何键并使PC保持唤醒状态。
Oxwivi 2014年

@Oxwivi那是一年多以前的评论。不在编辑之后。:)
rɑːdʒɑ

@AgentCool我不好,我没有注意到。该帖子最近遭到了颠簸,可能是由于昨天的编辑。是我感兴趣的问题,所以检查了一下。
Oxwivi 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.