ubuntu在暂停之前如何确定不活动?

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

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

如果我让一个程序正在工作 – 说处理video需要很长时间,它会在30分钟后暂停并停止该程序吗? 对于长时间下载的同样问题,它会在中途暂停。

好问题。 我们来看看吧!

  1. 首先调查 “暂停时暂停”选项,

     Suspend when inactive for ...  

    我们可以知道它设置了一个名为sleep-inactive-ac-timeout的GSettings密钥:

     widget = GTK_WIDGET (gtk_builder_get_object (..., "combobox_sleep_ac")); ... g_object_set_data (G_OBJECT(widget), "_gsettings_key", "sleep-inactive-ac-timeout"); 

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

    计算机在交流电源进入hibernate状态之前需要处于非活动状态的时间(以秒为单位)。 值0表示永远不会。

    但仍然没有解释“不活跃”的含义。

  2. 搜索 sleep-inactive-ac-timeout导致我们进入GNOME设置守护进程 ,

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

    它定期检查名为Presence.status的GNOME会话的属性:

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

    如果它发现状态为空闲 ,则会使系统进入hibernate状态 :

     idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP); 

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

  3. 从GNOME Session 更新 Presence.status的值后退,

     gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...); 

    我们可以看到它使用了Xorg的IDLETIME计数器:

     if (... && strcmp (counters[i].name, "IDLETIME") == 0) { ...->counter = counters[i].counter; 
  4. IDLETIME计数器的行为在GNOME Power Manager的作者的博客文章中进行了总结:

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

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