我注意到最近我的笔记本电脑在配置的 X 分钟不活动时间后不会像过去那样进入睡眠/锁定状态。我怀疑是某个程序(如媒体播放器)阻止了它进入睡眠状态。我没有运行任何媒体播放器,那么如何才能找到阻止它进入睡眠状态的程序?
如果我合上盖子,它就会进入睡眠状态。但我还希望它在 X 分钟不活动后进入睡眠状态。
更新:升级到 Ubuntu 18.04,并默认启用 Gnome 和 Wayland。
答案1
我想我已经明白了。
我用了:
dbus-send --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.GetInhibitors
获取抑制剂列表,例如:
array [
object path "/org/gnome/SessionManager/Inhibitor71"
object path "/org/gnome/SessionManager/Inhibitor72"
]
然后我做了:
dbus-send --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager/Inhibitor71 org.gnome.SessionManager.Inhibitor.GetAppId
返回:
string "firefox"
Firefox 似乎阻止了它。现在,当 YouTube 正在播放时,它似乎会阻止睡眠。
答案2
根据 Alexis Wilke 的回答,我创建了一个 python 解决方案:
https://pypi.org/project/list-session-inhibitors/
我已经激活了 Caffeine 插件和 Franz 消息应用程序,并且在不同的帐户中运行两个 Google Meet,一个在 Firefox 中,一个在 Chrome 中。
我的脚本产生如下输出:
tim@indigo:~$ inhibitors list
Listing inhibitors reported by dbus:
Inhibitor: /tmp/.mount_Franz-GuOnG8/franz Video Wake Lock
Inhibitor: /usr/bin/google-chrome-stable Video Wake Lock
Inhibitor: /usr/bin/google-chrome-stable WebRTC has active PeerConnections
Inhibitor: user Inhibit by Caffeine
Inhibitor: firefox audio-playing
Inhibitor: /usr/bin/google-chrome-stable Video Wake Lock
tim@indigo:~$
有一种替代方案systemd-inhibit --list
,但不太有帮助:
systemd-inhibit --list
WHO UID USER PID COMM WHAT WHY MODE
ModemManager 0 root 2222 ModemManager sleep ModemManager needs to reset devices delay
NetworkManager 0 root 1912 NetworkManager sleep NetworkManager needs to turn off networks delay
UPower 0 root 2654 upowerd sleep Pause device polling delay
Unattended Upgrades Shutdown 0 root 2449 unattended-upgr shutdown Stop ongoing upgrades or perform upgrades before shutdown delay
GNOME Shell 1000 tim 5039 gnome-shell sleep GNOME needs to lock the screen delay
Telepathy 1000 tim 5156 mission-control shutdown:sleep Disconnecting IM accounts before suspend/shutdown... delay
franz 1000 tim 69469 franz sleep Application cleanup before suspend delay
gnome-tweak-tool-lid-inhibitor 1000 tim 5325 python3 handle-lid-switch user preference block
tim 1000 tim 5255 gsd-media-keys handle-power-key:handle-suspend-key:handle-hibernate-key GNOME handling keypresses block
tim 1000 tim 5020 gnome-session-b shutdown:sleep user session inhibited block
tim 1000 tim 5255 gsd-media-keys sleep GNOME handling keypresses delay
tim 1000 tim 5257 gsd-power sleep GNOME needs to lock the screen delay
答案3
Mitar 绝对是正确的答案,您可以使用 dbus 来检索信息。
有趣的是,Firefox 中的某些选项卡会产生问题,而其他选项卡则不会。根据我现在的测试,我可以说它足够智能,可以根据页面内容添加/删除抑制功能 — 例如,在 YouTube 上,如果您有一段视频,它会抑制屏幕保护程序。
我写PHP 脚本为了将抑制剂列为简单列表。我敢打赌 Python 中有一些工具/库可以做到这一点(因为许多操作系统代码都使用该语言),但不幸的是我对 Python 的了解还不够。
将以下内容复制到文件中,~/bin/inhibitors
然后使用 使其可执行chmod 755 ~/bin/inhibitors
。现在您可以在控制台中输入:inhibitors
您将获得阻止操作系统进入睡眠状态的工具列表。
#!/usr/bin/php
<?php
$list = `dbus-send --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.GetInhibitors`;
$l = explode("\n", $list);
$found = false;
foreach($l as $a)
{
$a = trim($a);
if($found)
{
if($a == "]")
{
break;
}
if(substr($a, 0, 13) == 'object path "')
{
$inhibitor = substr($a, 13, strlen($a) - 14);
$info = `dbus-send --print-reply --dest=org.gnome.SessionManager $inhibitor org.gnome.SessionManager.Inhibitor.GetAppId`;
$names = explode("\n", $info);
$n = trim($names[1]);
if(substr($n, 0, 8) == 'string "')
{
$name = substr($n, 8, strlen($n) - 9);
echo $inhibitor, " ", $name, "\n";
}
}
}
elseif($a == "array [")
{
$found = true;
}
}
以下是输出示例:
$ inhibitors
/org/gnome/SessionManager/Inhibitor2414 firefox
/org/gnome/SessionManager/Inhibitor2415 org.gnome.Totem
在这种情况下,Firefox 和 Totem 会阻止我的屏幕保护程序。
答案4
如果您打开终端窗口,您可以输入“top”来查看所有正在运行的进程的不断更新的列表。其中一个繁忙的后台进程正在阻止您的笔记本电脑进入睡眠状态。要查看静态列表,请输入“ps aux”。然后,您可以查看它们的进程标识号。这将允许您对任何可疑进程使用“sudo kill pidnumber”,以查看停止它是否会让您的笔记本电脑进入睡眠状态(在其超时期限之后)。一旦您确定了有问题的进程,您就可以做出明智的决定,确定该进程对您是否重要。