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

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

我已将其设置为 30 分钟后“不活动时暂停”。

它如何确定是否处于非活动状态?它只是通过键盘/鼠标进行用户输入吗?

如果我让某个程序继续运行 - 比如说处理一个视频,这需要很长时间,它会在 30 分钟后暂停并停止该程序吗?对于长时间下载,也是同样的问题,它会在中途暂停吗?

答案1

好问题。让我们来一探究竟!

  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 会话的位置向后更新的价值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 Power Manager 作者:

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

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

相关内容