我已将其设置为 30 分钟后“不活动时暂停”。
它如何确定是否处于非活动状态?它只是通过键盘/鼠标进行用户输入吗?
如果我让某个程序继续运行 - 比如说处理一个视频,这需要很长时间,它会在 30 分钟后暂停并停止该程序吗?对于长时间下载,也是同样的问题,它会在中途暂停吗?
答案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 值表示永不。
但仍然没有解释“不活跃”的含义。
搜索引领
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 如何判断系统是否处于“空闲”状态。
从 GNOME 会话的位置向后更新的价值
Presence.status
,gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);
我们可以看到用途
IDLETIME
Xorg 的计数器:if (... && strcmp (counters[i].name, "IDLETIME") == 0) { ...->counter = counters[i].counter;
计数器
IDLETIME
的行为总结如下博客文章GNOME Power Manager 作者:gnome-power-manager 使用 Xorg 内部的一个名为 IDLETIME 的计数器。仅当用户不移动鼠标或单击某些键时,此计数器才会递增。当用户单击某些内容时,IDLECOUNTER 会被重置。
这告诉我们,Ubuntu 通过测量自上次击键或鼠标移动以来经过的时间来确定不活动状态。CPU 使用率和网络活动不被考虑在内。